diff --git a/.gitignore b/.gitignore index efa8454e5..f7d29a71e 100644 --- a/.gitignore +++ b/.gitignore @@ -94,3 +94,6 @@ cypress/videos/ packages/core/typescript/itk-wasm/dist CMakePresets.json + +packages/core/typescript/itk-wasm/test/data/cow.iwm +packages/transform-io/typescript/demo-app/ diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py index a9c316e20..6c235c596 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py @@ -1 +1 @@ -__version__ = "5.1.1" +__version__ = "5.2.0" diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py index 66ec334a0..d126f5924 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_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,dmFyIER0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgU3Q9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlEdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIGJ0PSI1LjEuMSIsa0E9YnQ7dmFyIEZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sZj1GdDt2YXIga3Q9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHk9a3Q7ZnVuY3Rpb24gUnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIGYuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGYuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGYuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgZi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIHkuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgeS5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIEw9UnQ7dmFyIFV0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sYj1VdDt2YXIgUkE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9Zi5VSW50OCx0PWIuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sQ2U9UkE7ZnVuY3Rpb24gTnQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBCZT1OdDt2YXIgVUE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IENlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylCZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGxlPVVBO2Z1bmN0aW9uIEd0KEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PWIuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgbGUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBmLlVJbnQ4OmNhc2UgZi5JbnQ4OmNhc2UgZi5VSW50MTY6Y2FzZSBmLkludDE2OmNhc2UgZi5VSW50MzI6Y2FzZSBmLkludDMyOmNhc2UgeS5GbG9hdDMyOmNhc2UgeS5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGYuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2UgeS5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSB5LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBmLlVJbnQ2NDpjYXNlIGYuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgZi5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB5LkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB5LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBvQT1HdDt2YXIgTHQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxwPUx0O3ZhciBFZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxUdD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxMQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksTkE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHNBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxRZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIix4dD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZBW0VlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6cn09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiB1ZShBLGUpLFtyLFtyXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksVEEoQSl9fSxPdD17Y2FuSGFuZGxlOkE9PlFlKEEpJiZzQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sZmU9bmV3IE1hcChbWyJwcm94eSIseHRdLFsidGhyb3ciLE90XV0pO2Z1bmN0aW9uIEp0KEEsZSl7Zm9yKGxldCByIG9mIEEpaWYoZT09PXJ8fHI9PT0iKiJ8fHIgaW5zdGFuY2VvZiBSZWdFeHAmJnIudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiB1ZShBLGU9Z2xvYmFsVGhpcyxyPVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHQobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCFKdChyLG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDppLHR5cGU6byxwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksbD0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChKKSxCO3RyeXtsZXQgST1nLnNsaWNlKDAsLTEpLnJlZHVjZSgoUSxDKT0+UVtDXSxBKSxhPWcucmVkdWNlKChRLEMpPT5RW0NdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6Qj1hO2JyZWFrO2Nhc2UiU0VUIjpJW2cuc2xpY2UoLTEpWzBdXT1KKG4uZGF0YS52YWx1ZSksQj0hMDticmVhaztjYXNlIkFQUExZIjpCPWEuYXBwbHkoSSxsKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBRPW5ldyBhKC4uLmwpO0I9cXQoUSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpRLHBvcnQyOkN9PW5ldyBNZXNzYWdlQ2hhbm5lbDt1ZShBLEMpLEI9eEEoUSxbUV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Qj12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKEkpe0I9e3ZhbHVlOkksW3NBXTowfX1Qcm9taXNlLnJlc29sdmUoQikuY2F0Y2goST0+KHt2YWx1ZTpJLFtzQV06MH0pKS50aGVuKEk9PntsZXRbYSxRXT1DQShJKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLFEpLG89PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHQpLGRlKGUpLE5BIGluIEEmJnR5cGVvZiBBW05BXT09ImZ1bmN0aW9uIiYmQVtOQV0oKSl9KS5jYXRjaChJPT57bGV0W2EsUV09Q0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtzQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDppfSksUSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBQdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBkZShBKXtQdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIFRBKEEsZSl7cmV0dXJuIEdBKEEsW10sZSl9ZnVuY3Rpb24gYUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIHBlKEEpe3JldHVybiBQKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e2RlKEEpfSl9dmFyIElBPW5ldyBXZWFrTWFwLGdBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShJQS5nZXQoQSl8fDApLTE7SUEuc2V0KEEsZSksZT09PTAmJnBlKEEpfSk7ZnVuY3Rpb24gTXQoQSxlKXtsZXQgcj0oSUEuZ2V0KGUpfHwwKSsxO0lBLnNldChlLHIpLGdBJiZnQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gSHQoQSl7Z0EmJmdBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gR0EoQSxlPVtdLHI9ZnVuY3Rpb24oKXt9KXtsZXQgdD0hMSxuPW5ldyBQcm94eShyLHtnZXQoaSxvKXtpZihhQSh0KSxvPT09TEEpcmV0dXJuKCk9PntIdChuKSxwZShBKSx0PSEwfTtpZihvPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBnPVAoQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGw9PmwudG9TdHJpbmcoKSl9KS50aGVuKEopO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gR0EoQSxbLi4uZSxvXSl9LHNldChpLG8sZyl7YUEodCk7bGV0W2wsQl09Q0EoZyk7cmV0dXJuIFAoQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLG9dLm1hcChJPT5JLnRvU3RyaW5nKCkpLHZhbHVlOmx9LEIpLnRoZW4oSil9LGFwcGx5KGksbyxnKXthQSh0KTtsZXQgbD1lW2UubGVuZ3RoLTFdO2lmKGw9PT1UdClyZXR1cm4gUChBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKEopO2lmKGw9PT0iYmluZCIpcmV0dXJuIEdBKEEsZS5zbGljZSgwLC0xKSk7bGV0W0IsSV09Y2UoZyk7cmV0dXJuIFAoQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Qn0sSSkudGhlbihKKX0sY29uc3RydWN0KGksbyl7YUEodCk7bGV0W2csbF09Y2Uobyk7cmV0dXJuIFAoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEI9PkIudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LGwpLnRoZW4oSil9fSk7cmV0dXJuIE10KG4sQSksbn1mdW5jdGlvbiBZdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBjZShBKXtsZXQgZT1BLm1hcChDQSk7cmV0dXJuW2UubWFwKHI9PnJbMF0pLFl0KGUubWFwKHI9PnJbMV0pKV19dmFyIG1lPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHhBKEEsZSl7cmV0dXJuIG1lLnNldChBLGUpLEF9ZnVuY3Rpb24gcXQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W0VlXTohMH0pfWZ1bmN0aW9uIENBKEEpe2ZvcihsZXRbZSxyXW9mIGZlKWlmKHIuY2FuSGFuZGxlKEEpKXtsZXRbdCxuXT1yLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTp0fSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sbWUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gSihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBmZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIFAoQSxlLHIpe3JldHVybiBuZXcgUHJvbWlzZSh0PT57bGV0IG49S3QoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGkobyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaSksdChvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHIpfSl9ZnVuY3Rpb24gS3QoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIFYoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpXdH09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6UEF9PU9iamVjdCxsQT0oQT0+ZT0+e2xldCByPVd0LmNhbGwoZSk7cmV0dXJuIEFbcl18fChBW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxOPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5sQShlKT09PUEpLGNBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTpNfT1BcnJheSx6PWNBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBqdChBKXtyZXR1cm4gQSE9PW51bGwmJiF6KEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIXooQS5jb25zdHJ1Y3RvcikmJmsoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIERlPU4oIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gdnQoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZEZShBLmJ1ZmZlciksZX12YXIgX3Q9Y0EoInN0cmluZyIpLGs9Y0EoImZ1bmN0aW9uIiksU2U9Y0EoIm51bWJlciIpLEVBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsVnQ9QT0+QT09PSEwfHxBPT09ITEsQkE9QT0+e2lmKGxBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9UEEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0senQ9TigiRGF0ZSIpLFp0PU4oIkZpbGUiKSxYdD1OKCJCbG9iIiksJHQ9TigiRmlsZUxpc3QiKSxBcj1BPT5FQShBKSYmayhBLnBpcGUpLGVyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxrKEEuYXBwZW5kKSYmKChlPWxBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmayhBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSx0cj1OKCJVUkxTZWFyY2hQYXJhbXMiKSxycj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gWihBLGUse2FsbE93bktleXM6cj0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCB0LG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLE0oQSkpZm9yKHQ9MCxuPUEubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsQVt0XSx0LEEpO2Vsc2V7bGV0IGk9cj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxvPWkubGVuZ3RoLGc7Zm9yKHQ9MDt0PG87dCsrKWc9aVt0XSxlLmNhbGwobnVsbCxBW2ddLGcsQSl9fWZ1bmN0aW9uIGJlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHI9T2JqZWN0LmtleXMoQSksdD1yLmxlbmd0aCxuO2Zvcig7dC0tID4wOylpZihuPXJbdF0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgRmU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxrZT1BPT4heihBKSYmQSE9PUZlO2Z1bmN0aW9uIEpBKCl7bGV0e2Nhc2VsZXNzOkF9PWtlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHI9KHQsbik9PntsZXQgaT1BJiZiZShlLG4pfHxuO0JBKGVbaV0pJiZCQSh0KT9lW2ldPUpBKGVbaV0sdCk6QkEodCk/ZVtpXT1KQSh7fSx0KTpNKHQpP2VbaV09dC5zbGljZSgpOmVbaV09dH07Zm9yKGxldCB0PTAsbj1hcmd1bWVudHMubGVuZ3RoO3Q8bjt0KyspYXJndW1lbnRzW3RdJiZaKGFyZ3VtZW50c1t0XSxyKTtyZXR1cm4gZX12YXIgbnI9KEEsZSxyLHthbGxPd25LZXlzOnR9PXt9KT0+KFooZSwobixpKT0+e3ImJmsobik/QVtpXT1WKG4scik6QVtpXT1ufSx7YWxsT3duS2V5czp0fSksQSksaXI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxvcj0oQSxlLHIsdCk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHQpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSxyJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHIpfSxhcj0oQSxlLHIsdCk9PntsZXQgbixpLG8sZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksaT1uLmxlbmd0aDtpLS0gPjA7KW89bltpXSwoIXR8fHQobyxBLGUpKSYmIWdbb10mJihlW29dPUFbb10sZ1tvXT0hMCk7QT1yIT09ITEmJlBBKEEpfXdoaWxlKEEmJighcnx8cihBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxzcj0oQSxlLHIpPT57QT1TdHJpbmcoQSksKHI9PT12b2lkIDB8fHI+QS5sZW5ndGgpJiYocj1BLmxlbmd0aCksci09ZS5sZW5ndGg7bGV0IHQ9QS5pbmRleE9mKGUscik7cmV0dXJuIHQhPT0tMSYmdD09PXJ9LElyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihNKEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFTZShlKSlyZXR1cm4gbnVsbDtsZXQgcj1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXJbZV09QVtlXTtyZXR1cm4gcn0sZ3I9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJlBBKFVpbnQ4QXJyYXkpKSxDcj0oQSxlKT0+e2xldCB0PShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXQubmV4dCgpKSYmIW4uZG9uZTspe2xldCBpPW4udmFsdWU7ZS5jYWxsKEEsaVswXSxpWzFdKX19LEJyPShBLGUpPT57bGV0IHIsdD1bXTtmb3IoOyhyPUEuZXhlYyhlKSkhPT1udWxsOyl0LnB1c2gocik7cmV0dXJuIHR9LGxyPU4oIkhUTUxGb3JtRWxlbWVudCIpLGNyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHIsdCxuKXtyZXR1cm4gdC50b1VwcGVyQ2FzZSgpK259KSx5ZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHIpPT5BLmNhbGwoZSxyKSkoT2JqZWN0LnByb3RvdHlwZSksRXI9TigiUmVnRXhwIiksUmU9KEEsZSk9PntsZXQgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSx0PXt9O1oociwobixpKT0+e2xldCBvOyhvPWUobixpLEEpKSE9PSExJiYodFtpXT1vfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsdCl9LFFyPUE9PntSZShBLChlLHIpPT57aWYoayhBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpIT09LTEpcmV0dXJuITE7bGV0IHQ9QVtyXTtpZihrKHQpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSl9fSl9LGZyPShBLGUpPT57bGV0IHI9e30sdD1uPT57bi5mb3JFYWNoKGk9PntyW2ldPSEwfSl9O3JldHVybiBNKEEpP3QoQSk6dChTdHJpbmcoQSkuc3BsaXQoZSkpLHJ9LHVyPSgpPT57fSxkcj0oQSxlKT0+KEE9K0EsTnVtYmVyLmlzRmluaXRlKEEpP0E6ZSksT0E9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3ZT0iMDEyMzQ1Njc4OSIsVWU9e0RJR0lUOndlLEFMUEhBOk9BLEFMUEhBX0RJR0lUOk9BK09BLnRvVXBwZXJDYXNlKCkrd2V9LHByPShBPTE2LGU9VWUuQUxQSEFfRElHSVQpPT57bGV0IHI9IiIse2xlbmd0aDp0fT1lO2Zvcig7QS0tOylyKz1lW01hdGgucmFuZG9tKCkqdHwwXTtyZXR1cm4gcn07ZnVuY3Rpb24gbXIoQSl7cmV0dXJuISEoQSYmayhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIGhyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHI9KHQsbik9PntpZihFQSh0KSl7aWYoZS5pbmRleE9mKHQpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gdCkpe2Vbbl09dDtsZXQgaT1NKHQpP1tdOnt9O3JldHVybiBaKHQsKG8sZyk9PntsZXQgbD1yKG8sbisxKTsheihsKSYmKGlbZ109bCl9KSxlW25dPXZvaWQgMCxpfX1yZXR1cm4gdH07cmV0dXJuIHIoQSwwKX0seXI9TigiQXN5bmNGdW5jdGlvbiIpLHdyPUE9PkEmJihFQShBKXx8ayhBKSkmJmsoQS50aGVuKSYmayhBLmNhdGNoKSxzPXtpc0FycmF5Ok0saXNBcnJheUJ1ZmZlcjpEZSxpc0J1ZmZlcjpqdCxpc0Zvcm1EYXRhOmVyLGlzQXJyYXlCdWZmZXJWaWV3OnZ0LGlzU3RyaW5nOl90LGlzTnVtYmVyOlNlLGlzQm9vbGVhbjpWdCxpc09iamVjdDpFQSxpc1BsYWluT2JqZWN0OkJBLGlzVW5kZWZpbmVkOnosaXNEYXRlOnp0LGlzRmlsZTpadCxpc0Jsb2I6WHQsaXNSZWdFeHA6RXIsaXNGdW5jdGlvbjprLGlzU3RyZWFtOkFyLGlzVVJMU2VhcmNoUGFyYW1zOnRyLGlzVHlwZWRBcnJheTpncixpc0ZpbGVMaXN0OiR0LGZvckVhY2g6WixtZXJnZTpKQSxleHRlbmQ6bnIsdHJpbTpycixzdHJpcEJPTTppcixpbmhlcml0czpvcix0b0ZsYXRPYmplY3Q6YXIsa2luZE9mOmxBLGtpbmRPZlRlc3Q6TixlbmRzV2l0aDpzcix0b0FycmF5OklyLGZvckVhY2hFbnRyeTpDcixtYXRjaEFsbDpCcixpc0hUTUxGb3JtOmxyLGhhc093blByb3BlcnR5OnllLGhhc093blByb3A6eWUscmVkdWNlRGVzY3JpcHRvcnM6UmUsZnJlZXplTWV0aG9kczpRcix0b09iamVjdFNldDpmcix0b0NhbWVsQ2FzZTpjcixub29wOnVyLHRvRmluaXRlTnVtYmVyOmRyLGZpbmRLZXk6YmUsZ2xvYmFsOkZlLGlzQ29udGV4dERlZmluZWQ6a2UsQUxQSEFCRVQ6VWUsZ2VuZXJhdGVTdHJpbmc6cHIsaXNTcGVjQ29tcGxpYW50Rm9ybTptcix0b0pTT05PYmplY3Q6aHIsaXNBc3luY0ZuOnlyLGlzVGhlbmFibGU6d3J9O2Z1bmN0aW9uIEgoQSxlLHIsdCxuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksciYmKHRoaXMuY29uZmlnPXIpLHQmJih0aGlzLnJlcXVlc3Q9dCksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhILEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTmU9SC5wcm90b3R5cGUsR2U9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57R2VbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSCxHZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5lLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO0guZnJvbT0oQSxlLHIsdCxuLGkpPT57bGV0IG89T2JqZWN0LmNyZWF0ZShOZSk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsbyxmdW5jdGlvbihsKXtyZXR1cm4gbCE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxILmNhbGwobyxBLm1lc3NhZ2UsZSxyLHQsbiksby5jYXVzZT1BLG8ubmFtZT1BLm5hbWUsaSYmT2JqZWN0LmFzc2lnbihvLGkpLG99O3ZhciBkPUg7dmFyIFFBPW51bGw7ZnVuY3Rpb24gTUEoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIFRlKEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIExlKEEsZSxyKXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixpKXtyZXR1cm4gbj1UZShuKSwhciYmaT8iWyIrbisiXSI6bn0pLmpvaW4ocj8iLiI6IiIpOmV9ZnVuY3Rpb24gRHIoQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShNQSl9dmFyIFNyPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBicihBLGUscil7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoUUF8fEZvcm1EYXRhKSxyPXMudG9GbGF0T2JqZWN0KHIse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihjLHUpe3JldHVybiFzLmlzVW5kZWZpbmVkKHVbY10pfSk7bGV0IHQ9ci5tZXRhVG9rZW5zLG49ci52aXNpdG9yfHxJLGk9ci5kb3RzLG89ci5pbmRleGVzLGw9KHIuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBCKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIWwmJnMuaXNCbG9iKEUpKXRocm93IG5ldyBkKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIoRSl8fHMuaXNUeXBlZEFycmF5KEUpP2wmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBJKEUsYyx1KXtsZXQgbT1FO2lmKEUmJiF1JiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoYywie30iKSljPXQ/YzpjLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihzLmlzQXJyYXkoRSkmJkRyKEUpfHwocy5pc0ZpbGVMaXN0KEUpfHxzLmVuZHNXaXRoKGMsIltdIikpJiYobT1zLnRvQXJyYXkoRSkpKXJldHVybiBjPVRlKGMpLG0uZm9yRWFjaChmdW5jdGlvbihVLHd0KXshKHMuaXNVbmRlZmluZWQoVSl8fFU9PT1udWxsKSYmZS5hcHBlbmQobz09PSEwP0xlKFtjXSx3dCxpKTpvPT09bnVsbD9jOmMrIltdIixCKFUpKX0pLCExfXJldHVybiBNQShFKT8hMDooZS5hcHBlbmQoTGUodSxjLGkpLEIoRSkpLCExKX1sZXQgYT1bXSxRPU9iamVjdC5hc3NpZ24oU3Ise2RlZmF1bHRWaXNpdG9yOkksY29udmVydFZhbHVlOkIsaXNWaXNpdGFibGU6TUF9KTtmdW5jdGlvbiBDKEUsYyl7aWYoIXMuaXNVbmRlZmluZWQoRSkpe2lmKGEuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitjLmpvaW4oIi4iKSk7YS5wdXNoKEUpLHMuZm9yRWFjaChFLGZ1bmN0aW9uKG0sUil7KCEocy5pc1VuZGVmaW5lZChtKXx8bT09PW51bGwpJiZuLmNhbGwoZSxtLHMuaXNTdHJpbmcoUik/Ui50cmltKCk6UixjLFEpKT09PSEwJiZDKG0sYz9jLmNvbmNhdChSKTpbUl0pfSksYS5wb3AoKX19aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBDKEEpLGV9dmFyIFQ9YnI7ZnVuY3Rpb24geGUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5jdGlvbiBPZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJlQoQSx0aGlzLGUpfXZhciBKZT1PZS5wcm90b3R5cGU7SmUuYXBwZW5kPWZ1bmN0aW9uKGUscil7dGhpcy5fcGFpcnMucHVzaChbZSxyXSl9O0plLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCByPWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQseGUpfTp4ZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByKG5bMF0pKyI9IityKG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgZkE9T2U7ZnVuY3Rpb24gRnIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gWChBLGUscil7aWYoIWUpcmV0dXJuIEE7bGV0IHQ9ciYmci5lbmNvZGV8fEZyLG49ciYmci5zZXJpYWxpemUsaTtpZihuP2k9bihlLHIpOmk9cy5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGZBKGUscikudG9TdHJpbmcodCksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIEhBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSxyLHQpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnIsc3luY2hyb25vdXM6dD90LnN5bmNocm9ub3VzOiExLHJ1bldoZW46dD90LnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtzLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbih0KXt0IT09bnVsbCYmZSh0KX0pfX0sWUE9SEE7dmFyIHVBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgUGU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmZBO3ZhciBNZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEhlPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIFllPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOlBlLEZvcm1EYXRhOk1lLEJsb2I6SGV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgcUE9e307U3QocUEse2hhc0Jyb3dzZXJFbnY6KCk9PnFlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+a3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Scn0pO3ZhciBxZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixrcj0oQT0+cWUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxScj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIEQ9ey4uLnFBLC4uLlllfTtmdW5jdGlvbiBLQShBLGUpe3JldHVybiBUKEEsbmV3IEQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihyLHQsbixpKXtyZXR1cm4gRC5pc05vZGUmJnMuaXNCdWZmZXIocik/KHRoaXMuYXBwZW5kKHQsci50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBVcihBKXtyZXR1cm4gcy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIE5yKEEpe2xldCBlPXt9LHI9T2JqZWN0LmtleXMoQSksdCxuPXIubGVuZ3RoLGk7Zm9yKHQ9MDt0PG47dCsrKWk9clt0XSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZShyLHQsbixpKXtsZXQgbz1yW2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBnPU51bWJlci5pc0Zpbml0ZSgrbyksbD1pPj1yLmxlbmd0aDtyZXR1cm4gbz0hbyYmcy5pc0FycmF5KG4pP24ubGVuZ3RoOm8sbD8ocy5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSx0XTpuW29dPXQsIWcpOigoIW5bb118fCFzLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUocix0LG5bb10saSkmJnMuaXNBcnJheShuW29dKSYmKG5bb109TnIobltvXSkpLCFnKX1pZihzLmlzRm9ybURhdGEoQSkmJnMuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgcj17fTtyZXR1cm4gcy5mb3JFYWNoRW50cnkoQSwodCxuKT0+e2UoVXIodCksbixyLDApfSkscn1yZXR1cm4gbnVsbH12YXIgZEE9R3I7ZnVuY3Rpb24gTHIoQSxlLHIpe2lmKHMuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxzLnRyaW0oQSl9Y2F0Y2godCl7aWYodC5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyB0fXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIFdBPXt0cmFuc2l0aW9uYWw6dUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHIpe2xldCB0PXIuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj10LmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPXMuaXNPYmplY3QoZSk7aWYoaSYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShkQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKSlyZXR1cm4gZTtpZihzLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihzLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiByLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgZztpZihpKXtpZih0LmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBLQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGc9cy5pc0ZpbGVMaXN0KGUpKXx8dC5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gVChnP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHIuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxMcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgcj10aGlzLnRyYW5zaXRpb25hbHx8V0EudHJhbnNpdGlvbmFsLHQ9ciYmci5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJnMuaXNTdHJpbmcoZSkmJih0JiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHImJnIuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChnKXtpZihvKXRocm93IGcubmFtZT09PSJTeW50YXhFcnJvciI/ZC5mcm9tKGcsZC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpnfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6RC5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6RC5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntXQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFk9V0E7dmFyIFRyPXMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksS2U9QT0+e2xldCBlPXt9LHIsdCxuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHI9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSx0PW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXJ8fGVbcl0mJlRyW3JdKSYmKHI9PT0ic2V0LWNvb2tpZSI/ZVtyXT9lW3JdLnB1c2godCk6ZVtyXT1bdF06ZVtyXT1lW3JdP2Vbcl0rIiwgIit0OnQpfSksZX07dmFyIFdlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gJChBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHBBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAocEEpOlN0cmluZyhBKX1mdW5jdGlvbiB4cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHI9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyx0O2Zvcig7dD1yLmV4ZWMoQSk7KWVbdFsxXV09dFsyXTtyZXR1cm4gZX12YXIgT3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gakEoQSxlLHIsdCxuKXtpZihzLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGUscik7aWYobiYmKGU9ciksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHQpKXJldHVybiBlLmluZGV4T2YodCkhPT0tMTtpZihzLmlzUmVnRXhwKHQpKXJldHVybiB0LnRlc3QoZSl9fWZ1bmN0aW9uIEpyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUscix0KT0+ci50b1VwcGVyQ2FzZSgpK3QpfWZ1bmN0aW9uIFByKEEsZSl7bGV0IHI9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHQ9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSx0K3Ise3ZhbHVlOmZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdGhpc1t0XS5jYWxsKHRoaXMsZSxuLGksbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUscix0KXtsZXQgbj10aGlzO2Z1bmN0aW9uIGkoZyxsLEIpe2xldCBJPSQobCk7aWYoIUkpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPXMuZmluZEtleShuLEkpOyghYXx8blthXT09PXZvaWQgMHx8Qj09PSEwfHxCPT09dm9pZCAwJiZuW2FdIT09ITEpJiYoblthfHxsXT1wQShnKSl9bGV0IG89KGcsbCk9PnMuZm9yRWFjaChnLChCLEkpPT5pKEIsSSxsKSk7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/byhlLHIpOnMuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIU9yKGUpP28oS2UoZSkscik6ZSE9bnVsbCYmaShyLGUsdCksdGhpc31nZXQoZSxyKXtpZihlPSQoZSksZSl7bGV0IHQ9cy5maW5kS2V5KHRoaXMsZSk7aWYodCl7bGV0IG49dGhpc1t0XTtpZighcilyZXR1cm4gbjtpZihyPT09ITApcmV0dXJuIHhyKG4pO2lmKHMuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsbix0KTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHIpe2lmKGU9JChlKSxlKXtsZXQgdD1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hISh0JiZ0aGlzW3RdIT09dm9pZCAwJiYoIXJ8fGpBKHRoaXMsdGhpc1t0XSx0LHIpKSl9cmV0dXJuITF9ZGVsZXRlKGUscil7bGV0IHQ9dGhpcyxuPSExO2Z1bmN0aW9uIGkobyl7aWYobz0kKG8pLG8pe2xldCBnPXMuZmluZEtleSh0LG8pO2cmJighcnx8akEodCx0W2ddLGcscikpJiYoZGVsZXRlIHRbZ10sbj0hMCl9fXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksbn1jbGVhcihlKXtsZXQgcj1PYmplY3Qua2V5cyh0aGlzKSx0PXIubGVuZ3RoLG49ITE7Zm9yKDt0LS07KXtsZXQgaT1yW3RdOyghZXx8akEodGhpcyx0aGlzW2ldLGksZSwhMCkpJiYoZGVsZXRlIHRoaXNbaV0sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCByPXRoaXMsdD17fTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKG4saSk9PntsZXQgbz1zLmZpbmRLZXkodCxpKTtpZihvKXtyW29dPXBBKG4pLGRlbGV0ZSByW2ldO3JldHVybn1sZXQgZz1lP0pyKGkpOlN0cmluZyhpKS50cmltKCk7ZyE9PWkmJmRlbGV0ZSByW2ldLHJbZ109cEEobiksdFtnXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBzLmZvckVhY2godGhpcywodCxuKT0+e3QhPW51bGwmJnQhPT0hMSYmKHJbbl09ZSYmcy5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0KX0pLHJ9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2Uscl0pPT5lKyI6ICIrcikuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnIpe2xldCB0PW5ldyB0aGlzKGUpO3JldHVybiByLmZvckVhY2gobj0+dC5zZXQobikpLHR9c3RhdGljIGFjY2Vzc29yKGUpe2xldCB0PSh0aGlzW1dlXT10aGlzW1dlXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gaShvKXtsZXQgZz0kKG8pO3RbZ118fChQcihuLG8pLHRbZ109ITApfXJldHVybiBzLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O3EuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO3MucmVkdWNlRGVzY3JpcHRvcnMocS5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCByPWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHQpe3RoaXNbcl09dH19fSk7cy5mcmVlemVNZXRob2RzKHEpO3ZhciBTPXE7ZnVuY3Rpb24gQUEoQSxlKXtsZXQgcj10aGlzfHxZLHQ9ZXx8cixuPVMuZnJvbSh0LmhlYWRlcnMpLGk9dC5kYXRhO3JldHVybiBzLmZvckVhY2goQSxmdW5jdGlvbihnKXtpPWcuY2FsbChyLGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gZUEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqZShBLGUscil7ZC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixkLkVSUl9DQU5DRUxFRCxlLHIpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9cy5pbmhlcml0cyhqZSxkLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9amU7ZnVuY3Rpb24gdkEoQSxlLHIpe2xldCB0PXIuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFyLnN0YXR1c3x8IXR8fHQoci5zdGF0dXMpP0Eocik6ZShuZXcgZCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Iuc3RhdHVzLFtkLkVSUl9CQURfUkVRVUVTVCxkLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3Ioci5zdGF0dXMvMTAwKS00XSxyLmNvbmZpZyxyLnJlcXVlc3QscikpfXZhciB2ZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHIsdCxuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO3MuaXNOdW1iZXIocikmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHIpLnRvR01UU3RyaW5nKCkpLHMuaXNTdHJpbmcodCkmJm8ucHVzaCgicGF0aD0iK3QpLHMuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBfQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIFZBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiB0QShBLGUpe3JldHVybiBBJiYhX0EoZSk/VkEoQSxlKTplfXZhciBfZT1ELmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksdDtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJihyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz1yLmhyZWYpLHIuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjpyLmhyZWYscHJvdG9jb2w6ci5wcm90b2NvbD9yLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpyLmhvc3Qsc2VhcmNoOnIuc2VhcmNoP3Iuc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6ci5oYXNoP3IuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnIuaG9zdG5hbWUscG9ydDpyLnBvcnQscGF0aG5hbWU6ci5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ci5wYXRobmFtZToiLyIrci5wYXRobmFtZX19cmV0dXJuIHQ9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IGc9cy5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIGcucHJvdG9jb2w9PT10LnByb3RvY29sJiZnLmhvc3Q9PT10Lmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIHpBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHI9bmV3IEFycmF5KEEpLHQ9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBCPURhdGUubm93KCksST10W2ldO298fChvPUIpLHJbbl09bCx0W25dPUI7bGV0IGE9aSxRPTA7Zm9yKDthIT09bjspUSs9clthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksQi1vPGUpcmV0dXJuO2xldCBDPUkmJkItSTtyZXR1cm4gQz9NYXRoLnJvdW5kKFEqMWUzL0MpOnZvaWQgMH19dmFyIFZlPU1yO2Z1bmN0aW9uIHplKEEsZSl7bGV0IHI9MCx0PVZlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxnPWktcixsPXQoZyksQj1pPD1vO3I9aTtsZXQgST17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6ZyxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmbyYmQj8oby1pKS9sOnZvaWQgMCxldmVudDpufTtJW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShJKX19dmFyIEhyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWmU9SHImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLHQpe2xldCBuPUEuZGF0YSxpPVMuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOmd9PUEsbDtmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBJO2lmKHMuaXNGb3JtRGF0YShuKSl7aWYoRC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fEQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEk9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1JP0kuc3BsaXQoIjsiKS5tYXAobT0+bS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgUT10QShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFgoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEMoKXtpZighYSlyZXR1cm47bGV0IGM9Uy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbT17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDphfTt2QShmdW5jdGlvbihVKXtyKFUpLEIoKX0sZnVuY3Rpb24oVSl7dChVKSxCKCl9LG0pLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9QzphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQyl9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJih0KG5ldyBkKCJSZXF1ZXN0IGFib3J0ZWQiLGQuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IGQoIk5ldHdvcmsgRXJyb3IiLGQuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixtPUEudHJhbnNpdGlvbmFsfHx1QTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSksdChuZXcgZCh1LG0uY2xhcmlmeVRpbWVvdXRFcnJvcj9kLkVUSU1FRE9VVDpkLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LEQuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmcy5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJl9lKFEpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmdmUucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZpLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfW49PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24odSxtKXthLnNldFJlcXVlc3RIZWFkZXIobSx1KX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHplKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix6ZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1jPT57YSYmKHQoIWN8fGMudHlwZT9uZXcgeChudWxsLEEsYSk6YyksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IEU9ekEoUSk7aWYoRSYmRC5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXt0KG5ldyBkKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGQuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciBaQT17aHR0cDpRQSx4aHI6WmV9O3MuZm9yRWFjaChaQSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBYZT1BPT5gLSAke0F9YCxZcj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSxyLHQsbj17fTtmb3IobGV0IGk9MDtpPGU7aSsrKXtyPUFbaV07bGV0IG87aWYodD1yLCFZcihyKSYmKHQ9WkFbKG89U3RyaW5nKHIpKS50b0xvd2VyQ2FzZSgpXSx0PT09dm9pZCAwKSl0aHJvdyBuZXcgZChgVW5rbm93biBhZGFwdGVyICcke299J2ApO2lmKHQpYnJlYWs7bltvfHwiIyIraV09dH1pZighdCl7bGV0IGk9T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89ZT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAoWGUpLmpvaW4oYApgKToiICIrWGUoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgZCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiB0fSxhZGFwdGVyczpaQX07ZnVuY3Rpb24gWEEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gWEEoQSksQS5oZWFkZXJzPVMuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1BQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFkuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gWEEoQSksdC5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQpLHQuaGVhZGVycz1TLmZyb20odC5oZWFkZXJzKSx0fSxmdW5jdGlvbih0KXtyZXR1cm4gZUEodCl8fChYQShBKSx0JiZ0LnJlc3BvbnNlJiYodC5yZXNwb25zZS5kYXRhPUFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHQucmVzcG9uc2UpLHQucmVzcG9uc2UuaGVhZGVycz1TLmZyb20odC5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHQpfSl9dmFyICRlPUE9PkEgaW5zdGFuY2VvZiBTP3suLi5BfTpBO2Z1bmN0aW9uIEcoQSxlKXtlPWV8fHt9O2xldCByPXt9O2Z1bmN0aW9uIHQoQixJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQikmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEIsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQixJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCLGEpfWVsc2UgcmV0dXJuIHQoQixJLGEpfWZ1bmN0aW9uIGkoQixJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gdCh2b2lkIDAsSSl9ZnVuY3Rpb24gbyhCLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEIpKXJldHVybiB0KHZvaWQgMCxCKX1lbHNlIHJldHVybiB0KHZvaWQgMCxJKX1mdW5jdGlvbiBnKEIsSSxhKXtpZihhIGluIGUpcmV0dXJuIHQoQixJKTtpZihhIGluIEEpcmV0dXJuIHQodm9pZCAwLEIpfWxldCBsPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQixJKT0+bigkZShCKSwkZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLFE9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChRKSYmYSE9PWd8fChyW0ldPVEpfSkscn12YXIgeUE9IjEuNi44Ijt2YXIgJEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57JEFbQV09ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIEF0PXt9OyRBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHIsdCl7ZnVuY3Rpb24gbihpLG8pe3JldHVybiJbQXhpb3MgdiIreUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIitvKyh0PyIuICIrdDoiIil9cmV0dXJuKGksbyxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgZChuKG8sIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLGQuRVJSX0RFUFJFQ0FURUQpO3JldHVybiByJiYhQXRbb10mJihBdFtvXT0hMCxjb25zb2xlLndhcm4obihvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IityKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShpLG8sZyk6ITB9fTtmdW5jdGlvbiBxcihBLGUscil7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBkKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixkLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxuPXQubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IGk9dFtuXSxvPWVbaV07aWYobyl7bGV0IGc9QVtpXSxsPWc9PT12b2lkIDB8fG8oZyxpLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgZCgib3B0aW9uICIraSsiIG11c3QgYmUgIitsLGQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHIhPT0hMCl0aHJvdyBuZXcgZCgiVW5rbm93biBvcHRpb24gIitpLGQuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6cXIsdmFsaWRhdG9yczokQX07dmFyIE89d0EudmFsaWRhdG9ycyxLPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWUEscmVzcG9uc2U6bmV3IFlBfX1hc3luYyByZXF1ZXN0KGUscil7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUscil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgaT1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0LnN0YWNrP2kmJiFTdHJpbmcodC5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJih0LnN0YWNrKz1gCmAraSk6dC5zdGFjaz1pfXRocm93IHR9fV9yZXF1ZXN0KGUscil7dHlwZW9mIGU9PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPWUpOnI9ZXx8e30scj1HKHRoaXMuZGVmYXVsdHMscik7bGV0e3RyYW5zaXRpb25hbDp0LHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOml9PXI7dCE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk8udHJhbnNpdGlvbmFsKE8uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT9yLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpPLmZ1bmN0aW9uLHNlcmlhbGl6ZTpPLmZ1bmN0aW9ufSwhMCkpLHIubWV0aG9kPShyLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBvPWkmJnMubWVyZ2UoaS5jb21tb24saVtyLm1ldGhvZF0pO2kmJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIGlbRV19KSxyLmhlYWRlcnM9Uy5jb25jYXQobyxpKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4ocik9PT0hMXx8KGw9bCYmYy5zeW5jaHJvbm91cyxnLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtCLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgSSxhPTAsUTtpZighbCl7bGV0IEU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsZyksRS5wdXNoLmFwcGx5KEUsQiksUT1FLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZShyKTthPFE7KUk9SS50aGVuKEVbYSsrXSxFW2ErK10pO3JldHVybiBJfVE9Zy5sZW5ndGg7bGV0IEM9cjtmb3IoYT0wO2E8UTspe2xldCBFPWdbYSsrXSxjPWdbYSsrXTt0cnl7Qz1FKEMpfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihhPTAsUT1CLmxlbmd0aDthPFE7KUk9SS50aGVuKEJbYSsrXSxCW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPUcodGhpcy5kZWZhdWx0cyxlKTtsZXQgcj10QShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBYKHIsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7Sy5wcm90b3R5cGVbZV09ZnVuY3Rpb24ocix0KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcodHx8e30se21ldGhvZDplLHVybDpyLGRhdGE6KHR8fHt9KS5kYXRhfSkpfX0pO3MuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIGZ1bmN0aW9uKGksbyxnKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoZ3x8e30se21ldGhvZDplLGhlYWRlcnM6dD97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6aSxkYXRhOm99KSl9fUsucHJvdG90eXBlW2VdPXIoKSxLLnByb3RvdHlwZVtlKyJGb3JtIl09cighMCl9KTt2YXIgckE9Szt2YXIgQWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHI7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3I9aX0pO2xldCB0PXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCF0Ll9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXQuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtpLS0gPjA7KXQuX2xpc3RlbmVyc1tpXShuKTt0Ll9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgaSxvPW5ldyBQcm9taXNlKGc9Pnt0LnN1YnNjcmliZShnKSxpPWd9KS50aGVuKG4pO3JldHVybiBvLmNhbmNlbD1mdW5jdGlvbigpe3QudW5zdWJzY3JpYmUoaSl9LG99LGUoZnVuY3Rpb24oaSxvLGcpe3QucmVhc29ufHwodC5yZWFzb249bmV3IHgoaSxvLGcpLHIodC5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgcj10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTtyIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UociwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LGV0PUFlO2Z1bmN0aW9uIGVlKEEpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gQS5hcHBseShudWxsLHIpfX1mdW5jdGlvbiB0ZShBKXtyZXR1cm4gcy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgcmU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKHJlKS5mb3JFYWNoKChbQSxlXSk9PntyZVtlXT1BfSk7dmFyIHR0PXJlO2Z1bmN0aW9uIHJ0KEEpe2xldCBlPW5ldyByQShBKSxyPVYockEucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIHMuZXh0ZW5kKHIsckEucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxzLmV4dGVuZChyLGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHIuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBydChHKEEsbikpfSxyfXZhciBoPXJ0KFkpO2guQXhpb3M9ckE7aC5DYW5jZWxlZEVycm9yPXg7aC5DYW5jZWxUb2tlbj1ldDtoLmlzQ2FuY2VsPWVBO2guVkVSU0lPTj15QTtoLnRvRm9ybURhdGE9VDtoLkF4aW9zRXJyb3I9ZDtoLkNhbmNlbD1oLkNhbmNlbGVkRXJyb3I7aC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTtoLnNwcmVhZD1lZTtoLmlzQXhpb3NFcnJvcj10ZTtoLm1lcmdlQ29uZmlnPUc7aC5BeGlvc0hlYWRlcnM9UztoLmZvcm1Ub0pTT049QT0+ZEEocy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtoLmdldEFkYXB0ZXI9bUEuZ2V0QWRhcHRlcjtoLkh0dHBTdGF0dXNDb2RlPXR0O2guZGVmYXVsdD1oO3ZhciBXPWg7dmFye0F4aW9zOkRhLEF4aW9zRXJyb3I6U2EsQ2FuY2VsZWRFcnJvcjpiYSxpc0NhbmNlbDpGYSxDYW5jZWxUb2tlbjprYSxWRVJTSU9OOlJhLGFsbDpVYSxDYW5jZWw6TmEsaXNBeGlvc0Vycm9yOkdhLHNwcmVhZDpMYSx0b0Zvcm1EYXRhOlRhLEF4aW9zSGVhZGVyczp4YSxIdHRwU3RhdHVzQ29kZTpPYSxmb3JtVG9KU09OOkphLGdldEFkYXB0ZXI6UGEsbWVyZ2VDb25maWc6TWF9PVc7YXN5bmMgZnVuY3Rpb24gS3IoQSxlKXtsZXQgcj1BLHQ9bnVsbDtpZihyPT1udWxsKXQ9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYoci5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IFcuZ2V0KHIse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxpPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTt0PW5ldyBXb3JrZXIoaSx7dHlwZToibW9kdWxlIn0pfWVsc2UgdD1uZXcgV29ya2VyKHIse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gdH12YXIgbkE9S3I7ZnVuY3Rpb24gbnQoQSl7bGV0IGU9VEEoQSkscj1BO3JldHVybiByLnRlcm1pbmF0ZWQ9ITEsci53b3JrZXJQcm94eT1lLHIub3JpZ2luYWxUZXJtaW5hdGU9ci50ZXJtaW5hdGUsci50ZXJtaW5hdGU9KCk9PntyLnRlcm1pbmF0ZWQ9ITAsci53b3JrZXJQcm94eVtMQV0oKSxyLm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjpyfX1hc3luYyBmdW5jdGlvbiBXcihBLGUscil7bGV0IHQ7aWYoQSE9bnVsbCl7bGV0IGk9QTtyZXR1cm4gaS53b3JrZXJQcm94eSE9PXZvaWQgMD8odD1pLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTp0LHdvcmtlcjppfSk6bnQoQSl9bGV0IG49YXdhaXQgbkEoZSxyKTtyZXR1cm4gbnQobil9dmFyIGl0PVdyO2FzeW5jIGZ1bmN0aW9uIGpyKEEsZSxyKXtsZXQgdD0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3Q9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3Q9QTp0PXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHQuZW5kc1dpdGgoIi5qcyIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTMpKSx0LmVuZHNXaXRoKCIud2FzbSIpJiYodD10LnN1YnN0cmluZygwLHQubGVuZ3RoLTUpKTtsZXQgbj1gJHt0fS53YXNtYCxvPShhd2FpdCBXLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6cn0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7dH0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpvfSl9dmFyIG90PWpyO3ZhciBhdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgZ3Q9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsc3Q9bmV3IFRleHRFbmNvZGVyLEl0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB2cihBLGUpe2xldCByPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHQ9QS5mc19vcGVuKGUsci5mbGFncyksaT1BLmZzX3N0YXQoZSkuc2l6ZSxvPW51bGw7Z3Q/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoaSk6bz1uZXcgQXJyYXlCdWZmZXIoaSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZCh0LGcsMCxpLDApLEEuZnNfY2xvc2UodCksZ31mdW5jdGlvbiBDdChBLGUscil7bGV0IHQ9bnVsbDtndD90PW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTp0PW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgbj1uZXcgVWludDhBcnJheSh0KSxpPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHIpO3JldHVybiBuLnNldChpKSxufWZ1bmN0aW9uIHcoQSxlLHIsdCl7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsdCxlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBqKEEsZSxyKXtsZXQgdD1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHQpKzEsaT1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHIsbl0pO0Euc3RyaW5nVG9VVEY4KHQsaSxuKX1mdW5jdGlvbiBGKEEsZSxyLHQpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pLGk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSksbz1DdChBLG4saSk7cmV0dXJuIEwodCxvLmJ1ZmZlcil9ZnVuY3Rpb24gbmUoQSxlKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSx0PUEuVVRGOFRvU3RyaW5nKHIpO3JldHVybiBKU09OLnBhcnNlKHQpfWZ1bmN0aW9uIF9yKEEsZSxyLHQpe3QhPW51bGwmJnQubGVuZ3RoPjAmJnQuZm9yRWFjaChmdW5jdGlvbihCLEkpe3N3aXRjaChCLnR5cGUpe2Nhc2UgcC5UZXh0U3RyZWFtOntsZXQgYT1zdC5lbmNvZGUoQi5kYXRhLmRhdGEpLFE9dyhBLGEsSSwwKSxDPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07aihBLEMsSSk7YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgYT1zdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQi5kYXRhKSksUT13KEEsYSxJLDApLEM9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtqKEEsQyxJKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgYT1CLmRhdGEuZGF0YSxRPXcoQSxhLEksMCksQz17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O2ooQSxDLEkpO2JyZWFrfWNhc2UgcC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgYT1CLmRhdGEsUT13KEEsYS5kYXRhLEksMCksQz13KEEsYS5kaXJlY3Rpb24sSSwxKSxFPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSxjPXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG1ldGFkYXRhOkV9O2ooQSxjLEkpO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgYT1CLmRhdGEsUT13KEEsYS5wb2ludHMsSSwwKSxDPXcoQSxhLmNlbGxzLEksMSksRT13KEEsYS5wb2ludERhdGEsSSwyKSxjPXcoQSxhLmNlbGxEYXRhLEksMyksdT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O2ooQSx1LEkpO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IGE9Qi5kYXRhLFE9dyhBLGEucG9pbnRzLEksMCksQz13KEEsYS52ZXJ0aWNlcyxJLDEpLEU9dyhBLGEubGluZXMsSSwyKSxjPXcoQSxhLnBvbHlnb25zLEksMyksdT13KEEsYS50cmlhbmdsZVN0cmlwcyxJLDQpLG09dyhBLGEucG9pbnREYXRhLEksNSksUj13KEEsYS5wb2ludERhdGEsSSw2KSxVPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke219YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtSfWB9O2ooQSxVLEkpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChCKXt0aHJvdyB0eXBlb2YgQj09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShCKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxCfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksbD1bXTtyZXR1cm4gciE9bnVsbCYmci5sZW5ndGg+MCYmaT09PTAmJnIuZm9yRWFjaChmdW5jdGlvbihCLEkpe2xldCBhPW51bGw7c3dpdGNoKEIudHlwZSl7Y2FzZSBwLlRleHRTdHJlYW06e2xldCBDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQyxFKTthPXtkYXRhOkl0LmRlY29kZShjKX07YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEMsRSk7YT1KU09OLnBhcnNlKEl0LmRlY29kZShjKSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKTthPXtkYXRhOkN0KEEsQyxFKX07YnJlYWt9Y2FzZSBwLlRleHRGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShCLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOnthPXtwYXRoOkIuZGF0YS5wYXRoLGRhdGE6dnIoQSxCLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IEM9bmUoQSxJKTtDLmRhdGE9RihBLEksMCxDLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxDLmRpcmVjdGlvbj1GKEEsSSwxLHkuRmxvYXQ2NCksQy5tZXRhZGF0YT1uZXcgTWFwKEMubWV0YWRhdGEpLGE9QzticmVha31jYXNlIHAuTWVzaDp7bGV0IEM9bmUoQSxJKTtDLm51bWJlck9mUG9pbnRzPjA/Qy5wb2ludHM9RihBLEksMCxDLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qy5wb2ludHM9TChDLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEMubnVtYmVyT2ZDZWxscz4wP0MuY2VsbHM9RihBLEksMSxDLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpDLmNlbGxzPUwoQy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEMubnVtYmVyT2ZQb2ludFBpeGVscz4wP0MucG9pbnREYXRhPUYoQSxJLDIsQy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qy5wb2ludERhdGE9TChDLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZkNlbGxQaXhlbHM+MD9DLmNlbGxEYXRhPUYoQSxJLDMsQy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpDLmNlbGxEYXRhPUwoQy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1DO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IEM9bmUoQSxJKTtDLm51bWJlck9mUG9pbnRzPjA/Qy5wb2ludHM9RihBLEksMCx5LkZsb2F0MzIpOkMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9DLnZlcnRpY2VzPUYoQSxJLDEsZi5VSW50MzIpOkMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEMubGluZXNCdWZmZXJTaXplPjA/Qy5saW5lcz1GKEEsSSwyLGYuVUludDMyKTpDLmxpbmVzPW5ldyBVaW50MzJBcnJheSxDLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0MucG9seWdvbnM9RihBLEksMyxmLlVJbnQzMik6Qy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9DLnRyaWFuZ2xlU3RyaXBzPUYoQSxJLDQsZi5VSW50MzIpOkMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEMubnVtYmVyT2ZQb2ludFBpeGVscz4wP0MucG9pbnREYXRhPUYoQSxJLDUsQy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkMucG9pbnREYXRhPUwoQy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbFBpeGVscz4wP0MuY2VsbERhdGE9RihBLEksNixDLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpDLmNlbGxEYXRhPUwoQy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QzticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBRPXt0eXBlOkIudHlwZSxkYXRhOmF9O2wucHVzaChRKX0pLHtyZXR1cm5WYWx1ZTppLHN0ZG91dDpvLHN0ZGVycjpnLG91dHB1dHM6bH19dmFyIEJ0PV9yO3ZhciBWcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24genIoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCByPVtdO2ZvcihsZXQgdD0wO3Q8QS5sZW5ndGg7dCsrKXtsZXQgbj1acihBW3RdLGUpO24hPT1udWxsJiZyLnB1c2gobil9cmV0dXJuIHJ9ZnVuY3Rpb24gWnIoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCByPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3I9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYocj1BKSxWciYmciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT9yOnIuc2xpY2UoMCl9dmFyIGx0PXpyO2Z1bmN0aW9uIFhyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBjdD1YcjtmdW5jdGlvbiAkcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgRXQ9JHI7ZnVuY3Rpb24gQW4oQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIFF0PUFuO3ZhciBlbjtmdW5jdGlvbiBEQSgpe3JldHVybiBlbn12YXIgdG47ZnVuY3Rpb24gZnQoKXtyZXR1cm4gdG59dmFyIHJuO2Z1bmN0aW9uIFNBKCl7cmV0dXJuIHJufXZhciBpZT1uZXcgTWFwO2Z1bmN0aW9uIG5uKCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIHV0KCl7bGV0IEE9REEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gYkEoKXtsZXQgQT1mdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIG9uKEEsZSxyKXtsZXQgdD1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJih0PW5ldyBVUkwoQS5ocmVmKSxuPXQuaHJlZiksaWUuaGFzKG4pKXJldHVybiBpZS5nZXQobik7e2xldCBpPWF3YWl0IG90KEEsZT8udG9TdHJpbmcoKT8/dXQoKSxyPz9iQSgpKTtyZXR1cm4gaWUuc2V0KG4saSksaX19YXN5bmMgZnVuY3Rpb24gYW4oQSxlLHIsdCxuKXtpZighYXdhaXQgYXQoKSl7bGV0IHU9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KHUpLG5ldyBFcnJvcih1KX1sZXQgaT1uPy53ZWJXb3JrZXI/P251bGw7aWYoaT09PSExKXtsZXQgdT1hd2FpdCBvbihBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P2JBKCkpO3JldHVybiBCdCh1LGUscix0KX1sZXQgbz1pLGc9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P25uKCksbD10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6Qix3b3JrZXI6SX09YXdhaXQgaXQobyxsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P2JBKCkpO289STtsZXQgYT1bXTt0IT1udWxsJiZ0Lmxlbmd0aD4wJiZ0LmZvckVhY2goZnVuY3Rpb24odSl7aWYodS50eXBlPT09cC5CaW5hcnlTdHJlYW0pe2xldCBtPXUuZGF0YS5kYXRhO2EucHVzaChtKX1lbHNlIGlmKHUudHlwZT09PXAuQmluYXJ5RmlsZSl7bGV0IG09dS5kYXRhLmRhdGE7YS5wdXNoKG0pfWVsc2UgaWYodS50eXBlPT09cC5JbWFnZSl7bGV0IG09dS5kYXRhO20uZGF0YSE9PW51bGwmJmEucHVzaCguLi5jdChtKSl9ZWxzZSBpZih1LnR5cGU9PT1wLk1lc2gpe2xldCBtPXUuZGF0YTthLnB1c2goLi4uRXQobSkpfWVsc2UgaWYodS50eXBlPT09cC5Qb2x5RGF0YSl7bGV0IG09dS5kYXRhO2EucHVzaCguLi5RdChtKSl9fSk7bGV0IFE9bj8ucGlwZWxpbmVCYXNlVXJsPz91dCgpLEM9dHlwZW9mIFEhPSJzdHJpbmciJiZ0eXBlb2YgUT8uaHJlZjwidSI/US5ocmVmOlEsRT10IT1udWxsP3hBKHQsbHQoYSxuPy5ub0NvcHkpKTpudWxsLGM9YXdhaXQgQi5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksQyxlLHIsRSxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6Yy5yZXR1cm5WYWx1ZSxzdGRvdXQ6Yy5zdGRvdXQsc3RkZXJyOmMuc3RkZXJyLG91dHB1dHM6Yy5vdXRwdXRzLHdlYldvcmtlcjpvfX12YXIgaUE9YW47dmFyIHNuPW51bGw7ZnVuY3Rpb24gZHQoKXtyZXR1cm4gc259dmFyIG9lLEluPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9jb21wYXJlLWltYWdlc0Ake2tBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gUnMoQSl7b2U9QX1mdW5jdGlvbiBGQSgpe2lmKHR5cGVvZiBvZTwidSIpcmV0dXJuIG9lO2xldCBBPURBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOklufXZhciBhZSxnbj1udWxsO2Z1bmN0aW9uIHB0KEEpe2FlPUF9ZnVuY3Rpb24gdigpe2lmKHR5cGVvZiBhZTwidSIpcmV0dXJuIGFlO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOmdufXZhciBfPW51bGw7YXN5bmMgZnVuY3Rpb24gbXQoKXtsZXQgQT12KCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtfPWF3YWl0IG5BKGUpfWZ1bmN0aW9uIE9zKEEpe189QX1hc3luYyBmdW5jdGlvbiBodCgpe2lmKF8hPT1udWxsKXJldHVybiBfLnRlcm1pbmF0ZWQmJmF3YWl0IG10KCksXztsZXQgQT1kdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBtdCgpLF8pfWFzeW5jIGZ1bmN0aW9uIENuKEEsZT17YmFzZWxpbmVJbWFnZXM6W119KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX0se3R5cGU6cC5JbWFnZX1dLHQ9W3t0eXBlOnAuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIjEiKSxuLnB1c2goIjIiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIGUuYmFzZWxpbmVJbWFnZXM8InUiKXtpZihlLmJhc2VsaW5lSW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignImJhc2VsaW5lLWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtuLnB1c2goIi0tYmFzZWxpbmUtaW1hZ2VzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5iYXNlbGluZUltYWdlcy5tYXAoYXN5bmMgYz0+e2xldCB1PXQubGVuZ3RoLnRvU3RyaW5nKCk7dC5wdXNoKHt0eXBlOnAuSW1hZ2UsZGF0YTpjfSksbi5wdXNoKHUpfSkpfXR5cGVvZiBlLmRpZmZlcmVuY2VUaHJlc2hvbGQ8InUiJiZuLnB1c2goIi0tZGlmZmVyZW5jZS10aHJlc2hvbGQiLGUuZGlmZmVyZW5jZVRocmVzaG9sZC50b1N0cmluZygpKSx0eXBlb2YgZS5yYWRpdXNUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tcmFkaXVzLXRvbGVyYW5jZSIsZS5yYWRpdXNUb2xlcmFuY2UudG9TdHJpbmcoKSksdHlwZW9mIGUuc3BhdGlhbFRvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1zcGF0aWFsLXRvbGVyYW5jZSIsZS5zcGF0aWFsVG9sZXJhbmNlLnRvU3RyaW5nKCkpLHR5cGVvZiBlLm51bWJlck9mUGl4ZWxzVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLW51bWJlci1vZi1waXhlbHMtdG9sZXJhbmNlIixlLm51bWJlck9mUGl4ZWxzVG9sZXJhbmNlLnRvU3RyaW5nKCkpLHR5cGVvZiBlLmlnbm9yZUJvdW5kYXJ5UGl4ZWxzPCJ1IiYmZS5pZ25vcmVCb3VuZGFyeVBpeGVscyYmbi5wdXNoKCItLWlnbm9yZS1ib3VuZGFyeS1waXhlbHMiKTtsZXQgQj0iY29tcGFyZS1kb3VibGUtaW1hZ2VzIix7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6YSxzdGRlcnI6USxvdXRwdXRzOkN9PWF3YWl0IGlBKEIsbixyLHQse3BpcGVsaW5lQmFzZVVybDpGQSgpLHBpcGVsaW5lV29ya2VyVXJsOnYoKSx3ZWJXb3JrZXI6ZT8ud2ViV29ya2VyPz9udWxsfSk7aWYoYSE9PTApdGhyb3cgbmV3IEVycm9yKFEpO3JldHVybnt3ZWJXb3JrZXI6SSxtZXRyaWNzOkNbMF0uZGF0YSxkaWZmZXJlbmNlSW1hZ2U6Q1sxXS5kYXRhLGRpZmZlcmVuY2VVY2hhcjJkSW1hZ2U6Q1syXS5kYXRhfX12YXIgc2U9Q247YXN5bmMgZnVuY3Rpb24gQm4oQSxlKXtsZXQgcj1lO2lmKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUhPT15LkZsb2F0NjQpe2xldCB0O2UuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PWIuU2NhbGFyJiZlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1iLlZhcmlhYmxlTGVuZ3RoVmVjdG9yJiYodD1iLlZhcmlhYmxlTGVuZ3RoVmVjdG9yKSxyPW9BKGUse2NvbXBvbmVudFR5cGU6eS5GbG9hdDY0LHBpeGVsVHlwZTp0fSl9ZWxzZSBpZihlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1iLlNjYWxhciYmZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09Yi5WYXJpYWJsZUxlbmd0aFZlY3Rvcil7bGV0IHQ9Yi5WYXJpYWJsZUxlbmd0aFZlY3RvcjtyPW9BKGUse3BpeGVsVHlwZTp0fSl9cmV0dXJuIHIuaW1hZ2VUeXBlLnBpeGVsVHlwZT09PWIuVmFyaWFibGVMZW5ndGhWZWN0b3ImJihyPShhd2FpdCBBKHIpKS5tYWduaXR1ZGVJbWFnZSkscn12YXIgSWU9Qm47YXN5bmMgZnVuY3Rpb24gbG4oQSxlPXt9KXtsZXQgcj1be3R5cGU6cC5JbWFnZX1dLHQ9W3t0eXBlOnAuSW1hZ2UsZGF0YTpBfV0sbj1bXTtuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIik7bGV0IGc9InZlY3Rvci1tYWduaXR1ZGUiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IGh0KCkpO2xldHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6UX09YXdhaXQgaUEoZyxuLHIsdCx7cGlwZWxpbmVCYXNlVXJsOkZBKCkscGlwZWxpbmVXb3JrZXJVcmw6digpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihJIT09MCYmYSE9PSIiKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOkIsbWFnbml0dWRlSW1hZ2U6UVswXT8uZGF0YX19dmFyIGdlPWxuO2FzeW5jIGZ1bmN0aW9uIGNuKEEsZT17YmFzZWxpbmVJbWFnZXM6W119KXthc3luYyBmdW5jdGlvbiByKG8pe2xldHt3ZWJXb3JrZXI6ZyxtYWduaXR1ZGVJbWFnZTpsfT1hd2FpdCBnZShvKTtyZXR1cm4gZz8udGVybWluYXRlKCkse21hZ25pdHVkZUltYWdlOmx9fWxldCB0PWF3YWl0IEllKHIsQSksbj1hd2FpdCBQcm9taXNlLmFsbChlLmJhc2VsaW5lSW1hZ2VzLm1hcChhc3luYyBvPT5hd2FpdCBJZShyLG8pKSksaT17Li4uZX07cmV0dXJuIGkuYmFzZWxpbmVJbWFnZXM9bixzZSh0LGkpfXZhciBFbj1jbjt2YXIgeXQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZXQ9KEEsSSk9Pntmb3IodmFyIHQgaW4gSSl0dChBLHQse2dldDpJW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGd0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxtQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGl0PXtjYW5IYW5kbGU6QT0+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+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoSSxWQSkpLnRoZW4odGhpcy5faW5pdCk6SUE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS0ksImJhc2U2NCIpLFZBKS50aGVuKHRoaXMuX2luaXQpLElBKX1faW5pdChJKXtrPUkuaW5zdGFuY2UsVkEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKEksdD0wKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT1JLmJ5dGVMZW5ndGgsZz1rLmV4cG9ydHMubWFsbG9jKGUpO1hBLnNldChJLGcpLHQ9dHx8TnVtYmVyKGsuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPWsuZXhwb3J0cy5tYWxsb2ModCksaT1rLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsdCxnLGUpLHM9WEEuc2xpY2UocixyK2kpO3JldHVybiBrLmV4cG9ydHMuZnJlZShnKSxrLmV4cG9ydHMuZnJlZShyKSxzfX0sS0k9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT0k9bmV3IHlBLFRJPSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsSSx0KXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHtJfS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KTtUSXx8KGF3YWl0IE9JLmluaXQoKSxUST0hMCk7bGV0IHM9T0kuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6c30pfXZhciB4ST1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLEksdCl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyx4SShlLEksdCkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciBQST1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LHA9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxQPXVlO2Z1bmN0aW9uIGhlKEEsSSl7bGV0IHQ9bnVsbDtzd2l0Y2goQSl7Y2FzZSBwLlVJbnQ4Ont0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ4Ont0PW5ldyBJbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQxNjp7dD1uZXcgVWludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDE2Ont0PW5ldyBJbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MzI6e3Q9bmV3IFVpbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQzMjp7dD1uZXcgSW50MzJBcnJheShJKTticmVha31jYXNlIHAuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdVaW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdJbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0MzI6e3Q9bmV3IEZsb2F0MzJBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQ2NDp7dD1uZXcgRmxvYXQ2NEFycmF5KEkpO2JyZWFrfWNhc2UibnVsbCI6e3Q9bnVsbDticmVha31jYXNlIG51bGw6e3Q9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiB0fXZhciBZPWhlO3ZhciBaST10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqST1uZXcgVGV4dEVuY29kZXIsV0k9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsSSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4oSSx0LmZsYWdzKSxyPUEuZnNfc3RhdChJKS5zaXplLGk9bnVsbDtaST9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTppPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgcz1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKGUscywwLHIsMCksQS5mc19jbG9zZShlKSxzfWZ1bmN0aW9uIFZJKEEsSSx0KXtsZXQgZT1udWxsO1pJP2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmU9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksdCk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24geShBLEksdCxlKXtsZXQgZz0wO3JldHVybiBJIT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlLEkuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoSS5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIGooQSxJLHQpe2xldCBlPUpTT04uc3RyaW5naWZ5KEkpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIEYoQSxJLHQsZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxpPVZJKEEsZyxyKTtyZXR1cm4gWShlLGkuYnVmZmVyKX1mdW5jdGlvbiB6QShBLEkpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsSV0pLGU9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSxJLHQsZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBvPWpJLmVuY29kZShRLmRhdGEuZGF0YSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBvPWpJLmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBvPVEuZGF0YS5kYXRhLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBvPVEuZGF0YSxmPXkoQSxvLmRhdGEsQywwKSxuPXkoQSxvLmRpcmVjdGlvbixDLDEpLEU9dHlwZW9mIG8ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oby5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTpvLmltYWdlVHlwZSxuYW1lOm8ubmFtZSxvcmlnaW46by5vcmlnaW4sc3BhY2luZzpvLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLHNpemU6by5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07aihBLGMsQyk7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8uY2VsbHMsQywxKSxFPXkoQSxvLnBvaW50RGF0YSxDLDIpLGM9eShBLG8uY2VsbERhdGEsQywzKSx1PXttZXNoVHlwZTpvLm1lc2hUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6by5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGNlbGxCdWZmZXJTaXplOm8uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07aihBLHUsQyk7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLnZlcnRpY2VzLEMsMSksRT15KEEsby5saW5lcyxDLDIpLGM9eShBLG8ucG9seWdvbnMsQywzKSx1PXkoQSxvLnRyaWFuZ2xlU3RyaXBzLEMsNCksZD15KEEsby5wb2ludERhdGEsQyw1KSxSPXkoQSxvLnBvaW50RGF0YSxDLDYpLE49e3BvbHlEYXRhVHlwZTpvLnBvbHlEYXRhVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6by52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsbGluZXNCdWZmZXJTaXplOm8ubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpvLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6by50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07aihBLE4sQyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbihJLnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLHM9QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZyPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7bGV0IG89bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289e2RhdGE6V0kuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPUpTT04ucGFyc2UoV0kuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pO289e2RhdGE6VkkoQSxuLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbj16QShBLEMpO24uZGF0YT1GKEEsQywwLG4uaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLG4uZGlyZWN0aW9uPUYoQSxDLDEsUC5GbG9hdDY0KSxuLm1ldGFkYXRhPW5ldyBNYXAobi5tZXRhZGF0YSksbz1uO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpuLnBvaW50cz1ZKG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxzPjA/bi5jZWxscz1GKEEsQywxLG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOm4uY2VsbHM9WShuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsMixuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsMyxuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLFAuRmxvYXQzMik6bi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxuLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP24udmVydGljZXM9RihBLEMsMSxwLlVJbnQzMik6bi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksbi5saW5lc0J1ZmZlclNpemU+MD9uLmxpbmVzPUYoQSxDLDIscC5VSW50MzIpOm4ubGluZXM9bmV3IFVpbnQzMkFycmF5LG4ucG9seWdvbnNCdWZmZXJTaXplPjA/bi5wb2x5Z29ucz1GKEEsQywzLHAuVUludDMyKTpuLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxuLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP24udHJpYW5nbGVTdHJpcHM9RihBLEMsNCxwLlVJbnQzMik6bi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsNSxuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQyw2LG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6b307YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Omksc3RkZXJyOnMsb3V0cHV0czphfX12YXIgWEk9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sSSk7ZyE9PW51bGwmJnQucHVzaChnKX1yZXR1cm4gdH1mdW5jdGlvbiBwZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLHdlJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDpJP3Q6dC5zbGljZSgwKX12YXIgekk9bWU7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF9JPUZlO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2ST1TZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJEk9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSxJLHQsZSl7bGV0IGc9WEkoQSxJLHQsZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaS50eXBlPT09RC5CaW5hcnlTdHJlYW18fGkudHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IHM9aS5kYXRhO3IucHVzaChzKX1lbHNlIGlmKGkudHlwZT09PUQuSW1hZ2Upe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uX0kocykpfWVsc2UgaWYoaS50eXBlPT09RC5NZXNoKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLnZJKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuUG9seURhdGEpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uJEkocykpfX0pLEZBKGcsekkociwhMCkpfXZhciBBdD1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsSSx0LGUsZyxyKXtsZXQgaT1hd2FpdCBQSShBLEkscik7cmV0dXJuIGF3YWl0IEF0KGksdCxlLGcpfX07b0EoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7cHQoeXQpO2V4cG9ydHtzZSBhcyBjb21wYXJlRG91YmxlSW1hZ2VzLEVuIGFzIGNvbXBhcmVJbWFnZXMsaHQgYXMgZ2V0RGVmYXVsdFdlYldvcmtlcix2IGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEZBIGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsT3MgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixwdCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxScyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLGdlIGFzIHZlY3Rvck1hZ25pdHVkZSxrQSBhcyB2ZXJzaW9ufTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" +default_js_module = """data:text/javascript;base64,dmFyIER0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgU3Q9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlEdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIGJ0PSI1LjEuMSIsa0E9YnQ7dmFyIEZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sZj1GdDt2YXIga3Q9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHk9a3Q7ZnVuY3Rpb24gUnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIGYuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGYuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGYuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgZi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBmLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIHkuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgeS5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIEw9UnQ7dmFyIFV0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sYj1VdDt2YXIgUkE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9Zi5VSW50OCx0PWIuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sQ2U9UkE7ZnVuY3Rpb24gTnQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBCZT1OdDt2YXIgVUE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IENlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylCZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGxlPVVBO2Z1bmN0aW9uIEd0KEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PWIuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgbGUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBmLlVJbnQ4OmNhc2UgZi5JbnQ4OmNhc2UgZi5VSW50MTY6Y2FzZSBmLkludDE2OmNhc2UgZi5VSW50MzI6Y2FzZSBmLkludDMyOmNhc2UgeS5GbG9hdDMyOmNhc2UgeS5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGYuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2UgeS5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSB5LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIGYuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBmLlVJbnQ2NDpjYXNlIGYuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgZi5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgZi5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB5LkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSB5LkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBmLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBmLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBvQT1HdDt2YXIgTHQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0scD1MdDt2YXIgRWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksVHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksTEE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLE5BPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxzQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksUWU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIseHQ9e2NhbkhhbmRsZTpBPT5RZShBKSYmQVtFZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnJ9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gdWUoQSxlKSxbcixbcl1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLFRBKEEpfX0sT3Q9e2NhbkhhbmRsZTpBPT5RZShBKSYmc0EgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LGZlPW5ldyBNYXAoW1sicHJveHkiLHh0XSxbInRocm93IixPdF1dKTtmdW5jdGlvbiBKdChBLGUpe2ZvcihsZXQgciBvZiBBKWlmKGU9PT1yfHxyPT09IioifHxyIGluc3RhbmNlb2YgUmVnRXhwJiZyLnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gdWUoQSxlPWdsb2JhbFRoaXMscj1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiB0KG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighSnQocixuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm8scGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGw9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSiksQjt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKFEsQyk9PlFbQ10sQSksYT1nLnJlZHVjZSgoUSxDKT0+UVtDXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOkI9YTticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09SihuLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1hLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgUT1uZXcgYSguLi5sKTtCPXF0KFEpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6USxwb3J0MjpDfT1uZXcgTWVzc2FnZUNoYW5uZWw7dWUoQSxDKSxCPXhBKFEsW1FdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtCPXt2YWx1ZTpJLFtzQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKEk9Pih7dmFsdWU6SSxbc0FdOjB9KSkudGhlbihJPT57bGV0W2EsUV09Q0EoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxRKSxvPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0KSxkZShlKSxOQSBpbiBBJiZ0eXBlb2YgQVtOQV09PSJmdW5jdGlvbiImJkFbTkFdKCkpfSkuY2F0Y2goST0+e2xldFthLFFdPUNBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbc0FdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLFEpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gUHQoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZGUoQSl7UHQoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBUQShBLGUpe3JldHVybiBHQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBwZShBKXtyZXR1cm4gUChBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntkZShBKX0pfXZhciBJQT1uZXcgV2Vha01hcCxnQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oSUEuZ2V0KEEpfHwwKS0xO0lBLnNldChBLGUpLGU9PT0wJiZwZShBKX0pO2Z1bmN0aW9uIE10KEEsZSl7bGV0IHI9KElBLmdldChlKXx8MCkrMTtJQS5zZXQoZSxyKSxnQSYmZ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIEh0KEEpe2dBJiZnQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIEdBKEEsZT1bXSxyPWZ1bmN0aW9uKCl7fSl7bGV0IHQ9ITEsbj1uZXcgUHJveHkocix7Z2V0KGksbyl7aWYoYUEodCksbz09PUxBKXJldHVybigpPT57SHQobikscGUoQSksdD0hMH07aWYobz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgZz1QKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihKKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIEdBKEEsWy4uLmUsb10pfSxzZXQoaSxvLGcpe2FBKHQpO2xldFtsLEJdPUNBKGcpO3JldHVybiBQKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxvXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxCKS50aGVuKEopfSxhcHBseShpLG8sZyl7YUEodCk7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09VHQpcmV0dXJuIFAoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihKKTtpZihsPT09ImJpbmQiKXJldHVybiBHQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLEldPWNlKGcpO3JldHVybiBQKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LEkpLnRoZW4oSil9LGNvbnN0cnVjdChpLG8pe2FBKHQpO2xldFtnLGxdPWNlKG8pO3JldHVybiBQKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKEopfX0pO3JldHVybiBNdChuLEEpLG59ZnVuY3Rpb24gWXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gY2UoQSl7bGV0IGU9QS5tYXAoQ0EpO3JldHVybltlLm1hcChyPT5yWzBdKSxZdChlLm1hcChyPT5yWzFdKSldfXZhciBtZT1uZXcgV2Vha01hcDtmdW5jdGlvbiB4QShBLGUpe3JldHVybiBtZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIHF0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tFZV06ITB9KX1mdW5jdGlvbiBDQShBKXtmb3IobGV0W2Uscl1vZiBmZSlpZihyLmNhbkhhbmRsZShBKSl7bGV0W3Qsbl09ci5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6dH0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LG1lLmdldChBKXx8W11dfWZ1bmN0aW9uIEooQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gZmUuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBQKEEsZSxyKXtyZXR1cm4gbmV3IFByb21pc2UodD0+e2xldCBuPUt0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHQoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSxyKX0pfWZ1bmN0aW9uIEt0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBWKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6V3R9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlBBfT1PYmplY3QsbEE9KEE9PmU9PntsZXQgcj1XdC5jYWxsKGUpO3JldHVybiBBW3JdfHwoQVtyXT1yLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTj1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+bEEoZSk9PT1BKSxjQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6TX09QXJyYXksej1jQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEEhPT1udWxsJiYheihBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiF6KEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBEZT1OKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIHZ0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmRGUoQS5idWZmZXIpLGV9dmFyIF90PWNBKCJzdHJpbmciKSxrPWNBKCJmdW5jdGlvbiIpLFNlPWNBKCJudW1iZXIiKSxFQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFZ0PUE9PkE9PT0hMHx8QT09PSExLEJBPUE9PntpZihsQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVBBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LHp0PU4oIkRhdGUiKSxadD1OKCJGaWxlIiksWHQ9TigiQmxvYiIpLCR0PU4oIkZpbGVMaXN0IiksQXI9QT0+RUEoQSkmJmsoQS5waXBlKSxlcj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1sQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sdHI9TigiVVJMU2VhcmNoUGFyYW1zIikscnI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIFooQSxlLHthbGxPd25LZXlzOnI9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgdCxuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxNKEEpKWZvcih0PTAsbj1BLmxlbmd0aDt0PG47dCsrKWUuY2FsbChudWxsLEFbdF0sdCxBKTtlbHNle2xldCBpPXI/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1pLmxlbmd0aCxnO2Zvcih0PTA7dDxvO3QrKylnPWlbdF0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBiZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCByPU9iamVjdC5rZXlzKEEpLHQ9ci5sZW5ndGgsbjtmb3IoO3QtLSA+MDspaWYobj1yW3RdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIEZlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsa2U9QT0+IXooQSkmJkEhPT1GZTtmdW5jdGlvbiBKQSgpe2xldHtjYXNlbGVzczpBfT1rZSh0aGlzKSYmdGhpc3x8e30sZT17fSxyPSh0LG4pPT57bGV0IGk9QSYmYmUoZSxuKXx8bjtCQShlW2ldKSYmQkEodCk/ZVtpXT1KQShlW2ldLHQpOkJBKHQpP2VbaV09SkEoe30sdCk6TSh0KT9lW2ldPXQuc2xpY2UoKTplW2ldPXR9O2ZvcihsZXQgdD0wLG49YXJndW1lbnRzLmxlbmd0aDt0PG47dCsrKWFyZ3VtZW50c1t0XSYmWihhcmd1bWVudHNbdF0scik7cmV0dXJuIGV9dmFyIG5yPShBLGUscix7YWxsT3duS2V5czp0fT17fSk9PihaKGUsKG4saSk9PntyJiZrKG4pP0FbaV09VihuLHIpOkFbaV09bn0se2FsbE93bktleXM6dH0pLEEpLGlyPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksb3I9KEEsZSxyLHQpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx0KSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksciYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxyKX0sYXI9KEEsZSxyLHQpPT57bGV0IG4saSxvLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9bi5sZW5ndGg7aS0tID4wOylvPW5baV0sKCF0fHx0KG8sQSxlKSkmJiFnW29dJiYoZVtvXT1BW29dLGdbb109ITApO0E9ciE9PSExJiZQQShBKX13aGlsZShBJiYoIXJ8fHIoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sc3I9KEEsZSxyKT0+e0E9U3RyaW5nKEEpLChyPT09dm9pZCAwfHxyPkEubGVuZ3RoKSYmKHI9QS5sZW5ndGgpLHItPWUubGVuZ3RoO2xldCB0PUEuaW5kZXhPZihlLHIpO3JldHVybiB0IT09LTEmJnQ9PT1yfSxJcj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoTShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighU2UoZSkpcmV0dXJuIG51bGw7bGV0IHI9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOylyW2VdPUFbZV07cmV0dXJuIHJ9LGdyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZQQShVaW50OEFycmF5KSksQ3I9KEEsZSk9PntsZXQgdD0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj10Lm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgaT1uLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSxCcj0oQSxlKT0+e2xldCByLHQ9W107Zm9yKDsocj1BLmV4ZWMoZSkpIT09bnVsbDspdC5wdXNoKHIpO3JldHVybiB0fSxscj1OKCJIVE1MRm9ybUVsZW1lbnQiKSxjcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbihyLHQsbil7cmV0dXJuIHQudG9VcHBlckNhc2UoKStufSkseWU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSxyKT0+QS5jYWxsKGUscikpKE9iamVjdC5wcm90b3R5cGUpLEVyPU4oIlJlZ0V4cCIpLFJlPShBLGUpPT57bGV0IHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksdD17fTtaKHIsKG4saSk9PntsZXQgbzsobz1lKG4saSxBKSkhPT0hMSYmKHRbaV09b3x8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHQpfSxRcj1BPT57UmUoQSwoZSxyKT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihyKSE9PS0xKXJldHVybiExO2xldCB0PUFbcl07aWYoayh0KSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3IrIiciKX0pfX0pfSxmcj0oQSxlKT0+e2xldCByPXt9LHQ9bj0+e24uZm9yRWFjaChpPT57cltpXT0hMH0pfTtyZXR1cm4gTShBKT90KEEpOnQoU3RyaW5nKEEpLnNwbGl0KGUpKSxyfSx1cj0oKT0+e30sZHI9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLE9BPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsd2U9IjAxMjM0NTY3ODkiLFVlPXtESUdJVDp3ZSxBTFBIQTpPQSxBTFBIQV9ESUdJVDpPQStPQS50b1VwcGVyQ2FzZSgpK3dlfSxwcj0oQT0xNixlPVVlLkFMUEhBX0RJR0lUKT0+e2xldCByPSIiLHtsZW5ndGg6dH09ZTtmb3IoO0EtLTspcis9ZVtNYXRoLnJhbmRvbSgpKnR8MF07cmV0dXJuIHJ9O2Z1bmN0aW9uIG1yKEEpe3JldHVybiEhKEEmJmsoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBocj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSxyPSh0LG4pPT57aWYoRUEodCkpe2lmKGUuaW5kZXhPZih0KT49MClyZXR1cm47aWYoISgidG9KU09OImluIHQpKXtlW25dPXQ7bGV0IGk9TSh0KT9bXTp7fTtyZXR1cm4gWih0LChvLGcpPT57bGV0IGw9cihvLG4rMSk7IXoobCkmJihpW2ddPWwpfSksZVtuXT12b2lkIDAsaX19cmV0dXJuIHR9O3JldHVybiByKEEsMCl9LHlyPU4oIkFzeW5jRnVuY3Rpb24iKSx3cj1BPT5BJiYoRUEoQSl8fGsoQSkpJiZrKEEudGhlbikmJmsoQS5jYXRjaCkscz17aXNBcnJheTpNLGlzQXJyYXlCdWZmZXI6RGUsaXNCdWZmZXI6anQsaXNGb3JtRGF0YTplcixpc0FycmF5QnVmZmVyVmlldzp2dCxpc1N0cmluZzpfdCxpc051bWJlcjpTZSxpc0Jvb2xlYW46VnQsaXNPYmplY3Q6RUEsaXNQbGFpbk9iamVjdDpCQSxpc1VuZGVmaW5lZDp6LGlzRGF0ZTp6dCxpc0ZpbGU6WnQsaXNCbG9iOlh0LGlzUmVnRXhwOkVyLGlzRnVuY3Rpb246ayxpc1N0cmVhbTpBcixpc1VSTFNlYXJjaFBhcmFtczp0cixpc1R5cGVkQXJyYXk6Z3IsaXNGaWxlTGlzdDokdCxmb3JFYWNoOlosbWVyZ2U6SkEsZXh0ZW5kOm5yLHRyaW06cnIsc3RyaXBCT006aXIsaW5oZXJpdHM6b3IsdG9GbGF0T2JqZWN0OmFyLGtpbmRPZjpsQSxraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6c3IsdG9BcnJheTpJcixmb3JFYWNoRW50cnk6Q3IsbWF0Y2hBbGw6QnIsaXNIVE1MRm9ybTpscixoYXNPd25Qcm9wZXJ0eTp5ZSxoYXNPd25Qcm9wOnllLHJlZHVjZURlc2NyaXB0b3JzOlJlLGZyZWV6ZU1ldGhvZHM6UXIsdG9PYmplY3RTZXQ6ZnIsdG9DYW1lbENhc2U6Y3Isbm9vcDp1cix0b0Zpbml0ZU51bWJlcjpkcixmaW5kS2V5OmJlLGdsb2JhbDpGZSxpc0NvbnRleHREZWZpbmVkOmtlLEFMUEhBQkVUOlVlLGdlbmVyYXRlU3RyaW5nOnByLGlzU3BlY0NvbXBsaWFudEZvcm06bXIsdG9KU09OT2JqZWN0OmhyLGlzQXN5bmNGbjp5cixpc1RoZW5hYmxlOndyfTtmdW5jdGlvbiBIKEEsZSxyLHQsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHImJih0aGlzLmNvbmZpZz1yKSx0JiYodGhpcy5yZXF1ZXN0PXQpLG4mJih0aGlzLnJlc3BvbnNlPW4pfXMuaW5oZXJpdHMoSCxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIE5lPUgucHJvdG90eXBlLEdlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e0dlW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEgsR2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtILmZyb209KEEsZSxyLHQsbixpKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoTmUpO3JldHVybiBzLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksSC5jYWxsKG8sQS5tZXNzYWdlLGUscix0LG4pLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obyxpKSxvfTt2YXIgZD1IO3ZhciBRQT1udWxsO2Z1bmN0aW9uIE1BKEEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQSl8fHMuaXNBcnJheShBKX1mdW5jdGlvbiBUZShBKXtyZXR1cm4gcy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBMZShBLGUscil7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG49VGUobiksIXImJmk/IlsiK24rIl0iOm59KS5qb2luKHI/Ii4iOiIiKTplfWZ1bmN0aW9uIERyKEEpe3JldHVybiBzLmlzQXJyYXkoQSkmJiFBLnNvbWUoTUEpfXZhciBTcj1zLnRvRmxhdE9iamVjdChzLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gYnIoQSxlLHIpe2lmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KFFBfHxGb3JtRGF0YSkscj1zLnRvRmxhdE9iamVjdChyLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hcy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCB0PXIubWV0YVRva2VucyxuPXIudmlzaXRvcnx8SSxpPXIuZG90cyxvPXIuaW5kZXhlcyxsPShyLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJnMuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighcy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihzLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFsJiZzLmlzQmxvYihFKSl0aHJvdyBuZXcgZCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gcy5pc0FycmF5QnVmZmVyKEUpfHxzLmlzVHlwZWRBcnJheShFKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gSShFLGMsdSl7bGV0IG09RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihzLmVuZHNXaXRoKGMsInt9IikpYz10P2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYocy5pc0FycmF5KEUpJiZEcihFKXx8KHMuaXNGaWxlTGlzdChFKXx8cy5lbmRzV2l0aChjLCJbXSIpKSYmKG09cy50b0FycmF5KEUpKSlyZXR1cm4gYz1UZShjKSxtLmZvckVhY2goZnVuY3Rpb24oVSx3dCl7IShzLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKG89PT0hMD9MZShbY10sd3QsaSk6bz09PW51bGw/YzpjKyJbXSIsQihVKSl9KSwhMX1yZXR1cm4gTUEoRSk/ITA6KGUuYXBwZW5kKExlKHUsYyxpKSxCKEUpKSwhMSl9bGV0IGE9W10sUT1PYmplY3QuYXNzaWduKFNyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpCLGlzVmlzaXRhYmxlOk1BfSk7ZnVuY3Rpb24gQyhFLGMpe2lmKCFzLmlzVW5kZWZpbmVkKEUpKXtpZihhLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2EucHVzaChFKSxzLmZvckVhY2goRSxmdW5jdGlvbihtLFIpeyghKHMuaXNVbmRlZmluZWQobSl8fG09PT1udWxsKSYmbi5jYWxsKGUsbSxzLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxRKSk9PT0hMCYmQyhtLGM/Yy5jb25jYXQoUik6W1JdKX0pLGEucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQyhBKSxlfXZhciBUPWJyO2Z1bmN0aW9uIHhlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfSl9ZnVuY3Rpb24gT2UoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZUKEEsdGhpcyxlKX12YXIgSmU9T2UucHJvdG90eXBlO0plLmFwcGVuZD1mdW5jdGlvbihlLHIpe3RoaXMuX3BhaXJzLnB1c2goW2Uscl0pfTtKZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgcj1lP2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcyx0LHhlKX06eGU7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gcihuWzBdKSsiPSIrcihuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIGZBPU9lO2Z1bmN0aW9uIEZyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSxlLHIpe2lmKCFlKXJldHVybiBBO2xldCB0PXImJnIuZW5jb2RlfHxGcixuPXImJnIuc2VyaWFsaXplLGk7aWYobj9pPW4oZSxyKTppPXMuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBmQShlLHIpLnRvU3RyaW5nKHQpLGkpe2xldCBvPUEuaW5kZXhPZigiIyIpO28hPT0tMSYmKEE9QS5zbGljZSgwLG8pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBBfXZhciBIQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUscix0KXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDpyLHN5bmNocm9ub3VzOnQ/dC5zeW5jaHJvbm91czohMSxydW5XaGVuOnQ/dC5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7cy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24odCl7dCE9PW51bGwmJmUodCl9KX19LFlBPUhBO3ZhciB1QT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIFBlPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpmQTt2YXIgTWU9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBIZT10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBZZT17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpQZSxGb3JtRGF0YTpNZSxCbG9iOkhlfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIHFBPXt9O1N0KHFBLHtoYXNCcm93c2VyRW52OigpPT5xZSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PmtyLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+UnJ9KTt2YXIgcWU9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsa3I9KEE9PnFlJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksUnI9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciBEPXsuLi5xQSwuLi5ZZX07ZnVuY3Rpb24gS0EoQSxlKXtyZXR1cm4gVChBLG5ldyBELmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24ocix0LG4saSl7cmV0dXJuIEQuaXNOb2RlJiZzLmlzQnVmZmVyKHIpPyh0aGlzLmFwcGVuZCh0LHIudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6aS5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gVXIoQSl7cmV0dXJuIHMubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBOcihBKXtsZXQgZT17fSxyPU9iamVjdC5rZXlzKEEpLHQsbj1yLmxlbmd0aCxpO2Zvcih0PTA7dDxuO3QrKylpPXJbdF0sZVtpXT1BW2ldO3JldHVybiBlfWZ1bmN0aW9uIEdyKEEpe2Z1bmN0aW9uIGUocix0LG4saSl7bGV0IG89cltpKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK28pLGw9aT49ci5sZW5ndGg7cmV0dXJuIG89IW8mJnMuaXNBcnJheShuKT9uLmxlbmd0aDpvLGw/KHMuaGFzT3duUHJvcChuLG8pP25bb109W25bb10sdF06bltvXT10LCFnKTooKCFuW29dfHwhcy5pc09iamVjdChuW29dKSkmJihuW29dPVtdKSxlKHIsdCxuW29dLGkpJiZzLmlzQXJyYXkobltvXSkmJihuW29dPU5yKG5bb10pKSwhZyl9aWYocy5pc0Zvcm1EYXRhKEEpJiZzLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHI9e307cmV0dXJuIHMuZm9yRWFjaEVudHJ5KEEsKHQsbik9PntlKFVyKHQpLG4sciwwKX0pLHJ9cmV0dXJuIG51bGx9dmFyIGRBPUdyO2Z1bmN0aW9uIExyKEEsZSxyKXtpZihzLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSkscy50cmltKEEpfWNhdGNoKHQpe2lmKHQubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgdH1yZXR1cm4ocnx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBXQT17dHJhbnNpdGlvbmFsOnVBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSxyKXtsZXQgdD1yLmdldENvbnRlbnRUeXBlKCl8fCIiLG49dC5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsaT1zLmlzT2JqZWN0KGUpO2lmKGkmJnMuaXNIVE1MRm9ybShlKSYmKGU9bmV3IEZvcm1EYXRhKGUpKSxzLmlzRm9ybURhdGEoZSkpcmV0dXJuIG4/SlNPTi5zdHJpbmdpZnkoZEEoZSkpOmU7aWYocy5pc0FycmF5QnVmZmVyKGUpfHxzLmlzQnVmZmVyKGUpfHxzLmlzU3RyZWFtKGUpfHxzLmlzRmlsZShlKXx8cy5pc0Jsb2IoZSkpcmV0dXJuIGU7aWYocy5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYocy5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gci5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IGc7aWYoaSl7aWYodC5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gS0EoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChnPXMuaXNGaWxlTGlzdChlKSl8fHQuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgbD10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIFQoZz97ImZpbGVzW10iOmV9OmUsbCYmbmV3IGwsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBpfHxuPyhyLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksTHIoZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHI9dGhpcy50cmFuc2l0aW9uYWx8fFdBLnRyYW5zaXRpb25hbCx0PXImJnIuZm9yY2VkSlNPTlBhcnNpbmcsbj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihlJiZzLmlzU3RyaW5nKGUpJiYodCYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7bGV0IG89IShyJiZyLnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZyl7aWYobyl0aHJvdyBnLm5hbWU9PT0iU3ludGF4RXJyb3IiP2QuZnJvbShnLGQuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Z319cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOkQuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOkQuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57V0EuaGVhZGVyc1tBXT17fX0pO3ZhciBZPVdBO3ZhciBUcj1zLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLEtlPUE9PntsZXQgZT17fSxyLHQsbjtyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24obyl7bj1vLmluZGV4T2YoIjoiKSxyPW8uc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCksdD1vLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhKCFyfHxlW3JdJiZUcltyXSkmJihyPT09InNldC1jb29raWUiP2Vbcl0/ZVtyXS5wdXNoKHQpOmVbcl09W3RdOmVbcl09ZVtyXT9lW3JdKyIsICIrdDp0KX0pLGV9O3ZhciBXZT1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uICQoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBwQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6cy5pc0FycmF5KEEpP0EubWFwKHBBKTpTdHJpbmcoQSl9ZnVuY3Rpb24geHIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSxyPS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2csdDtmb3IoO3Q9ci5leGVjKEEpOyllW3RbMV1dPXRbMl07cmV0dXJuIGV9dmFyIE9yPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIGpBKEEsZSxyLHQsbil7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxlLHIpO2lmKG4mJihlPXIpLCEhcy5pc1N0cmluZyhlKSl7aWYocy5pc1N0cmluZyh0KSlyZXR1cm4gZS5pbmRleE9mKHQpIT09LTE7aWYocy5pc1JlZ0V4cCh0KSlyZXR1cm4gdC50ZXN0KGUpfX1mdW5jdGlvbiBKcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHIsdCk9PnIudG9VcHBlckNhc2UoKSt0KX1mdW5jdGlvbiBQcihBLGUpe2xldCByPXMudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaCh0PT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsdCtyLHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbdF0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBxPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHIsdCl7bGV0IG49dGhpcztmdW5jdGlvbiBpKGcsbCxCKXtsZXQgST0kKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgYT1zLmZpbmRLZXkobixJKTsoIWF8fG5bYV09PT12b2lkIDB8fEI9PT0hMHx8Qj09PXZvaWQgMCYmblthXSE9PSExKSYmKG5bYXx8bF09cEEoZykpfWxldCBvPShnLGwpPT5zLmZvckVhY2goZywoQixJKT0+aShCLEksbCkpO3JldHVybiBzLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28oZSxyKTpzLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFPcihlKT9vKEtlKGUpLHIpOmUhPW51bGwmJmkocixlLHQpLHRoaXN9Z2V0KGUscil7aWYoZT0kKGUpLGUpe2xldCB0PXMuZmluZEtleSh0aGlzLGUpO2lmKHQpe2xldCBuPXRoaXNbdF07aWYoIXIpcmV0dXJuIG47aWYocj09PSEwKXJldHVybiB4cihuKTtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLG4sdCk7aWYocy5pc1JlZ0V4cChyKSlyZXR1cm4gci5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSxyKXtpZihlPSQoZSksZSl7bGV0IHQ9cy5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEodCYmdGhpc1t0XSE9PXZvaWQgMCYmKCFyfHxqQSh0aGlzLHRoaXNbdF0sdCxyKSkpfXJldHVybiExfWRlbGV0ZShlLHIpe2xldCB0PXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89JChvKSxvKXtsZXQgZz1zLmZpbmRLZXkodCxvKTtnJiYoIXJ8fGpBKHQsdFtnXSxnLHIpKSYmKGRlbGV0ZSB0W2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChpKTppKGUpLG59Y2xlYXIoZSl7bGV0IHI9T2JqZWN0LmtleXModGhpcyksdD1yLmxlbmd0aCxuPSExO2Zvcig7dC0tOyl7bGV0IGk9clt0XTsoIWV8fGpBKHRoaXMsdGhpc1tpXSxpLGUsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgcj10aGlzLHQ9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLGkpPT57bGV0IG89cy5maW5kS2V5KHQsaSk7aWYobyl7cltvXT1wQShuKSxkZWxldGUgcltpXTtyZXR1cm59bGV0IGc9ZT9KcihpKTpTdHJpbmcoaSkudHJpbSgpO2chPT1pJiZkZWxldGUgcltpXSxyW2ddPXBBKG4pLHRbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHI9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHQsbik9Pnt0IT1udWxsJiZ0IT09ITEmJihyW25dPWUmJnMuaXNBcnJheSh0KT90LmpvaW4oIiwgIik6dCl9KSxyfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHJdKT0+ZSsiOiAiK3IpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi5yKXtsZXQgdD1uZXcgdGhpcyhlKTtyZXR1cm4gci5mb3JFYWNoKG49PnQuc2V0KG4pKSx0fXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgdD0odGhpc1tXZV09dGhpc1tXZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkobyl7bGV0IGc9JChvKTt0W2ddfHwoUHIobixvKSx0W2ddPSEwKX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChpKTppKGUpLHRoaXN9fTtxLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtzLnJlZHVjZURlc2NyaXB0b3JzKHEucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgcj1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldCh0KXt0aGlzW3JdPXR9fX0pO3MuZnJlZXplTWV0aG9kcyhxKTt2YXIgUz1xO2Z1bmN0aW9uIEFBKEEsZSl7bGV0IHI9dGhpc3x8WSx0PWV8fHIsbj1TLmZyb20odC5oZWFkZXJzKSxpPXQuZGF0YTtyZXR1cm4gcy5mb3JFYWNoKEEsZnVuY3Rpb24oZyl7aT1nLmNhbGwocixpLG4ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksbi5ub3JtYWxpemUoKSxpfWZ1bmN0aW9uIGVBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gamUoQSxlLHIpe2QuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsZC5FUlJfQ0FOQ0VMRUQsZSxyKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifXMuaW5oZXJpdHMoamUsZCx7X19DQU5DRUxfXzohMH0pO3ZhciB4PWplO2Z1bmN0aW9uIHZBKEEsZSxyKXtsZXQgdD1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshci5zdGF0dXN8fCF0fHx0KHIuc3RhdHVzKT9BKHIpOmUobmV3IGQoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxbZC5FUlJfQkFEX1JFUVVFU1QsZC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHIuc3RhdHVzLzEwMCktNF0sci5jb25maWcsci5yZXF1ZXN0LHIpKX12YXIgdmU9RC5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSxyLHQsbixpKXtsZXQgbz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTtzLmlzTnVtYmVyKHIpJiZvLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxzLmlzU3RyaW5nKHQpJiZvLnB1c2goInBhdGg9Iit0KSxzLmlzU3RyaW5nKG4pJiZvLnB1c2goImRvbWFpbj0iK24pLGk9PT0hMCYmby5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9by5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gX0EoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiBWQShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gdEEoQSxlKXtyZXR1cm4gQSYmIV9BKGUpP1ZBKEEsZSk6ZX12YXIgX2U9RC5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHQ7ZnVuY3Rpb24gbihpKXtsZXQgbz1pO3JldHVybiBlJiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLG89ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsbykse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOnIucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiB0PW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG8pe2xldCBnPXMuaXNTdHJpbmcobyk/bihvKTpvO3JldHVybiBnLnByb3RvY29sPT09dC5wcm90b2NvbCYmZy5ob3N0PT09dC5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiB6QShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gTXIoQSxlKXtBPUF8fDEwO2xldCByPW5ldyBBcnJheShBKSx0PW5ldyBBcnJheShBKSxuPTAsaT0wLG87cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihsKXtsZXQgQj1EYXRlLm5vdygpLEk9dFtpXTtvfHwobz1CKSxyW25dPWwsdFtuXT1CO2xldCBhPWksUT0wO2Zvcig7YSE9PW47KVErPXJbYSsrXSxhPWElQTtpZihuPShuKzEpJUEsbj09PWkmJihpPShpKzEpJUEpLEItbzxlKXJldHVybjtsZXQgQz1JJiZCLUk7cmV0dXJuIEM/TWF0aC5yb3VuZChRKjFlMy9DKTp2b2lkIDB9fXZhciBWZT1NcjtmdW5jdGlvbiB6ZShBLGUpe2xldCByPTAsdD1WZSg1MCwyNTApO3JldHVybiBuPT57bGV0IGk9bi5sb2FkZWQsbz1uLmxlbmd0aENvbXB1dGFibGU/bi50b3RhbDp2b2lkIDAsZz1pLXIsbD10KGcpLEI9aTw9bztyPWk7bGV0IEk9e2xvYWRlZDppLHRvdGFsOm8scHJvZ3Jlc3M6bz9pL286dm9pZCAwLGJ5dGVzOmcscmF0ZTpsfHx2b2lkIDAsZXN0aW1hdGVkOmwmJm8mJkI/KG8taSkvbDp2b2lkIDAsZXZlbnQ6bn07SVtlPyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEoSSl9fXZhciBIcj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLFplPUhyJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocix0KXtsZXQgbj1BLmRhdGEsaT1TLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm8sd2l0aFhTUkZUb2tlbjpnfT1BLGw7ZnVuY3Rpb24gQigpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobCksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixsKX1sZXQgSTtpZihzLmlzRm9ybURhdGEobikpe2lmKEQuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxELmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilpLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChJPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4udV09ST9JLnNwbGl0KCI7IikubWFwKG09Pm0udHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLnVdLmpvaW4oIjsgIikpfX1sZXQgYT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgYz1BLmF1dGgudXNlcm5hbWV8fCIiLHU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShjKyI6Iit1KSl9bGV0IFE9dEEoQS5iYXNlVVJMLEEudXJsKTthLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxYKFEsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBDKCl7aWYoIWEpcmV0dXJuO2xldCBjPVMuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLG09e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6YX07dkEoZnVuY3Rpb24oVSl7cihVKSxCKCl9LGZ1bmN0aW9uKFUpe3QoVSksQigpfSxtKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPUM6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KEMpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYodChuZXcgZCgiUmVxdWVzdCBhYm9ydGVkIixkLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXt0KG5ldyBkKCJOZXR3b3JrIEVycm9yIixkLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsbT1BLnRyYW5zaXRpb25hbHx8dUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHQobmV3IGQodSxtLmNsYXJpZnlUaW1lb3V0RXJyb3I/ZC5FVElNRURPVVQ6ZC5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSxELmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKGcmJnMuaXNGdW5jdGlvbihnKSYmKGc9ZyhBKSksZ3x8ZyE9PSExJiZfZShRKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnZlLnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJnMuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKHUsbSl7YS5zZXRSZXF1ZXN0SGVhZGVyKG0sdSl9KSxzLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix6ZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsemUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGw9Yz0+e2EmJih0KCFjfHxjLnR5cGU/bmV3IHgobnVsbCxBLGEpOmMpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShsKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/bCgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixsKSkpO2xldCBFPXpBKFEpO2lmKEUmJkQucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7dChuZXcgZCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixkLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgWkE9e2h0dHA6UUEseGhyOlplfTtzLmZvckVhY2goWkEsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgWGU9QT0+YC0gJHtBfWAsWXI9QT0+cy5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLG1BPXtnZXRBZGFwdGVyOkE9PntBPXMuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEscix0LG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7cj1BW2ldO2xldCBvO2lmKHQ9ciwhWXIocikmJih0PVpBWyhvPVN0cmluZyhyKSkudG9Mb3dlckNhc2UoKV0sdD09PXZvaWQgMCkpdGhyb3cgbmV3IGQoYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZih0KWJyZWFrO25bb3x8IiMiK2ldPXR9aWYoIXQpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2csbF0pPT5gYWRhcHRlciAke2d9IGArKGw9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKFhlKS5qb2luKGAKYCk6IiAiK1hlKGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGQoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gdH0sYWRhcHRlcnM6WkF9O2Z1bmN0aW9uIFhBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24gaEEoQSl7cmV0dXJuIFhBKEEpLEEuaGVhZGVycz1TLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9QUEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLG1BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxZLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24odCl7cmV0dXJuIFhBKEEpLHQuZGF0YT1BQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSx0KSx0LmhlYWRlcnM9Uy5mcm9tKHQuaGVhZGVycyksdH0sZnVuY3Rpb24odCl7cmV0dXJuIGVBKHQpfHwoWEEoQSksdCYmdC5yZXNwb25zZSYmKHQucmVzcG9uc2UuZGF0YT1BQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSx0LnJlc3BvbnNlKSx0LnJlc3BvbnNlLmhlYWRlcnM9Uy5mcm9tKHQucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdCh0KX0pfXZhciAkZT1BPT5BIGluc3RhbmNlb2YgUz97Li4uQX06QTtmdW5jdGlvbiBHKEEsZSl7ZT1lfHx7fTtsZXQgcj17fTtmdW5jdGlvbiB0KEIsSSxhKXtyZXR1cm4gcy5pc1BsYWluT2JqZWN0KEIpJiZzLmlzUGxhaW5PYmplY3QoSSk/cy5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxCLEkpOnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlKHt9LEkpOnMuaXNBcnJheShJKT9JLnNsaWNlKCk6SX1mdW5jdGlvbiBuKEIsSSxhKXtpZihzLmlzVW5kZWZpbmVkKEkpKXtpZighcy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gdCh2b2lkIDAsQixhKX1lbHNlIHJldHVybiB0KEIsSSxhKX1mdW5jdGlvbiBpKEIsSSl7aWYoIXMuaXNVbmRlZmluZWQoSSkpcmV0dXJuIHQodm9pZCAwLEkpfWZ1bmN0aW9uIG8oQixJKXtpZihzLmlzVW5kZWZpbmVkKEkpKXtpZighcy5pc1VuZGVmaW5lZChCKSlyZXR1cm4gdCh2b2lkIDAsQil9ZWxzZSByZXR1cm4gdCh2b2lkIDAsSSl9ZnVuY3Rpb24gZyhCLEksYSl7aWYoYSBpbiBlKXJldHVybiB0KEIsSSk7aWYoYSBpbiBBKXJldHVybiB0KHZvaWQgMCxCKX1sZXQgbD17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpnLGhlYWRlcnM6KEIsSSk9Pm4oJGUoQiksJGUoSSksITApfTtyZXR1cm4gcy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24oSSl7bGV0IGE9bFtJXXx8bixRPWEoQVtJXSxlW0ldLEkpO3MuaXNVbmRlZmluZWQoUSkmJmEhPT1nfHwocltJXT1RKX0pLHJ9dmFyIHlBPSIxLjYuOCI7dmFyICRBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+eyRBW0FdPWZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdD09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBBdD17fTskQS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSxyLHQpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3lBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysodD8iLiAiK3Q6IiIpfXJldHVybihpLG8sZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IGQobihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHI/IiBpbiAiK3I6IiIpKSxkLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gciYmIUF0W29dJiYoQXRbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrcisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLGcpOiEwfX07ZnVuY3Rpb24gcXIoQSxlLHIpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgZCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsZC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHQ9T2JqZWN0LmtleXMoQSksbj10Lmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXRbbl0sbz1lW2ldO2lmKG8pe2xldCBnPUFbaV0sbD1nPT09dm9pZCAwfHxvKGcsaSxBKTtpZihsIT09ITApdGhyb3cgbmV3IGQoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrbCxkLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihyIT09ITApdGhyb3cgbmV3IGQoIlVua25vd24gb3B0aW9uICIraSxkLkVSUl9CQURfT1BUSU9OKX19dmFyIHdBPXthc3NlcnRPcHRpb25zOnFyLHZhbGlkYXRvcnM6JEF9O3ZhciBPPXdBLnZhbGlkYXRvcnMsSz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IFlBLHJlc3BvbnNlOm5ldyBZQX19YXN5bmMgcmVxdWVzdChlLHIpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHIpfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7dC5zdGFjaz9pJiYhU3RyaW5nKHQuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYodC5zdGFjays9YApgK2kpOnQuc3RhY2s9aX10aHJvdyB0fX1fcmVxdWVzdChlLHIpe3R5cGVvZiBlPT0ic3RyaW5nIj8ocj1yfHx7fSxyLnVybD1lKTpyPWV8fHt9LHI9Ryh0aGlzLmRlZmF1bHRzLHIpO2xldHt0cmFuc2l0aW9uYWw6dCxwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT1yO3QhPT12b2lkIDAmJndBLmFzc2VydE9wdGlvbnModCx7c2lsZW50SlNPTlBhcnNpbmc6Ty50cmFuc2l0aW9uYWwoTy5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpPLnRyYW5zaXRpb25hbChPLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6Ty50cmFuc2l0aW9uYWwoTy5ib29sZWFuKX0sITEpLG4hPW51bGwmJihzLmlzRnVuY3Rpb24obik/ci5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06d0EuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6Ty5mdW5jdGlvbixzZXJpYWxpemU6Ty5mdW5jdGlvbn0sITApKSxyLm1ldGhvZD0oci5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZzLm1lcmdlKGkuY29tbW9uLGlbci5tZXRob2RdKTtpJiZzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBpW0VdfSksci5oZWFkZXJzPVMuY29uY2F0KG8saSk7bGV0IGc9W10sbD0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHIpPT09ITF8fChsPWwmJmMuc3luY2hyb25vdXMsZy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBCPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7Qi5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEksYT0wLFE7aWYoIWwpe2xldCBFPVtoQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLGcpLEUucHVzaC5hcHBseShFLEIpLFE9RS5sZW5ndGgsST1Qcm9taXNlLnJlc29sdmUocik7YTxROylJPUkudGhlbihFW2ErK10sRVthKytdKTtyZXR1cm4gSX1RPWcubGVuZ3RoO2xldCBDPXI7Zm9yKGE9MDthPFE7KXtsZXQgRT1nW2ErK10sYz1nW2ErK107dHJ5e0M9RShDKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0k9aEEuY2FsbCh0aGlzLEMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3IoYT0wLFE9Qi5sZW5ndGg7YTxROylJPUkudGhlbihCW2ErK10sQlthKytdKTtyZXR1cm4gSX1nZXRVcmkoZSl7ZT1HKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHI9dEEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gWChyLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe0sucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIHRoaXMucmVxdWVzdChHKHR8fHt9LHttZXRob2Q6ZSx1cmw6cixkYXRhOih0fHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbihpLG8sZyl7cmV0dXJuIHRoaXMucmVxdWVzdChHKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnQ/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpvfSkpfX1LLnByb3RvdHlwZVtlXT1yKCksSy5wcm90b3R5cGVbZSsiRm9ybSJdPXIoITApfSk7dmFyIHJBPUs7dmFyIEFlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCByO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXtyPWl9KTtsZXQgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighdC5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT10Ll9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOyl0Ll9saXN0ZW5lcnNbaV0obik7dC5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IGksbz1uZXcgUHJvbWlzZShnPT57dC5zdWJzY3JpYmUoZyksaT1nfSkudGhlbihuKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXt0LnVuc3Vic2NyaWJlKGkpfSxvfSxlKGZ1bmN0aW9uKGksbyxnKXt0LnJlYXNvbnx8KHQucmVhc29uPW5ldyB4KGksbyxnKSxyKHQucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7ciE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxldD1BZTtmdW5jdGlvbiBlZShBKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIEEuYXBwbHkobnVsbCxyKX19ZnVuY3Rpb24gdGUoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIHJlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhyZSkuZm9yRWFjaCgoW0EsZV0pPT57cmVbZV09QX0pO3ZhciB0dD1yZTtmdW5jdGlvbiBydChBKXtsZXQgZT1uZXcgckEoQSkscj1WKHJBLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBzLmV4dGVuZChyLHJBLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSkscy5leHRlbmQocixlLG51bGwse2FsbE93bktleXM6ITB9KSxyLmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gcnQoRyhBLG4pKX0scn12YXIgaD1ydChZKTtoLkF4aW9zPXJBO2guQ2FuY2VsZWRFcnJvcj14O2guQ2FuY2VsVG9rZW49ZXQ7aC5pc0NhbmNlbD1lQTtoLlZFUlNJT049eUE7aC50b0Zvcm1EYXRhPVQ7aC5BeGlvc0Vycm9yPWQ7aC5DYW5jZWw9aC5DYW5jZWxlZEVycm9yO2guYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07aC5zcHJlYWQ9ZWU7aC5pc0F4aW9zRXJyb3I9dGU7aC5tZXJnZUNvbmZpZz1HO2guQXhpb3NIZWFkZXJzPVM7aC5mb3JtVG9KU09OPUE9PmRBKHMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7aC5nZXRBZGFwdGVyPW1BLmdldEFkYXB0ZXI7aC5IdHRwU3RhdHVzQ29kZT10dDtoLmRlZmF1bHQ9aDt2YXIgVz1oO3ZhcntBeGlvczpEYSxBeGlvc0Vycm9yOlNhLENhbmNlbGVkRXJyb3I6YmEsaXNDYW5jZWw6RmEsQ2FuY2VsVG9rZW46a2EsVkVSU0lPTjpSYSxhbGw6VWEsQ2FuY2VsOk5hLGlzQXhpb3NFcnJvcjpHYSxzcHJlYWQ6TGEsdG9Gb3JtRGF0YTpUYSxBeGlvc0hlYWRlcnM6eGEsSHR0cFN0YXR1c0NvZGU6T2EsZm9ybVRvSlNPTjpKYSxnZXRBZGFwdGVyOlBhLG1lcmdlQ29uZmlnOk1hfT1XO2FzeW5jIGZ1bmN0aW9uIEtyKEEsZSl7bGV0IHI9QSx0PW51bGw7aWYocj09bnVsbCl0PW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHIuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCBXLmdldChyLHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksaT1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7dD1uZXcgV29ya2VyKGkse3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHQ9bmV3IFdvcmtlcihyLHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHR9dmFyIG5BPUtyO2Z1bmN0aW9uIG50KEEpe2xldCBlPVRBKEEpLHI9QTtyZXR1cm4gci50ZXJtaW5hdGVkPSExLHIud29ya2VyUHJveHk9ZSxyLm9yaWdpbmFsVGVybWluYXRlPXIudGVybWluYXRlLHIudGVybWluYXRlPSgpPT57ci50ZXJtaW5hdGVkPSEwLHIud29ya2VyUHJveHlbTEFdKCksci5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6cn19YXN5bmMgZnVuY3Rpb24gV3IoQSxlLHIpe2xldCB0O2lmKEEhPW51bGwpe2xldCBpPUE7cmV0dXJuIGkud29ya2VyUHJveHkhPT12b2lkIDA/KHQ9aS53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6dCx3b3JrZXI6aX0pOm50KEEpfWxldCBuPWF3YWl0IG5BKGUscik7cmV0dXJuIG50KG4pfXZhciBpdD1Xcjthc3luYyBmdW5jdGlvbiBqcihBLGUscil7bGV0IHQ9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj90PUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT90PUE6dD10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSx0LmVuZHNXaXRoKCIuanMiKSYmKHQ9dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC0zKSksdC5lbmRzV2l0aCgiLndhc20iKSYmKHQ9dC5zdWJzdHJpbmcoMCx0Lmxlbmd0aC01KSk7bGV0IG49YCR7dH0ud2FzbWAsbz0oYXdhaXQgVy5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnJ9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3R9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6b30pfXZhciBvdD1qcjt2YXIgYXQ9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIGd0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLHN0PW5ldyBUZXh0RW5jb2RlcixJdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gdnIoQSxlKXtsZXQgcj17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSx0PUEuZnNfb3BlbihlLHIuZmxhZ3MpLGk9QS5mc19zdGF0KGUpLnNpemUsbz1udWxsO2d0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKGkpOm89bmV3IEFycmF5QnVmZmVyKGkpO2xldCBnPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQodCxnLDAsaSwwKSxBLmZzX2Nsb3NlKHQpLGd9ZnVuY3Rpb24gQ3QoQSxlLHIpe2xldCB0PW51bGw7Z3Q/dD1uZXcgU2hhcmVkQXJyYXlCdWZmZXIocik6dD1uZXcgQXJyYXlCdWZmZXIocik7bGV0IG49bmV3IFVpbnQ4QXJyYXkodCksaT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSxyKTtyZXR1cm4gbi5zZXQoaSksbn1mdW5jdGlvbiB3KEEsZSxyLHQpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxyLHQsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24gaihBLGUscil7bGV0IHQ9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOCh0KSsxLGk9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxyLG5dKTtBLnN0cmluZ1RvVVRGOCh0LGksbil9ZnVuY3Rpb24gRihBLGUscix0KXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHJdKSxpPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pLG89Q3QoQSxuLGkpO3JldHVybiBMKHQsby5idWZmZXIpfWZ1bmN0aW9uIG5lKEEsZSl7bGV0IHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSksdD1BLlVURjhUb1N0cmluZyhyKTtyZXR1cm4gSlNPTi5wYXJzZSh0KX1mdW5jdGlvbiBfcihBLGUscix0KXt0IT1udWxsJiZ0Lmxlbmd0aD4wJiZ0LmZvckVhY2goZnVuY3Rpb24oQixJKXtzd2l0Y2goQi50eXBlKXtjYXNlIHAuVGV4dFN0cmVhbTp7bGV0IGE9c3QuZW5jb2RlKEIuZGF0YS5kYXRhKSxRPXcoQSxhLEksMCksQz17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O2ooQSxDLEkpO2JyZWFrfWNhc2UgcC5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9c3QuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEIuZGF0YSkpLFE9dyhBLGEsSSwwKSxDPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07aihBLEMsSSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IGE9Qi5kYXRhLmRhdGEsUT13KEEsYSxJLDApLEM9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTtqKEEsQyxJKTticmVha31jYXNlIHAuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIHAuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IGE9Qi5kYXRhLFE9dyhBLGEuZGF0YSxJLDApLEM9dyhBLGEuZGlyZWN0aW9uLEksMSksRT10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxtZXRhZGF0YTpFfTtqKEEsYyxJKTticmVha31jYXNlIHAuTWVzaDp7bGV0IGE9Qi5kYXRhLFE9dyhBLGEucG9pbnRzLEksMCksQz13KEEsYS5jZWxscyxJLDEpLEU9dyhBLGEucG9pbnREYXRhLEksMiksYz13KEEsYS5jZWxsRGF0YSxJLDMpLHU9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtqKEEsdSxJKTticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBhPUIuZGF0YSxRPXcoQSxhLnBvaW50cyxJLDApLEM9dyhBLGEudmVydGljZXMsSSwxKSxFPXcoQSxhLmxpbmVzLEksMiksYz13KEEsYS5wb2x5Z29ucyxJLDMpLHU9dyhBLGEudHJpYW5nbGVTdHJpcHMsSSw0KSxtPXcoQSxhLnBvaW50RGF0YSxJLDUpLFI9dyhBLGEucG9pbnREYXRhLEksNiksVT17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHttfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtqKEEsVSxJKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLGk9MDt0cnl7aT1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2goQil7dGhyb3cgdHlwZW9mIEI9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoQikpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksQn1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksZz1BLmdldE1vZHVsZVN0ZGVycigpLGw9W107cmV0dXJuIHIhPW51bGwmJnIubGVuZ3RoPjAmJmk9PT0wJiZyLmZvckVhY2goZnVuY3Rpb24oQixJKXtsZXQgYT1udWxsO3N3aXRjaChCLnR5cGUpe2Nhc2UgcC5UZXh0U3RyZWFtOntsZXQgQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEMsRSk7YT17ZGF0YTpJdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgcC5Kc29uQ29tcGF0aWJsZTp7bGV0IEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixDLEUpO2E9SlNPTi5wYXJzZShJdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgcC5CaW5hcnlTdHJlYW06e2xldCBDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSk7YT17ZGF0YTpDdChBLEMsRSl9O2JyZWFrfWNhc2UgcC5UZXh0RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoQi5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIHAuQmluYXJ5RmlsZTp7YT17cGF0aDpCLmRhdGEucGF0aCxkYXRhOnZyKEEsQi5kYXRhLnBhdGgpfTticmVha31jYXNlIHAuSW1hZ2U6e2xldCBDPW5lKEEsSSk7Qy5kYXRhPUYoQSxJLDAsQy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQy5kaXJlY3Rpb249RihBLEksMSx5LkZsb2F0NjQpLEMubWV0YWRhdGE9bmV3IE1hcChDLm1ldGFkYXRhKSxhPUM7YnJlYWt9Y2FzZSBwLk1lc2g6e2xldCBDPW5lKEEsSSk7Qy5udW1iZXJPZlBvaW50cz4wP0MucG9pbnRzPUYoQSxJLDAsQy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkMucG9pbnRzPUwoQy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbHM+MD9DLmNlbGxzPUYoQSxJLDEsQy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qy5jZWxscz1MKEMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mUG9pbnRQaXhlbHM+MD9DLnBvaW50RGF0YT1GKEEsSSwyLEMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkMucG9pbnREYXRhPUwoQy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qy5jZWxsRGF0YT1GKEEsSSwzLEMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qy5jZWxsRGF0YT1MKEMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QzticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBDPW5lKEEsSSk7Qy5udW1iZXJPZlBvaW50cz4wP0MucG9pbnRzPUYoQSxJLDAseS5GbG9hdDMyKTpDLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEMudmVydGljZXNCdWZmZXJTaXplPjA/Qy52ZXJ0aWNlcz1GKEEsSSwxLGYuVUludDMyKTpDLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxDLmxpbmVzQnVmZmVyU2l6ZT4wP0MubGluZXM9RihBLEksMixmLlVJbnQzMik6Qy5saW5lcz1uZXcgVWludDMyQXJyYXksQy5wb2x5Z29uc0J1ZmZlclNpemU+MD9DLnBvbHlnb25zPUYoQSxJLDMsZi5VSW50MzIpOkMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Qy50cmlhbmdsZVN0cmlwcz1GKEEsSSw0LGYuVUludDMyKTpDLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxDLm51bWJlck9mUG9pbnRQaXhlbHM+MD9DLnBvaW50RGF0YT1GKEEsSSw1LEMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpDLnBvaW50RGF0YT1MKEMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZkNlbGxQaXhlbHM+MD9DLmNlbGxEYXRhPUYoQSxJLDYsQy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qy5jZWxsRGF0YT1MKEMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgUT17dHlwZTpCLnR5cGUsZGF0YTphfTtsLnB1c2goUSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6byxzdGRlcnI6ZyxvdXRwdXRzOmx9fXZhciBCdD1fcjt2YXIgVnI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIHpyKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgcj1bXTtmb3IobGV0IHQ9MDt0PEEubGVuZ3RoO3QrKyl7bGV0IG49WnIoQVt0XSxlKTtuIT09bnVsbCYmci5wdXNoKG4pfXJldHVybiByfWZ1bmN0aW9uIFpyKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgcj1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD9yPUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHI9QSksVnImJnIgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/cjpyLnNsaWNlKDApfXZhciBsdD16cjtmdW5jdGlvbiBYcihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgY3Q9WHI7ZnVuY3Rpb24gJHIoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEV0PSRyO2Z1bmN0aW9uIEFuKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBRdD1Bbjt2YXIgZW47ZnVuY3Rpb24gREEoKXtyZXR1cm4gZW59dmFyIHRuO2Z1bmN0aW9uIGZ0KCl7cmV0dXJuIHRufXZhciBybjtmdW5jdGlvbiBTQSgpe3JldHVybiBybn12YXIgaWU9bmV3IE1hcDtmdW5jdGlvbiBubigpe2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiB1dCgpe2xldCBBPURBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGJBKCl7bGV0IEE9ZnQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBvbihBLGUscil7bGV0IHQ9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYodD1uZXcgVVJMKEEuaHJlZiksbj10LmhyZWYpLGllLmhhcyhuKSlyZXR1cm4gaWUuZ2V0KG4pO3tsZXQgaT1hd2FpdCBvdChBLGU/LnRvU3RyaW5nKCk/P3V0KCkscj8/YkEoKSk7cmV0dXJuIGllLnNldChuLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIGFuKEEsZSxyLHQsbil7aWYoIWF3YWl0IGF0KCkpe2xldCB1PSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydCh1KSxuZXcgRXJyb3IodSl9bGV0IGk9bj8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IHU9YXdhaXQgb24oQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtyZXR1cm4gQnQodSxlLHIsdCl9bGV0IG89aSxnPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9ubigpLGw9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OkIsd29ya2VyOkl9PWF3YWl0IGl0KG8sbCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9iQSgpKTtvPUk7bGV0IGE9W107dCE9bnVsbCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lmKHUudHlwZT09PXAuQmluYXJ5U3RyZWFtKXtsZXQgbT11LmRhdGEuZGF0YTthLnB1c2gobSl9ZWxzZSBpZih1LnR5cGU9PT1wLkJpbmFyeUZpbGUpe2xldCBtPXUuZGF0YS5kYXRhO2EucHVzaChtKX1lbHNlIGlmKHUudHlwZT09PXAuSW1hZ2Upe2xldCBtPXUuZGF0YTttLmRhdGEhPT1udWxsJiZhLnB1c2goLi4uY3QobSkpfWVsc2UgaWYodS50eXBlPT09cC5NZXNoKXtsZXQgbT11LmRhdGE7YS5wdXNoKC4uLkV0KG0pKX1lbHNlIGlmKHUudHlwZT09PXAuUG9seURhdGEpe2xldCBtPXUuZGF0YTthLnB1c2goLi4uUXQobSkpfX0pO2xldCBRPW4/LnBpcGVsaW5lQmFzZVVybD8/dXQoKSxDPXR5cGVvZiBRIT0ic3RyaW5nIiYmdHlwZW9mIFE/LmhyZWY8InUiP1EuaHJlZjpRLEU9dCE9bnVsbD94QSh0LGx0KGEsbj8ubm9Db3B5KSk6bnVsbCxjPWF3YWl0IEIucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLEMsZSxyLEUsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/YkEoKSk7cmV0dXJue3JldHVyblZhbHVlOmMucmV0dXJuVmFsdWUsc3Rkb3V0OmMuc3Rkb3V0LHN0ZGVycjpjLnN0ZGVycixvdXRwdXRzOmMub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIGlBPWFuO3ZhciBzbj1udWxsO2Z1bmN0aW9uIGR0KCl7cmV0dXJuIHNufXZhciBvZSxJbj1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vY29tcGFyZS1pbWFnZXNAJHtrQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIFJzKEEpe29lPUF9ZnVuY3Rpb24gRkEoKXtpZih0eXBlb2Ygb2U8InUiKXJldHVybiBvZTtsZXQgQT1EQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpJbn12YXIgYWUsZ249bnVsbDtmdW5jdGlvbiBwdChBKXthZT1BfWZ1bmN0aW9uIHYoKXtpZih0eXBlb2YgYWU8InUiKXJldHVybiBhZTtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpnbn12YXIgXz1udWxsO2FzeW5jIGZ1bmN0aW9uIG10KCl7bGV0IEE9digpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7Xz1hd2FpdCBuQShlKX1mdW5jdGlvbiBPcyhBKXtfPUF9YXN5bmMgZnVuY3Rpb24gaHQoKXtpZihfIT09bnVsbClyZXR1cm4gXy50ZXJtaW5hdGVkJiZhd2FpdCBtdCgpLF87bGV0IEE9ZHQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgbXQoKSxfKX1hc3luYyBmdW5jdGlvbiBDbihBLGU9e2Jhc2VsaW5lSW1hZ2VzOltdfSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9LHt0eXBlOnAuSW1hZ2V9XSx0PVt7dHlwZTpwLkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCIxIiksbi5wdXNoKCIyIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBlLmJhc2VsaW5lSW1hZ2VzPCJ1Iil7aWYoZS5iYXNlbGluZUltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJiYXNlbGluZS1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7bi5wdXNoKCItLWJhc2VsaW5lLWltYWdlcyIpLGF3YWl0IFByb21pc2UuYWxsKGUuYmFzZWxpbmVJbWFnZXMubWFwKGFzeW5jIGM9PntsZXQgdT10Lmxlbmd0aC50b1N0cmluZygpO3QucHVzaCh7dHlwZTpwLkltYWdlLGRhdGE6Y30pLG4ucHVzaCh1KX0pKX10eXBlb2YgZS5kaWZmZXJlbmNlVGhyZXNob2xkPCJ1IiYmbi5wdXNoKCItLWRpZmZlcmVuY2UtdGhyZXNob2xkIixlLmRpZmZlcmVuY2VUaHJlc2hvbGQudG9TdHJpbmcoKSksdHlwZW9mIGUucmFkaXVzVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLXJhZGl1cy10b2xlcmFuY2UiLGUucmFkaXVzVG9sZXJhbmNlLnRvU3RyaW5nKCkpLHR5cGVvZiBlLnNwYXRpYWxUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tc3BhdGlhbC10b2xlcmFuY2UiLGUuc3BhdGlhbFRvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5udW1iZXJPZlBpeGVsc1RvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1udW1iZXItb2YtcGl4ZWxzLXRvbGVyYW5jZSIsZS5udW1iZXJPZlBpeGVsc1RvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5pZ25vcmVCb3VuZGFyeVBpeGVsczwidSImJmUuaWdub3JlQm91bmRhcnlQaXhlbHMmJm4ucHVzaCgiLS1pZ25vcmUtYm91bmRhcnktcGl4ZWxzIik7bGV0IEI9ImNvbXBhcmUtZG91YmxlLWltYWdlcyIse3dlYldvcmtlcjpJLHJldHVyblZhbHVlOmEsc3RkZXJyOlEsb3V0cHV0czpDfT1hd2FpdCBpQShCLG4scix0LHtwaXBlbGluZUJhc2VVcmw6RkEoKSxwaXBlbGluZVdvcmtlclVybDp2KCksd2ViV29ya2VyOmU/LndlYldvcmtlcj8/bnVsbH0pO2lmKGEhPT0wKXRocm93IG5ldyBFcnJvcihRKTtyZXR1cm57d2ViV29ya2VyOkksbWV0cmljczpDWzBdLmRhdGEsZGlmZmVyZW5jZUltYWdlOkNbMV0uZGF0YSxkaWZmZXJlbmNlVWNoYXIyZEltYWdlOkNbMl0uZGF0YX19dmFyIHNlPUNuO2FzeW5jIGZ1bmN0aW9uIEJuKEEsZSl7bGV0IHI9ZTtpZihyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlIT09eS5GbG9hdDY0KXtsZXQgdDtlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1iLlNjYWxhciYmZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09Yi5WYXJpYWJsZUxlbmd0aFZlY3RvciYmKHQ9Yi5WYXJpYWJsZUxlbmd0aFZlY3Rvcikscj1vQShlLHtjb21wb25lbnRUeXBlOnkuRmxvYXQ2NCxwaXhlbFR5cGU6dH0pfWVsc2UgaWYoZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09Yi5TY2FsYXImJmUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PWIuVmFyaWFibGVMZW5ndGhWZWN0b3Ipe2xldCB0PWIuVmFyaWFibGVMZW5ndGhWZWN0b3I7cj1vQShlLHtwaXhlbFR5cGU6dH0pfXJldHVybiByLmltYWdlVHlwZS5waXhlbFR5cGU9PT1iLlZhcmlhYmxlTGVuZ3RoVmVjdG9yJiYocj0oYXdhaXQgQShyKSkubWFnbml0dWRlSW1hZ2UpLHJ9dmFyIEllPUJuO2FzeW5jIGZ1bmN0aW9uIGxuKEEsZT17fSl7bGV0IHI9W3t0eXBlOnAuSW1hZ2V9XSx0PVt7dHlwZTpwLkltYWdlLGRhdGE6QX1dLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpO2xldCBnPSJ2ZWN0b3ItbWFnbml0dWRlIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBodCgpKTtsZXR7d2ViV29ya2VyOkIscmV0dXJuVmFsdWU6SSxzdGRlcnI6YSxvdXRwdXRzOlF9PWF3YWl0IGlBKGcsbixyLHQse3BpcGVsaW5lQmFzZVVybDpGQSgpLHBpcGVsaW5lV29ya2VyVXJsOnYoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpCLG1hZ25pdHVkZUltYWdlOlFbMF0/LmRhdGF9fXZhciBnZT1sbjthc3luYyBmdW5jdGlvbiBjbihBLGU9e2Jhc2VsaW5lSW1hZ2VzOltdfSl7YXN5bmMgZnVuY3Rpb24gcihvKXtsZXR7d2ViV29ya2VyOmcsbWFnbml0dWRlSW1hZ2U6bH09YXdhaXQgZ2Uobyk7cmV0dXJuIGc/LnRlcm1pbmF0ZSgpLHttYWduaXR1ZGVJbWFnZTpsfX1sZXQgdD1hd2FpdCBJZShyLEEpLG49YXdhaXQgUHJvbWlzZS5hbGwoZS5iYXNlbGluZUltYWdlcy5tYXAoYXN5bmMgbz0+YXdhaXQgSWUocixvKSkpLGk9ey4uLmV9O3JldHVybiBpLmJhc2VsaW5lSW1hZ2VzPW4sc2UodCxpKX12YXIgRW49Y247dmFyIHl0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciB0dD1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGV0PShBLEkpPT57Zm9yKHZhciB0IGluIEkpdHQoQSx0LHtnZXQ6SVt0XSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxndD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxydD1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksbUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixpdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOkkscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBvQShBLEkpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksc3QoQSl9fSxvdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBJO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ST17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319Okk9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW0ksW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQUk9bmV3IE1hcChbWyJwcm94eSIsaXRdLFsidGhyb3ciLG90XV0pO2Z1bmN0aW9uIEJ0KEEsSSl7Zm9yKGxldCB0IG9mIEEpaWYoST09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChJKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBvQShBLEk9Z2xvYmFsVGhpcyx0PVsiKiJdKXtJLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFCdCh0LGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTppLHBhdGg6c309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBDPXMuc2xpY2UoMCwtMSkucmVkdWNlKChmLG4pPT5mW25dLEEpLG89cy5yZWR1Y2UoKGYsbik9PmZbbl0sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpRPW87YnJlYWs7Y2FzZSJTRVQiOkNbcy5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9by5hcHBseShDLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IG8oLi4uYSk7UT1hdChmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6bn09bmV3IE1lc3NhZ2VDaGFubmVsO29BKEEsbiksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQyl7UT17dmFsdWU6QyxbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChDPT4oe3ZhbHVlOkMsW2VBXTowfSkpLnRoZW4oQz0+e2xldFtvLGZdPWlBKEMpO0kucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtpZDpyfSksZiksaT09PSJSRUxFQVNFIiYmKEkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksSUkoSSksbUEgaW4gQSYmdHlwZW9mIEFbbUFdPT0iZnVuY3Rpb24iJiZBW21BXSgpKX0pLmNhdGNoKEM9PntsZXRbbyxmXT1pQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7SS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOnJ9KSxmKX0pfSksSS5zdGFydCYmSS5zdGFydCgpfWZ1bmN0aW9uIEN0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIElJKEEpe0N0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gc3QoQSxJKXtyZXR1cm4gcEEoQSxbXSxJKX1mdW5jdGlvbiB0QShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gdEkoQSl7cmV0dXJuIE0oQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57SUkoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IEk9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSxJKSxJPT09MCYmdEkoQSl9KTtmdW5jdGlvbiBudChBLEkpe2xldCB0PShnQS5nZXQoSSl8fDApKzE7Z0Euc2V0KEksdCksckEmJnJBLnJlZ2lzdGVyKEEsSSxBKX1mdW5jdGlvbiBRdChBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBwQShBLEk9W10sdD1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KHQse2dldChyLGkpe2lmKHRBKGUpLGk9PT1ydClyZXR1cm4oKT0+e1F0KGcpLHRJKEEpLGU9ITB9O2lmKGk9PT0idGhlbiIpe2lmKEkubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IHM9TShBLHt0eXBlOiJHRVQiLHBhdGg6SS5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIHMudGhlbi5iaW5kKHMpfXJldHVybiBwQShBLFsuLi5JLGldKX0sc2V0KHIsaSxzKXt0QShlKTtsZXRbYSxRXT1pQShzKTtyZXR1cm4gTShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkksaV0ubWFwKEM9PkMudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixpLHMpe3RBKGUpO2xldCBhPUlbSS5sZW5ndGgtMV07aWYoYT09PWd0KXJldHVybiBNKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gcEEoQSxJLnNsaWNlKDAsLTEpKTtsZXRbUSxDXT1fQShzKTtyZXR1cm4gTShBLHt0eXBlOiJBUFBMWSIscGF0aDpJLm1hcChvPT5vLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxDKS50aGVuKGIpfSxjb25zdHJ1Y3QocixpKXt0QShlKTtsZXRbcyxhXT1fQShpKTtyZXR1cm4gTShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6SS5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6c30sYSkudGhlbihiKX19KTtyZXR1cm4gbnQoZyxBKSxnfWZ1bmN0aW9uIEV0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCBJPUEubWFwKGlBKTtyZXR1cm5bSS5tYXAodD0+dFswXSksRXQoSS5tYXAodD0+dFsxXSkpXX12YXIgZUk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSxJKXtyZXR1cm4gZUkuc2V0KEEsSSksQX1mdW5jdGlvbiBhdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gaUEoQSl7Zm9yKGxldFtJLHRdb2YgQUkpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtlLGddPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpJLHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxlSS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEFJLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gTShBLEksdCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sSSksdCl9KX1mdW5jdGlvbiBjdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLEkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KEksYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpOQX09T2JqZWN0LENBPShBPT5JPT57bGV0IHQ9ZnQuY2FsbChJKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLEk9PkNBKEkpPT09QSksc0E9QT0+ST0+dHlwZW9mIEk9PT1BLHtpc0FycmF5OnF9PUFycmF5LFo9c0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGx0KEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmUyhBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgb0k9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBEdChBKXtsZXQgSTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0k9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOkk9QSYmQS5idWZmZXImJm9JKEEuYnVmZmVyKSxJfXZhciB1dD1zQSgic3RyaW5nIiksUz1zQSgiZnVuY3Rpb24iKSxCST1zQSgibnVtYmVyIiksbkE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixodD1BPT5BPT09ITB8fEE9PT0hMSxCQT1BPT57aWYoQ0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgST1OQShBKTtyZXR1cm4oST09PW51bGx8fEk9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkdD1VKCJEYXRlIikseXQ9VSgiRmlsZSIpLHd0PVUoIkJsb2IiKSxtdD1VKCJGaWxlTGlzdCIpLHB0PUE9Pm5BKEEpJiZTKEEucGlwZSksRnQ9QT0+e2xldCBJO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFMoQS5hcHBlbmQpJiYoKEk9Q0EoQSkpPT09ImZvcm1kYXRhInx8ST09PSJvYmplY3QiJiZTKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFN0PVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJ0PUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsSSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKylJLmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGk9ci5sZW5ndGgscztmb3IoZT0wO2U8aTtlKyspcz1yW2VdLEkuY2FsbChudWxsLEFbc10scyxBKX19ZnVuY3Rpb24gQ0koQSxJKXtJPUkudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxlPXQubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9dFtlXSxJPT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBzST10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLG5JPUE9PiFaKEEpJiZBIT09c0k7ZnVuY3Rpb24gUkEoKXtsZXR7Y2FzZWxlc3M6QX09bkkodGhpcykmJnRoaXN8fHt9LEk9e30sdD0oZSxnKT0+e2xldCByPUEmJkNJKEksZyl8fGc7QkEoSVtyXSkmJkJBKGUpP0lbcl09UkEoSVtyXSxlKTpCQShlKT9JW3JdPVJBKHt9LGUpOnEoZSk/SVtyXT1lLnNsaWNlKCk6SVtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLHQpO3JldHVybiBJfXZhciBOdD0oQSxJLHQse2FsbE93bktleXM6ZX09e30pPT4oVihJLChnLHIpPT57dCYmUyhnKT9BW3JdPVcoZyx0KTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVdD1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEd0PShBLEksdCxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTpJLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LGt0PShBLEksdCxlKT0+e2xldCBnLHIsaSxzPXt9O2lmKEk9SXx8e30sQT09bnVsbClyZXR1cm4gSTtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspaT1nW3JdLCghZXx8ZShpLEEsSSkpJiYhc1tpXSYmKElbaV09QVtpXSxzW2ldPSEwKTtBPXQhPT0hMSYmTkEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsSSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEl9LEx0PShBLEksdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1JLmxlbmd0aDtsZXQgZT1BLmluZGV4T2YoSSx0KTtyZXR1cm4gZSE9PS0xJiZlPT09dH0sSnQ9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHEoQSkpcmV0dXJuIEE7bGV0IEk9QS5sZW5ndGg7aWYoIUJJKEkpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShJKTtmb3IoO0ktLSA+MDspdFtJXT1BW0ldO3JldHVybiB0fSxIdD0oQT0+ST0+QSYmSSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTkEoVWludDhBcnJheSkpLFl0PShBLEkpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTtJLmNhbGwoQSxyWzBdLHJbMV0pfX0sYnQ9KEEsSSk9PntsZXQgdCxlPVtdO2Zvcig7KHQ9QS5leGVjKEkpKSE9PW51bGw7KWUucHVzaCh0KTtyZXR1cm4gZX0sTXQ9VSgiSFRNTEZvcm1FbGVtZW50IikscXQ9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24odCxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJJPSgoe2hhc093blByb3BlcnR5OkF9KT0+KEksdCk9PkEuY2FsbChJLHQpKShPYmplY3QucHJvdG90eXBlKSxLdD1VKCJSZWdFeHAiKSxRST0oQSxJKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307Vih0LChnLHIpPT57bGV0IGk7KGk9SShnLHIsQSkpIT09ITEmJihlW3JdPWl8fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT3Q9QT0+e1FJKEEsKEksdCk9PntpZihTKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW3RdO2lmKFMoZSkpe2lmKEkuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gSSl7SS53cml0YWJsZT0hMTtyZXR1cm59SS5zZXR8fChJLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrdCsiXCciKX0pfX0pfSxUdD0oQSxJKT0+e2xldCB0PXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57dFtyXT0hMH0pfTtyZXR1cm4gcShBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KEkpKSx0fSx4dD0oKT0+e30sUHQ9KEEsSSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOkkpLFNBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsaUk9IjAxMjM0NTY3ODkiLEVJPXtESUdJVDppSSxBTFBIQTpTQSxBTFBIQV9ESUdJVDpTQStTQS50b1VwcGVyQ2FzZSgpK2lJfSxqdD0oQT0xNixJPUVJLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6ZX09STtmb3IoO0EtLTspdCs9SVtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFd0KEEpe3JldHVybiEhKEEmJlMoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBadD1BPT57bGV0IEk9bmV3IEFycmF5KDEwKSx0PShlLGcpPT57aWYobkEoZSkpe2lmKEkuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXtJW2ddPWU7bGV0IHI9cShlKT9bXTp7fTtyZXR1cm4gVihlLChpLHMpPT57bGV0IGE9dChpLGcrMSk7IVooYSkmJihyW3NdPWEpfSksSVtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiB0KEEsMCl9LFZ0PVUoIkFzeW5jRnVuY3Rpb24iKSxYdD1BPT5BJiYobkEoQSl8fFMoQSkpJiZTKEEudGhlbikmJlMoQS5jYXRjaCksQj17aXNBcnJheTpxLGlzQXJyYXlCdWZmZXI6b0ksaXNCdWZmZXI6bHQsaXNGb3JtRGF0YTpGdCxpc0FycmF5QnVmZmVyVmlldzpEdCxpc1N0cmluZzp1dCxpc051bWJlcjpCSSxpc0Jvb2xlYW46aHQsaXNPYmplY3Q6bkEsaXNQbGFpbk9iamVjdDpCQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkdCxpc0ZpbGU6eXQsaXNCbG9iOnd0LGlzUmVnRXhwOkt0LGlzRnVuY3Rpb246Uyxpc1N0cmVhbTpwdCxpc1VSTFNlYXJjaFBhcmFtczpTdCxpc1R5cGVkQXJyYXk6SHQsaXNGaWxlTGlzdDptdCxmb3JFYWNoOlYsbWVyZ2U6UkEsZXh0ZW5kOk50LHRyaW06UnQsc3RyaXBCT006VXQsaW5oZXJpdHM6R3QsdG9GbGF0T2JqZWN0Omt0LGtpbmRPZjpDQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6THQsdG9BcnJheTpKdCxmb3JFYWNoRW50cnk6WXQsbWF0Y2hBbGw6YnQsaXNIVE1MRm9ybTpNdCxoYXNPd25Qcm9wZXJ0eTpySSxoYXNPd25Qcm9wOnJJLHJlZHVjZURlc2NyaXB0b3JzOlFJLGZyZWV6ZU1ldGhvZHM6T3QsdG9PYmplY3RTZXQ6VHQsdG9DYW1lbENhc2U6cXQsbm9vcDp4dCx0b0Zpbml0ZU51bWJlcjpQdCxmaW5kS2V5OkNJLGdsb2JhbDpzSSxpc0NvbnRleHREZWZpbmVkOm5JLEFMUEhBQkVUOkVJLGdlbmVyYXRlU3RyaW5nOmp0LGlzU3BlY0NvbXBsaWFudEZvcm06V3QsdG9KU09OT2JqZWN0Olp0LGlzQXN5bmNGbjpWdCxpc1RoZW5hYmxlOlh0fTtmdW5jdGlvbiBLKEEsSSx0LGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixJJiYodGhpcy5jb2RlPUkpLHQmJih0aGlzLmNvbmZpZz10KSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUIuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkIudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGFJPUsucHJvdG90eXBlLGNJPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2NJW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssY0kpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhSSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsSSx0LGUsZyxyKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoYUkpO3JldHVybiBCLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LHM9PnMhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKGksQS5tZXNzYWdlLEksdCxlLGcpLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24oaSxyKSxpfTt2YXIgbD1LO3ZhciBRQT1udWxsO2Z1bmN0aW9uIFVBKEEpe3JldHVybiBCLmlzUGxhaW5PYmplY3QoQSl8fEIuaXNBcnJheShBKX1mdW5jdGlvbiBsSShBKXtyZXR1cm4gQi5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmSShBLEksdCl7cmV0dXJuIEE/QS5jb25jYXQoSSkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bEkoZyksIXQmJnI/IlsiK2crIl0iOmd9KS5qb2luKHQ/Ii4iOiIiKTpJfWZ1bmN0aW9uIHp0KEEpe3JldHVybiBCLmlzQXJyYXkoQSkmJiFBLnNvbWUoVUEpfXZhciBfdD1CLnRvRmxhdE9iamVjdChCLHt9LG51bGwsZnVuY3Rpb24oSSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEkpfSk7ZnVuY3Rpb24gdnQoQSxJLHQpe2lmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0k9SXx8bmV3KFFBfHxGb3JtRGF0YSksdD1CLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQi5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPXQubWV0YVRva2VucyxnPXQudmlzaXRvcnx8QyxyPXQuZG90cyxpPXQuaW5kZXhlcyxhPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkIuaXNTcGVjQ29tcGxpYW50Rm9ybShJKTtpZighQi5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihCLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZCLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQi5pc0FycmF5QnVmZmVyKEUpfHxCLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQyhFLGMsdSl7bGV0IGQ9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihCLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQi5pc0FycmF5KEUpJiZ6dChFKXx8KEIuaXNGaWxlTGlzdChFKXx8Qi5lbmRzV2l0aChjLCJbXSIpKSYmKGQ9Qi50b0FycmF5KEUpKSlyZXR1cm4gYz1sSShjKSxkLmZvckVhY2goZnVuY3Rpb24oTixJdCl7IShCLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJkkuYXBwZW5kKGk9PT0hMD9mSShbY10sSXQscik6aT09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gVUEoRSk/ITA6KEkuYXBwZW5kKGZJKHUsYyxyKSxRKEUpKSwhMSl9bGV0IG89W10sZj1PYmplY3QuYXNzaWduKF90LHtkZWZhdWx0VmlzaXRvcjpDLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOlVBfSk7ZnVuY3Rpb24gbihFLGMpe2lmKCFCLmlzVW5kZWZpbmVkKEUpKXtpZihvLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO28ucHVzaChFKSxCLmZvckVhY2goRSxmdW5jdGlvbihkLFIpeyghKEIuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmZy5jYWxsKEksZCxCLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmbihkLGM/Yy5jb25jYXQoUik6W1JdKX0pLG8ucG9wKCl9fWlmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbihBKSxJfXZhciBMPXZ0O2Z1bmN0aW9uIERJKEEpe2xldCBJPXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiBJW2VdfSl9ZnVuY3Rpb24gdUkoQSxJKXt0aGlzLl9wYWlycz1bXSxBJiZMKEEsdGhpcyxJKX12YXIgaEk9dUkucHJvdG90eXBlO2hJLmFwcGVuZD1mdW5jdGlvbihJLHQpe3RoaXMuX3BhaXJzLnB1c2goW0ksdF0pfTtoSS50b1N0cmluZz1mdW5jdGlvbihJKXtsZXQgdD1JP2Z1bmN0aW9uKGUpe3JldHVybiBJLmNhbGwodGhpcyxlLERJKX06REk7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gdChnWzBdKSsiPSIrdChnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXVJO2Z1bmN0aW9uICR0KEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSxJLHQpe2lmKCFJKXJldHVybiBBO2xldCBlPXQmJnQuZW5jb2RlfHwkdCxnPXQmJnQuc2VyaWFsaXplLHI7aWYoZz9yPWcoSSx0KTpyPUIuaXNVUkxTZWFyY2hQYXJhbXMoSSk/SS50b1N0cmluZygpOm5ldyBFQShJLHQpLnRvU3RyaW5nKGUpLHIpe2xldCBpPUEuaW5kZXhPZigiJTIzIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIEdBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoSSx0LGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpJLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoSSl7dGhpcy5oYW5kbGVyc1tJXSYmKHRoaXMuaGFuZGxlcnNbSV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChJKXtCLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmSShlKX0pfX0sa0E9R0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZEk9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5ST10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHdJPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG1JPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmRJLEZvcm1EYXRhOnlJLEJsb2I6d0l9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgTEE9e307ZXQoTEEse2hhc0Jyb3dzZXJFbnY6KCk9PnBJLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5JZX0pO3ZhciBwST10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cEkmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxJZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkxBLC4uLm1JfTtmdW5jdGlvbiBKQShBLEkpe3JldHVybiBMKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkIuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKGUsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEkpKX1mdW5jdGlvbiB0ZShBKXtyZXR1cm4gQi5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKEk9PklbMF09PT0iW10iPyIiOklbMV18fElbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCBJPXt9LHQ9T2JqZWN0LmtleXMoQSksZSxnPXQubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9dFtlXSxJW3JdPUFbcl07cmV0dXJuIEl9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gSSh0LGUsZyxyKXtsZXQgaT10W3IrK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBzPU51bWJlci5pc0Zpbml0ZSgraSksYT1yPj10Lmxlbmd0aDtyZXR1cm4gaT0haSYmQi5pc0FycmF5KGcpP2cubGVuZ3RoOmksYT8oQi5oYXNPd25Qcm9wKGcsaSk/Z1tpXT1bZ1tpXSxlXTpnW2ldPWUsIXMpOigoIWdbaV18fCFCLmlzT2JqZWN0KGdbaV0pKSYmKGdbaV09W10pLEkodCxlLGdbaV0scikmJkIuaXNBcnJheShnW2ldKSYmKGdbaV09ZWUoZ1tpXSkpLCFzKX1pZihCLmlzRm9ybURhdGEoQSkmJkIuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gQi5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e0kodGUoZSksZyx0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSxJLHQpe2lmKEIuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihJfHxKU09OLnBhcnNlKShBKSxCLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIEhBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihJLHQpe2xldCBlPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUIuaXNPYmplY3QoSSk7aWYociYmQi5pc0hUTUxGb3JtKEkpJiYoST1uZXcgRm9ybURhdGEoSSkpLEIuaXNGb3JtRGF0YShJKSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQShJKSk6STtpZihCLmlzQXJyYXlCdWZmZXIoSSl8fEIuaXNCdWZmZXIoSSl8fEIuaXNTdHJlYW0oSSl8fEIuaXNGaWxlKEkpfHxCLmlzQmxvYihJKSlyZXR1cm4gSTtpZihCLmlzQXJyYXlCdWZmZXJWaWV3KEkpKXJldHVybiBJLmJ1ZmZlcjtpZihCLmlzVVJMU2VhcmNoUGFyYW1zKEkpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLEkudG9TdHJpbmcoKTtsZXQgcztpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBKQShJLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKHM9Qi5pc0ZpbGVMaXN0KEkpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gTChzP3siZmlsZXNbXSI6SX06SSxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZShJKSk6SX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihJKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8SEEudHJhbnNpdGlvbmFsLGU9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKEkmJkIuaXNTdHJpbmcoSSkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgaT0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShJKX1jYXRjaChzKXtpZihpKXRocm93IHMubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKHMsbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpzfX1yZXR1cm4gSX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKEkpe3JldHVybiBJPj0yMDAmJkk8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntIQS5oZWFkZXJzW0FdPXt9fSk7dmFyIE89SEE7dmFyIGllPUIudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksRkk9QT0+e2xldCBJPXt9LHQsZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2c9aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9aS5zdWJzdHJpbmcoZysxKS50cmltKCksISghdHx8SVt0XSYmaWVbdF0pJiYodD09PSJzZXQtY29va2llIj9JW3RdP0lbdF0ucHVzaChlKTpJW3RdPVtlXTpJW3RdPUlbdF0/SVt0XSsiLCAiK2U6ZSl9KSxJfTt2YXIgU0k9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkIuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIG9lKEEpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPXQuZXhlYyhBKTspSVtlWzFdXT1lWzJdO3JldHVybiBJfXZhciBCZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBZQShBLEksdCxlLGcpe2lmKEIuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsSSx0KTtpZihnJiYoST10KSwhIUIuaXNTdHJpbmcoSSkpe2lmKEIuaXNTdHJpbmcoZSkpcmV0dXJuIEkuaW5kZXhPZihlKSE9PS0xO2lmKEIuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdChJKX19ZnVuY3Rpb24gQ2UoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLChJLHQsZSk9PnQudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBzZShBLEkpe2xldCB0PUIudG9DYW1lbENhc2UoIiAiK0kpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZSt0LHt2YWx1ZTpmdW5jdGlvbihnLHIsaSl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLEksZyxyLGkpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBUPWNsYXNze2NvbnN0cnVjdG9yKEkpe0kmJnRoaXMuc2V0KEkpfXNldChJLHQsZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKHMsYSxRKXtsZXQgQz16KGEpO2lmKCFDKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbz1CLmZpbmRLZXkoZyxDKTsoIW98fGdbb109PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tvXSE9PSExKSYmKGdbb3x8YV09ZkEocykpfWxldCBpPShzLGEpPT5CLmZvckVhY2gocywoUSxDKT0+cihRLEMsYSkpO3JldHVybiBCLmlzUGxhaW5PYmplY3QoSSl8fEkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koSSx0KTpCLmlzU3RyaW5nKEkpJiYoST1JLnRyaW0oKSkmJiFCZShJKT9pKEZJKEkpLHQpOkkhPW51bGwmJnIodCxJLGUpLHRoaXN9Z2V0KEksdCl7aWYoST16KEkpLEkpe2xldCBlPUIuZmluZEtleSh0aGlzLEkpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIXQpcmV0dXJuIGc7aWYodD09PSEwKXJldHVybiBvZShnKTtpZihCLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGcsZSk7aWYoQi5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoSSx0KXtpZihJPXooSSksSSl7bGV0IGU9Qi5maW5kS2V5KHRoaXMsSSk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCF0fHxZQSh0aGlzLHRoaXNbZV0sZSx0KSkpfXJldHVybiExfWRlbGV0ZShJLHQpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKGkpe2lmKGk9eihpKSxpKXtsZXQgcz1CLmZpbmRLZXkoZSxpKTtzJiYoIXR8fFlBKGUsZVtzXSxzLHQpKSYmKGRlbGV0ZSBlW3NdLGc9ITApfX1yZXR1cm4gQi5pc0FycmF5KEkpP0kuZm9yRWFjaChyKTpyKEkpLGd9Y2xlYXIoSSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcyksZT10Lmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9dFtlXTsoIUl8fFlBKHRoaXMsdGhpc1tyXSxyLEksITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZShJKXtsZXQgdD10aGlzLGU9e307cmV0dXJuIEIuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IGk9Qi5maW5kS2V5KGUscik7aWYoaSl7dFtpXT1mQShnKSxkZWxldGUgdFtyXTtyZXR1cm59bGV0IHM9ST9DZShyKTpTdHJpbmcocikudHJpbSgpO3MhPT1yJiZkZWxldGUgdFtyXSx0W3NdPWZBKGcpLGVbc109ITB9KSx0aGlzfWNvbmNhdCguLi5JKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5JKX10b0pTT04oSSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQi5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJih0W2ddPUkmJkIuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtJLHRdKT0+SSsiOiAiK3QpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiB0aGlzP0k6bmV3IHRoaXMoSSl9c3RhdGljIGNvbmNhdChJLC4uLnQpe2xldCBlPW5ldyB0aGlzKEkpO3JldHVybiB0LmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKEkpe2xldCBlPSh0aGlzW1NJXT10aGlzW1NJXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihpKXtsZXQgcz16KGkpO2Vbc118fChzZShnLGkpLGVbc109ITApfXJldHVybiBCLmlzQXJyYXkoSSk/SS5mb3JFYWNoKHIpOnIoSSksdGhpc319O1QuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0IucmVkdWNlRGVzY3JpcHRvcnMoVC5wcm90b3R5cGUsKHt2YWx1ZTpBfSxJKT0+e2xldCB0PUlbMF0udG9VcHBlckNhc2UoKStJLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbdF09ZX19fSk7Qi5mcmVlemVNZXRob2RzKFQpO3ZhciBtPVQ7ZnVuY3Rpb24gXyhBLEkpe2xldCB0PXRoaXN8fE8sZT1JfHx0LGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEIuZm9yRWFjaChBLGZ1bmN0aW9uKHMpe3I9cy5jYWxsKHQscixnLm5vcm1hbGl6ZSgpLEk/SS5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUkkoQSxJLHQpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsSSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUIuaW5oZXJpdHMoUkksbCx7X19DQU5DRUxfXzohMH0pO3ZhciBKPVJJO2Z1bmN0aW9uIGJBKEEsSSx0KXtsZXQgZT10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFlfHxlKHQuc3RhdHVzKT9BKHQpOkkobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX12YXIgTkk9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsSSx0LGUsZyxyKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEkpXTtCLmlzTnVtYmVyKHQpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxCLmlzU3RyaW5nKGUpJiZpLnB1c2goInBhdGg9IitlKSxCLmlzU3RyaW5nKGcpJiZpLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBJPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gST9kZWNvZGVVUklDb21wb25lbnQoSVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBNQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBxQShBLEkpe3JldHVybiBJP0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrSS5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLEkpe3JldHVybiBBJiYhTUEoSSk/cUEoQSxJKTpJfXZhciBVST13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBJPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBpPXI7cmV0dXJuIEkmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IHM9Qi5pc1N0cmluZyhpKT9nKGkpOmk7cmV0dXJuIHMucHJvdG9jb2w9PT1lLnByb3RvY29sJiZzLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEtBKEEpe2xldCBJPS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiBJJiZJWzFdfHwiIn1mdW5jdGlvbiBuZShBLEkpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsaTtyZXR1cm4gST1JIT09dm9pZCAwP0k6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQz1lW3JdO2l8fChpPVEpLHRbZ109YSxlW2ddPVE7bGV0IG89cixmPTA7Zm9yKDtvIT09ZzspZis9dFtvKytdLG89byVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1pPEkpcmV0dXJuO2xldCBuPUMmJlEtQztyZXR1cm4gbj9NYXRoLnJvdW5kKGYqMWUzL24pOnZvaWQgMH19dmFyIEdJPW5lO2Z1bmN0aW9uIGtJKEEsSSl7bGV0IHQ9MCxlPUdJKDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxpPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxzPXItdCxhPWUocyksUT1yPD1pO3Q9cjtsZXQgQz17bG9hZGVkOnIsdG90YWw6aSxwcm9ncmVzczppP3IvaTp2b2lkIDAsYnl0ZXM6cyxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmaSYmUT8oaS1yKS9hOnZvaWQgMCxldmVudDpnfTtDW0k/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShDKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTEk9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOnN9PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBDO2lmKEIuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEM9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1DP0Muc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBvPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7by5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLG8udGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gbigpe2lmKCFvKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBvJiZvLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxkPXtkYXRhOiFpfHxpPT09InRleHQifHxpPT09Impzb24iP28ucmVzcG9uc2VUZXh0Om8ucmVzcG9uc2Usc3RhdHVzOm8uc3RhdHVzLHN0YXR1c1RleHQ6by5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Om99O2JBKGZ1bmN0aW9uKE4pe3QoTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0sZCksbz1udWxsfWlmKCJvbmxvYWRlbmQiaW4gbz9vLm9ubG9hZGVuZD1uOm8ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IW98fG8ucmVhZHlTdGF0ZSE9PTR8fG8uc3RhdHVzPT09MCYmIShvLnJlc3BvbnNlVVJMJiZvLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChuKX0sby5vbmFib3J0PWZ1bmN0aW9uKCl7byYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxvKSksbz1udWxsKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLG8pKSxvPW51bGx9LG8ub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLGQ9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUsZC5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsbykpLG89bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihzJiZCLmlzRnVuY3Rpb24ocykmJihzPXMoQSkpLHN8fHMhPT0hMSYmVUkoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOSS5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBvJiZCLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LGQpe28uc2V0UmVxdWVzdEhlYWRlcihkLHUpfSksQi5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChvLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxpJiZpIT09Impzb24iJiYoby5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmby5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa0koQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZvLnVwbG9hZCYmby51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGtJKEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntvJiYoZSghY3x8Yy50eXBlP25ldyBKKG51bGwsQSxvKTpjKSxvLmFib3J0KCksbz1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1LQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1vLnNlbmQoZ3x8bnVsbCl9KX07dmFyIE9BPXtodHRwOlFBLHhocjpMSX07Qi5mb3JFYWNoKE9BLChBLEkpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6SX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTpJfSl9fSk7dmFyIEpJPUE9PmAtICR7QX1gLEVlPUE9PkIuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1CLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDpJfT1BLHQsZSxnPXt9O2ZvcihsZXQgcj0wO3I8STtyKyspe3Q9QVtyXTtsZXQgaTtpZihlPXQsIUVlKHQpJiYoZT1PQVsoaT1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke2l9XCdgKTtpZihlKWJyZWFrO2dbaXx8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbcyxhXSk9PmBhZGFwdGVyICR7c30gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ST9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKSSkuam9pbihgJTBBYCk6IiAiK0pJKHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6T0F9O2Z1bmN0aW9uIFRBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBKKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFRBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fE8uYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gVEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoVEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEhJPUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIEcoQSxJKXtJPUl8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIGUoUSxDLG8pe3JldHVybiBCLmlzUGxhaW5PYmplY3QoUSkmJkIuaXNQbGFpbk9iamVjdChDKT9CLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm99LFEsQyk6Qi5pc1BsYWluT2JqZWN0KEMpP0IubWVyZ2Uoe30sQyk6Qi5pc0FycmF5KEMpP0Muc2xpY2UoKTpDfWZ1bmN0aW9uIGcoUSxDLG8pe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLG8pfWVsc2UgcmV0dXJuIGUoUSxDLG8pfWZ1bmN0aW9uIHIoUSxDKXtpZighQi5pc1VuZGVmaW5lZChDKSlyZXR1cm4gZSh2b2lkIDAsQyl9ZnVuY3Rpb24gaShRLEMpe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxDKX1mdW5jdGlvbiBzKFEsQyxvKXtpZihvIGluIEkpcmV0dXJuIGUoUSxDKTtpZihvIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOnMsaGVhZGVyczooUSxDKT0+ZyhISShRKSxISShDKSwhMCl9O3JldHVybiBCLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLEkpKSxmdW5jdGlvbihDKXtsZXQgbz1hW0NdfHxnLGY9byhBW0NdLElbQ10sQyk7Qi5pc1VuZGVmaW5lZChmKSYmbyE9PXN8fCh0W0NdPWYpfSksdH12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLEkpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyhJPDE/Im4gIjoiICIpK0F9fSk7dmFyIFlJPXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihJLHQsZSl7ZnVuY3Rpb24gZyhyLGkpe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK2krKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixpLHMpPT57aWYoST09PSExKXRocm93IG5ldyBsKGcoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiFZSVtpXSYmKFlJW2ldPSEwLGNvbnNvbGUud2FybihnKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksST9JKHIsaSxzKTohMH19O2Z1bmN0aW9uIGFlKEEsSSx0KXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLGk9SVtyXTtpZihpKXtsZXQgcz1BW3JdLGE9cz09PXZvaWQgMHx8aShzLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgSD1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IoSSl7dGhpcy5kZWZhdWx0cz1JLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBrQSxyZXNwb25zZTpuZXcga0F9fWFzeW5jIHJlcXVlc3QoSSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoSSx0KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdChJLHQpe3R5cGVvZiBJPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1JKTp0PUl8fHt9LHQ9Ryh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT10O2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKX0sITEpLGchPW51bGwmJihCLmlzRnVuY3Rpb24oZyk/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6SC5mdW5jdGlvbixzZXJpYWxpemU6SC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1yJiZCLm1lcmdlKHIuY29tbW9uLHJbdC5tZXRob2RdKTtyJiZCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksdC5oZWFkZXJzPW0uY29uY2F0KGkscik7bGV0IHM9W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMscy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEMsbz0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLHMpLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQz1Qcm9taXNlLnJlc29sdmUodCk7bzxmOylDPUMudGhlbihFW28rK10sRVtvKytdKTtyZXR1cm4gQ31mPXMubGVuZ3RoO2xldCBuPXQ7Zm9yKG89MDtvPGY7KXtsZXQgRT1zW28rK10sYz1zW28rK107dHJ5e249RShuKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0M9REEuY2FsbCh0aGlzLG4pfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iobz0wLGY9US5sZW5ndGg7bzxmOylDPUMudGhlbihRW28rK10sUVtvKytdKTtyZXR1cm4gQ31nZXRVcmkoSSl7ST1HKHRoaXMuZGVmYXVsdHMsSSk7bGV0IHQ9JChJLmJhc2VVUkwsSS51cmwpO3JldHVybiBYKHQsSS5wYXJhbXMsSS5wYXJhbXNTZXJpYWxpemVyKX19O0IuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oSSl7eC5wcm90b3R5cGVbSV09ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoZXx8e30se21ldGhvZDpJLHVybDp0LGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0IuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKEkpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoc3x8e30se21ldGhvZDpJLGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOml9KSl9fXgucHJvdG90eXBlW0ldPXQoKSx4LnByb3RvdHlwZVtJKyJGb3JtIl09dCghMCl9KTt2YXIgQUE9eDt2YXIgUEE9Y2xhc3MgQXtjb25zdHJ1Y3RvcihJKXtpZih0eXBlb2YgSSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe3Q9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixpPW5ldyBQcm9taXNlKHM9PntlLnN1YnNjcmliZShzKSxyPXN9KS50aGVuKGcpO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LGl9LEkoZnVuY3Rpb24ocixpLHMpe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEoocixpLHMpLHQoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoSSl7aWYodGhpcy5yZWFzb24pe0kodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goSSk6dGhpcy5fbGlzdGVuZXJzPVtJXX11bnN1YnNjcmliZShJKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihJKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IEk7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe0k9Z30pLGNhbmNlbDpJfX19LGJJPVBBO2Z1bmN0aW9uIGpBKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBXQShBKXtyZXR1cm4gQi5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgWkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFpBKS5mb3JFYWNoKChbQSxJXSk9PntaQVtJXT1BfSk7dmFyIE1JPVpBO2Z1bmN0aW9uIHFJKEEpe2xldCBJPW5ldyBBQShBKSx0PVcoQUEucHJvdG90eXBlLnJlcXVlc3QsSSk7cmV0dXJuIEIuZXh0ZW5kKHQsQUEucHJvdG90eXBlLEkse2FsbE93bktleXM6ITB9KSxCLmV4dGVuZCh0LEksbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxSShHKEEsZykpfSx0fXZhciBoPXFJKE8pO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUo7aC5DYW5jZWxUb2tlbj1iSTtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1MO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbihJKXtyZXR1cm4gUHJvbWlzZS5hbGwoSSl9O2guc3ByZWFkPWpBO2guaXNBeGlvc0Vycm9yPVdBO2gubWVyZ2VDb25maWc9RztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShCLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TUk7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOm9pLEF4aW9zRXJyb3I6QmksQ2FuY2VsZWRFcnJvcjpDaSxpc0NhbmNlbDpzaSxDYW5jZWxUb2tlbjpuaSxWRVJTSU9OOlFpLGFsbDpFaSxDYW5jZWw6YWksaXNBeGlvc0Vycm9yOmNpLHNwcmVhZDpmaSx0b0Zvcm1EYXRhOmxpLEF4aW9zSGVhZGVyczpEaSxIdHRwU3RhdHVzQ29kZTp1aSxmb3JtVG9KU09OOmhpLGdldEFkYXB0ZXI6ZGksbWVyZ2VDb25maWc6eWl9PWRBO3ZhciBJQSxrLFhBLFZBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7WEE9bmV3IFVpbnQ4QXJyYXkoay5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gSUF8fCh0eXBlb2YgZmV0Y2g8InUiP0lBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS0kpLnRoZW4oST0+SS5hcnJheUJ1ZmZlcigpKS50aGVuKEk9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEksVkEpKS50aGVuKHRoaXMuX2luaXQpOklBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEtJLCJiYXNlNjQiKSxWQSkudGhlbih0aGlzLl9pbml0KSxJQSl9X2luaXQoSSl7az1JLmluc3RhbmNlLFZBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZShJLHQ9MCl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9SS5ieXRlTGVuZ3RoLGc9ay5leHBvcnRzLm1hbGxvYyhlKTtYQS5zZXQoSSxnKSx0PXR8fE51bWJlcihrLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1rLmV4cG9ydHMubWFsbG9jKHQpLGk9ay5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLHQsZyxlKSxzPVhBLnNsaWNlKHIscitpKTtyZXR1cm4gay5leHBvcnRzLmZyZWUoZyksay5leHBvcnRzLmZyZWUociksc319LEtJPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE9JPW5ldyB5QSxUST0hMTthc3luYyBmdW5jdGlvbiBjZShBLEksdCl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7SX0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSk7VEl8fChhd2FpdCBPSS5pbml0KCksVEk9ITApO2xldCBzPU9JLmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgeEk9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSxJLHQpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcseEkoZSxJLHQpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgUEk9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFA9dWU7ZnVuY3Rpb24gaGUoQSxJKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDg6e3Q9bmV3IEludDhBcnJheShJKTticmVha31jYXNlIHAuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShJKTticmVha31jYXNlIHAuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoSSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFk9aGU7dmFyIFpJPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGpJPW5ldyBUZXh0RW5jb2RlcixXST1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSxJKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3BlbihJLHQuZmxhZ3MpLHI9QS5mc19zdGF0KEkpLnNpemUsaT1udWxsO1pJP2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOmk9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBzPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQoZSxzLDAsciwwKSxBLmZzX2Nsb3NlKGUpLHN9ZnVuY3Rpb24gVkkoQSxJLHQpe2xldCBlPW51bGw7Wkk/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6ZT1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSx0KTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiB5KEEsSSx0LGUpe2xldCBnPTA7cmV0dXJuIEkhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGUsSS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShJLmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gaihBLEksdCl7bGV0IGU9SlNPTi5zdHJpbmdpZnkoSSksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gRihBLEksdCxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLGk9VkkoQSxnLHIpO3JldHVybiBZKGUsaS5idWZmZXIpfWZ1bmN0aW9uIHpBKEEsSSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxJXSksZT1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLEksdCxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxDKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG89akkuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG89akkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG89US5kYXRhLmRhdGEsZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG89US5kYXRhLGY9eShBLG8uZGF0YSxDLDApLG49eShBLG8uZGlyZWN0aW9uLEMsMSksRT10eXBlb2Ygby5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShvLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOm8uaW1hZ2VUeXBlLG5hbWU6by5uYW1lLG9yaWdpbjpvLm9yaWdpbixzcGFjaW5nOm8uc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsc2l6ZTpvLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtqKEEsYyxDKTticmVha31jYXNlIEQuTWVzaDp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby5jZWxscyxDLDEpLEU9eShBLG8ucG9pbnREYXRhLEMsMiksYz15KEEsby5jZWxsRGF0YSxDLDMpLHU9e21lc2hUeXBlOm8ubWVzaFR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpvLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsY2VsbEJ1ZmZlclNpemU6by5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtqKEEsdSxDKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8udmVydGljZXMsQywxKSxFPXkoQSxvLmxpbmVzLEMsMiksYz15KEEsby5wb2x5Z29ucyxDLDMpLHU9eShBLG8udHJpYW5nbGVTdHJpcHMsQyw0KSxkPXkoQSxvLnBvaW50RGF0YSxDLDUpLFI9eShBLG8ucG9pbnREYXRhLEMsNiksTj17cG9seURhdGFUeXBlOm8ucG9seURhdGFUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpvLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxsaW5lc0J1ZmZlclNpemU6by5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOm8ucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpvLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtqKEEsTixDKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKEkuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCkscz1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJnI9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oUSxDKXtsZXQgbz1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz17ZGF0YTpXSS5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289SlNPTi5wYXJzZShXSS5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSk7bz17ZGF0YTpWSShBLG4sRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBuPXpBKEEsQyk7bi5kYXRhPUYoQSxDLDAsbi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksbi5kaXJlY3Rpb249RihBLEMsMSxQLkZsb2F0NjQpLG4ubWV0YWRhdGE9bmV3IE1hcChuLm1ldGFkYXRhKSxvPW47YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsbi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOm4ucG9pbnRzPVkobi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbHM+MD9uLmNlbGxzPUYoQSxDLDEsbi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6bi5jZWxscz1ZKG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQywyLG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQywzLG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsUC5GbG9hdDMyKTpuLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LG4udmVydGljZXNCdWZmZXJTaXplPjA/bi52ZXJ0aWNlcz1GKEEsQywxLHAuVUludDMyKTpuLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxuLmxpbmVzQnVmZmVyU2l6ZT4wP24ubGluZXM9RihBLEMsMixwLlVJbnQzMik6bi5saW5lcz1uZXcgVWludDMyQXJyYXksbi5wb2x5Z29uc0J1ZmZlclNpemU+MD9uLnBvbHlnb25zPUYoQSxDLDMscC5VSW50MzIpOm4ucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LG4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bi50cmlhbmdsZVN0cmlwcz1GKEEsQyw0LHAuVUludDMyKTpuLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQyw1LG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDYsbi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTpvfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6aSxzdGRlcnI6cyxvdXRwdXRzOmF9fXZhciBYST15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsSSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSxJKTtnIT09bnVsbCYmdC5wdXNoKGcpfXJldHVybiB0fWZ1bmN0aW9uIHBlKEEsSSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksd2UmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkk/dDp0LnNsaWNlKDApfXZhciB6ST1tZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX0k9RmU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZJPVNlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkST1SZTthc3luYyBmdW5jdGlvbiBOZShBLEksdCxlKXtsZXQgZz1YSShBLEksdCxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8aS50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKHMpfWVsc2UgaWYoaS50eXBlPT09RC5JbWFnZSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi5fSShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELk1lc2gpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4udkkocykpfWVsc2UgaWYoaS50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi4kSShzKSl9fSksRkEoZyx6SShyLCEwKSl9dmFyIEF0PU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSxJLHQsZSxnLHIpe2xldCBpPWF3YWl0IFBJKEEsSSxyKTtyZXR1cm4gYXdhaXQgQXQoaSx0LGUsZyl9fTtvQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztwdCh5dCk7ZXhwb3J0e3NlIGFzIGNvbXBhcmVEb3VibGVJbWFnZXMsRW4gYXMgY29tcGFyZUltYWdlcyxodCBhcyBnZXREZWZhdWx0V2ViV29ya2VyLHYgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRkEgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxPcyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLHB0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLFJzIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsZ2UgYXMgdmVjdG9yTWFnbml0dWRlLGtBIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py index a9c316e20..6c235c596 100644 --- a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py @@ -1 +1 @@ -__version__ = "5.1.1" +__version__ = "5.2.0" diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm index 55a457274..acaf36019 100755 Binary files a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm and b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm differ diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm index 3f94878c0..e069d75c9 100755 Binary files a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm and b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm differ diff --git a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py index a9c316e20..6c235c596 100644 --- a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py @@ -1 +1 @@ -__version__ = "5.1.1" +__version__ = "5.2.0" diff --git a/packages/compare-images/typescript/README.md b/packages/compare-images/typescript/README.md index c04d96b7c..b43e04d64 100644 --- a/packages/compare-images/typescript/README.md +++ b/packages/compare-images/typescript/README.md @@ -4,9 +4,9 @@ > Compare images with a tolerance for regression testing. -[👨‍💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/itk-wasm/compare-images/ts/app/ ':include :type=iframe width=100% height=800px') +[👨‍💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/ITK-Wasm/compare-images/ts/app/ ':include :type=iframe width=100% height=800px') -[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/itk-wasm/compare-images/ts/docs/) +[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/ITK-Wasm/compare-images/ts/docs/) ## Installation diff --git a/packages/compare-images/typescript/package.json b/packages/compare-images/typescript/package.json index b63046140..8aceb5d5b 100644 --- a/packages/compare-images/typescript/package.json +++ b/packages/compare-images/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-images", - "version": "5.1.1", + "version": "5.2.0", "packageManager": "pnpm@9.6.0", "description": "Compare images with a tolerance for regression testing.", "type": "module", diff --git a/packages/compare-images/typescript/src/index-worker-embedded.ts b/packages/compare-images/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/compare-images/typescript/src/index-worker-embedded.ts +++ b/packages/compare-images/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js' diff --git a/packages/compare-meshes/typescript/package.json b/packages/compare-meshes/typescript/package.json index b999c7749..75928de3d 100644 --- a/packages/compare-meshes/typescript/package.json +++ b/packages/compare-meshes/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-meshes", - "version": "0.3.0", + "version": "0.4.0", "packageManager": "pnpm@9.6.0", "description": "Compare meshes and polydata for regression testing.", "type": "module", diff --git a/packages/compare-meshes/typescript/src/index-worker-embedded.ts b/packages/compare-meshes/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/compare-meshes/typescript/src/index-worker-embedded.ts +++ b/packages/compare-meshes/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js' diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py index 11731085c..88c513ea3 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py @@ -1 +1 @@ -__version__ = "3.2.0" +__version__ = "3.3.0" diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py index e4e48b952..66868ff25 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_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,dmFyIFV0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgTnQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlVdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEd0PSIzLjIuMCIsVUE9R3Q7dmFyIFR0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0seT1UdDt2YXIgTHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFM9THQ7ZnVuY3Rpb24geHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHkuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIHkuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIHkuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgeS5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFMuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIGI9eHQ7dmFyIFB0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sVD1QdDt2YXIgTkE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHQ9eS5VSW50OCxyPVQuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9dCx0aGlzLnBpeGVsVHlwZT1yLHRoaXMuY29tcG9uZW50cz1ufX0sdWU9TkE7ZnVuY3Rpb24gT3QoQSxlLHQscixuKXtBW3IrdCplXT1ufXZhciBmZT1PdDt2YXIgR0E9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHVlKXt0aGlzLmltYWdlVHlwZT1lO2xldCB0PWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheSh0KSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkodCksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSh0KnQpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCByPTA7cjx0O3IrKylmZSh0aGlzLmRpcmVjdGlvbix0LHIsciwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHQpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LFRBPUdBO3ZhciBMQT1jbGFzc3tkaW1lbnNpb247cG9pbnRDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRzO2NlbGxDb21wb25lbnRUeXBlO2NlbGxQaXhlbENvbXBvbmVudFR5cGU7Y2VsbFBpeGVsVHlwZTtjZWxsUGl4ZWxDb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PVMuRmxvYXQzMixyPVMuRmxvYXQzMixuPVQuU2NhbGFyLG89MSxpPXkuSW50MzIsST1TLkZsb2F0MzIsbD1ULlNjYWxhcixCPTEpe3RoaXMuZGltZW5zaW9uPWUsdGhpcy5wb2ludENvbXBvbmVudFR5cGU9dCx0aGlzLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlPXIsdGhpcy5wb2ludFBpeGVsVHlwZT1uLHRoaXMucG9pbnRQaXhlbENvbXBvbmVudHM9byx0aGlzLmNlbGxDb21wb25lbnRUeXBlPWksdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRUeXBlPUksdGhpcy5jZWxsUGl4ZWxUeXBlPWwsdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRzPUJ9fSxwZT1MQTt2YXIgeEE9Y2xhc3N7bWVzaFR5cGU7bmFtZT0iTWVzaCI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO251bWJlck9mUG9pbnRQaXhlbHM7cG9pbnREYXRhO251bWJlck9mQ2VsbHM7Y2VsbHM7Y2VsbEJ1ZmZlclNpemU7bnVtYmVyT2ZDZWxsUGl4ZWxzO2NlbGxEYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHBlKXt0aGlzLm1lc2hUeXBlPWUsdGhpcy5uYW1lPSJtZXNoIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxscz0wLHRoaXMuY2VsbEJ1ZmZlclNpemU9MCx0aGlzLmNlbGxzPW51bGwsdGhpcy5udW1iZXJPZkNlbGxQaXhlbHM9MCx0aGlzLmNlbGxEYXRhPW51bGx9fSxQQT14QTt2YXIgT0E9Y2xhc3N7cG9pbnRQaXhlbENvbXBvbmVudFR5cGU7cG9pbnRQaXhlbFR5cGU7cG9pbnRQaXhlbENvbXBvbmVudHM7Y2VsbFBpeGVsQ29tcG9uZW50VHlwZTtjZWxsUGl4ZWxUeXBlO2NlbGxQaXhlbENvbXBvbmVudHM7Y29uc3RydWN0b3IoZT1TLkZsb2F0MzIsdD1ULlNjYWxhcixyPTEsbj1TLkZsb2F0MzIsbz1ULlNjYWxhcixpPTEpe3RoaXMucG9pbnRQaXhlbENvbXBvbmVudFR5cGU9ZSx0aGlzLnBvaW50UGl4ZWxUeXBlPXQsdGhpcy5wb2ludFBpeGVsQ29tcG9uZW50cz1yLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50VHlwZT1uLHRoaXMuY2VsbFBpeGVsVHlwZT1vLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50cz1pfX0sZGU9T0E7dmFyIEpBPWNsYXNze3BvbHlEYXRhVHlwZTtuYW1lPSJQb2x5RGF0YSI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO3ZlcnRpY2VzQnVmZmVyU2l6ZTt2ZXJ0aWNlcztsaW5lc0J1ZmZlclNpemU7bGluZXM7cG9seWdvbnNCdWZmZXJTaXplO3BvbHlnb25zO3RyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTt0cmlhbmdsZVN0cmlwcztudW1iZXJPZlBvaW50UGl4ZWxzO3BvaW50RGF0YTtudW1iZXJPZkNlbGxQaXhlbHM7Y2VsbERhdGE7Y29uc3RydWN0b3IoZT1uZXcgZGUpe3RoaXMucG9seURhdGFUeXBlPWUsdGhpcy5wb2x5RGF0YVR5cGU9ZSx0aGlzLm5hbWU9IlBvbHlEYXRhIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSx0aGlzLnZlcnRpY2VzQnVmZmVyU2l6ZT0wLHRoaXMudmVydGljZXM9bnVsbCx0aGlzLmxpbmVzQnVmZmVyU2l6ZT0wLHRoaXMubGluZXM9bnVsbCx0aGlzLnBvbHlnb25zQnVmZmVyU2l6ZT0wLHRoaXMucG9seWdvbnM9bnVsbCx0aGlzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT0wLHRoaXMudHJpYW5nbGVTdHJpcHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxsUGl4ZWxzPTAsdGhpcy5jZWxsRGF0YT1udWxsfX0sTUE9SkE7dmFyIEp0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0scD1KdDt2YXIgeWU9U3ltYm9sKCJDb21saW5rLnByb3h5IiksTXQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikscUE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLEhBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxJQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksaGU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsSHQ9e2NhbkhhbmRsZTpBPT5oZShBKSYmQVt5ZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gRGUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEtBKEEpfX0sWXQ9e2NhbkhhbmRsZTpBPT5oZShBKSYmSUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHdlPW5ldyBNYXAoW1sicHJveHkiLEh0XSxbInRocm93IixZdF1dKTtmdW5jdGlvbiBxdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gRGUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighcXQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmkscGF0aDpJfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGw9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoTyksQjt0cnl7bGV0IGc9SS5zbGljZSgwLC0xKS5yZWR1Y2UoKFEsQyk9PlFbQ10sQSkscz1JLnJlZHVjZSgoUSxDKT0+UVtDXSxBKTtzd2l0Y2goaSl7Y2FzZSJHRVQiOkI9czticmVhaztjYXNlIlNFVCI6Z1tJLnNsaWNlKC0xKVswXV09TyhuLmRhdGEudmFsdWUpLEI9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qj1zLmFwcGx5KGcsbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgUT1uZXcgcyguLi5sKTtCPV90KFEpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6USxwb3J0MjpDfT1uZXcgTWVzc2FnZUNoYW5uZWw7RGUoQSxDKSxCPVdBKFEsW1FdKX1icmVhaztjYXNlIlJFTEVBU0UiOkI9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChnKXtCPXt2YWx1ZTpnLFtJQV06MH19UHJvbWlzZS5yZXNvbHZlKEIpLmNhdGNoKGc9Pih7dmFsdWU6ZyxbSUFdOjB9KSkudGhlbihnPT57bGV0W3MsUV09QkEoZyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxRKSxpPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxTZShlKSxIQSBpbiBBJiZ0eXBlb2YgQVtIQV09PSJmdW5jdGlvbiImJkFbSEFdKCkpfSkuY2F0Y2goZz0+e2xldFtzLFFdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbSUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6b30pLFEpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gS3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gU2UoQSl7S3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBLQShBLGUpe3JldHVybiBZQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gSihBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntTZShBKX0pfXZhciBnQT1uZXcgV2Vha01hcCxDQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oZ0EuZ2V0KEEpfHwwKS0xO2dBLnNldChBLGUpLGU9PT0wJiZiZShBKX0pO2Z1bmN0aW9uIFd0KEEsZSl7bGV0IHQ9KGdBLmdldChlKXx8MCkrMTtnQS5zZXQoZSx0KSxDQSYmQ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIHZ0KEEpe0NBJiZDQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIFlBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KG8saSl7aWYoYUEociksaT09PXFBKXJldHVybigpPT57dnQobiksYmUoQSkscj0hMH07aWYoaT09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgST1KKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihPKTtyZXR1cm4gSS50aGVuLmJpbmQoSSl9cmV0dXJuIFlBKEEsWy4uLmUsaV0pfSxzZXQobyxpLEkpe2FBKHIpO2xldFtsLEJdPUJBKEkpO3JldHVybiBKKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxpXS5tYXAoZz0+Zy50b1N0cmluZygpKSx2YWx1ZTpsfSxCKS50aGVuKE8pfSxhcHBseShvLGksSSl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09TXQpcmV0dXJuIEooQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihPKTtpZihsPT09ImJpbmQiKXJldHVybiBZQShBLGUuc2xpY2UoMCwtMSkpO2xldFtCLGddPW1lKEkpO3JldHVybiBKKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKHM9PnMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkJ9LGcpLnRoZW4oTyl9LGNvbnN0cnVjdChvLGkpe2FBKHIpO2xldFtJLGxdPW1lKGkpO3JldHVybiBKKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChCPT5CLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpJfSxsKS50aGVuKE8pfX0pO3JldHVybiBXdChuLEEpLG59ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gbWUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxqdChlLm1hcCh0PT50WzFdKSldfXZhciBrZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBXQShBLGUpe3JldHVybiBrZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIF90KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1t5ZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiB3ZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGtlLmdldChBKXx8W11dfWZ1bmN0aW9uIE8oQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gd2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBKKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPXp0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGkpeyFpLmRhdGF8fCFpLmRhdGEuaWR8fGkuZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHIoaS5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIHp0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6VnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOl9BfT1PYmplY3QsY0E9KEE9PmU9PntsZXQgdD1WdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTj1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Y0EoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6TX09QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gWnQoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZSKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBOZT1OKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIFh0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmTmUoQS5idWZmZXIpLGV9dmFyICR0PUVBKCJzdHJpbmciKSxSPUVBKCJmdW5jdGlvbiIpLEdlPUVBKCJudW1iZXIiKSxRQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLEFyPUE9PkE9PT0hMHx8QT09PSExLGxBPUE9PntpZihjQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPV9BKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGVyPU4oIkRhdGUiKSx0cj1OKCJGaWxlIikscnI9TigiQmxvYiIpLG5yPU4oIkZpbGVMaXN0Iiksb3I9QT0+UUEoQSkmJlIoQS5waXBlKSxpcj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8UihBLmFwcGVuZCkmJigoZT1jQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlIoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sc3I9TigiVVJMU2VhcmNoUGFyYW1zIiksYXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxNKEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxJO2ZvcihyPTA7cjxpO3IrKylJPW9bcl0sZS5jYWxsKG51bGwsQVtJXSxJLEEpfX1mdW5jdGlvbiBUZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIExlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwseGU9QT0+IVgoQSkmJkEhPT1MZTtmdW5jdGlvbiBqQSgpe2xldHtjYXNlbGVzczpBfT14ZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG4pPT57bGV0IG89QSYmVGUoZSxuKXx8bjtsQShlW29dKSYmbEEocik/ZVtvXT1qQShlW29dLHIpOmxBKHIpP2Vbb109akEoe30scik6TShyKT9lW29dPXIuc2xpY2UoKTplW29dPXJ9O2ZvcihsZXQgcj0wLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIElyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG4sbyk9Pnt0JiZSKG4pP0Fbb109WihuLHQpOkFbb109bn0se2FsbE93bktleXM6cn0pLEEpLGdyPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksQ3I9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sQnI9KEEsZSx0LHIpPT57bGV0IG4sbyxpLEk9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89bi5sZW5ndGg7by0tID4wOylpPW5bb10sKCFyfHxyKGksQSxlKSkmJiFJW2ldJiYoZVtpXT1BW2ldLElbaV09ITApO0E9dCE9PSExJiZfQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sbHI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxjcj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoTShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighR2UoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LEVyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZfQShVaW50OEFycmF5KSksUXI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgbz1uLnZhbHVlO2UuY2FsbChBLG9bMF0sb1sxXSl9fSx1cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxmcj1OKCJIVE1MRm9ybUVsZW1lbnQiKSxwcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRmU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLGRyPU4oIlJlZ0V4cCIpLFBlPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxtcj1BPT57UGUoQSwoZSx0KT0+e2lmKFIoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoUihyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSx5cj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4gTShBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxocj0oKT0+e30sd3I9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLHZBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsVWU9IjAxMjM0NTY3ODkiLE9lPXtESUdJVDpVZSxBTFBIQTp2QSxBTFBIQV9ESUdJVDp2QSt2QS50b1VwcGVyQ2FzZSgpK1VlfSxEcj0oQT0xNixlPU9lLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFNyKEEpe3JldHVybiEhKEEmJlIoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBicj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG4pPT57aWYoUUEocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW25dPXI7bGV0IG89TShyKT9bXTp7fTtyZXR1cm4gJChyLChpLEkpPT57bGV0IGw9dChpLG4rMSk7IVgobCkmJihvW0ldPWwpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGtyPU4oIkFzeW5jRnVuY3Rpb24iKSxScj1BPT5BJiYoUUEoQSl8fFIoQSkpJiZSKEEudGhlbikmJlIoQS5jYXRjaCksYT17aXNBcnJheTpNLGlzQXJyYXlCdWZmZXI6TmUsaXNCdWZmZXI6WnQsaXNGb3JtRGF0YTppcixpc0FycmF5QnVmZmVyVmlldzpYdCxpc1N0cmluZzokdCxpc051bWJlcjpHZSxpc0Jvb2xlYW46QXIsaXNPYmplY3Q6UUEsaXNQbGFpbk9iamVjdDpsQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTplcixpc0ZpbGU6dHIsaXNCbG9iOnJyLGlzUmVnRXhwOmRyLGlzRnVuY3Rpb246Uixpc1N0cmVhbTpvcixpc1VSTFNlYXJjaFBhcmFtczpzcixpc1R5cGVkQXJyYXk6RXIsaXNGaWxlTGlzdDpucixmb3JFYWNoOiQsbWVyZ2U6akEsZXh0ZW5kOklyLHRyaW06YXIsc3RyaXBCT006Z3IsaW5oZXJpdHM6Q3IsdG9GbGF0T2JqZWN0OkJyLGtpbmRPZjpjQSxraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6bHIsdG9BcnJheTpjcixmb3JFYWNoRW50cnk6UXIsbWF0Y2hBbGw6dXIsaXNIVE1MRm9ybTpmcixoYXNPd25Qcm9wZXJ0eTpGZSxoYXNPd25Qcm9wOkZlLHJlZHVjZURlc2NyaXB0b3JzOlBlLGZyZWV6ZU1ldGhvZHM6bXIsdG9PYmplY3RTZXQ6eXIsdG9DYW1lbENhc2U6cHIsbm9vcDpocix0b0Zpbml0ZU51bWJlcjp3cixmaW5kS2V5OlRlLGdsb2JhbDpMZSxpc0NvbnRleHREZWZpbmVkOnhlLEFMUEhBQkVUOk9lLGdlbmVyYXRlU3RyaW5nOkRyLGlzU3BlY0NvbXBsaWFudEZvcm06U3IsdG9KU09OT2JqZWN0OmJyLGlzQXN5bmNGbjprcixpc1RoZW5hYmxlOlJyfTtmdW5jdGlvbiBIKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfWEuaW5oZXJpdHMoSCxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmEudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIEplPUgucHJvdG90eXBlLE1lPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e01lW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEgsTWUpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShKZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtILmZyb209KEEsZSx0LHIsbixvKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoSmUpO3JldHVybiBhLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LEk9PkkhPT0iaXNBeGlvc0Vycm9yIiksSC5jYWxsKGksQS5tZXNzYWdlLGUsdCxyLG4pLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oaSxvKSxpfTt2YXIgZj1IO3ZhciB1QT1udWxsO2Z1bmN0aW9uIHpBKEEpe3JldHVybiBhLmlzUGxhaW5PYmplY3QoQSl8fGEuaXNBcnJheShBKX1mdW5jdGlvbiBZZShBKXtyZXR1cm4gYS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBIZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4sbyl7cmV0dXJuIG49WWUobiksIXQmJm8/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIEZyKEEpe3JldHVybiBhLmlzQXJyYXkoQSkmJiFBLnNvbWUoekEpfXZhciBVcj1hLnRvRmxhdE9iamVjdChhLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gTnIoQSxlLHQpe2lmKCFhLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KHVBfHxGb3JtRGF0YSksdD1hLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hYS5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8ZyxvPXQuZG90cyxpPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmEuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighYS5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQihFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihhLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFsJiZhLmlzQmxvYihFKSl0aHJvdyBuZXcgZigiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYS5pc0FycmF5QnVmZmVyKEUpfHxhLmlzVHlwZWRBcnJheShFKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gZyhFLGMsdSl7bGV0IGQ9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihhLmVuZHNXaXRoKGMsInt9IikpYz1yP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoYS5pc0FycmF5KEUpJiZGcihFKXx8KGEuaXNGaWxlTGlzdChFKXx8YS5lbmRzV2l0aChjLCJbXSIpKSYmKGQ9YS50b0FycmF5KEUpKSlyZXR1cm4gYz1ZZShjKSxkLmZvckVhY2goZnVuY3Rpb24oVSxGdCl7IShhLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9IZShbY10sRnQsbyk6aT09PW51bGw/YzpjKyJbXSIsQihVKSl9KSwhMX1yZXR1cm4gekEoRSk/ITA6KGUuYXBwZW5kKEhlKHUsYyxvKSxCKEUpKSwhMSl9bGV0IHM9W10sUT1PYmplY3QuYXNzaWduKFVyLHtkZWZhdWx0VmlzaXRvcjpnLGNvbnZlcnRWYWx1ZTpCLGlzVmlzaXRhYmxlOnpBfSk7ZnVuY3Rpb24gQyhFLGMpe2lmKCFhLmlzVW5kZWZpbmVkKEUpKXtpZihzLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO3MucHVzaChFKSxhLmZvckVhY2goRSxmdW5jdGlvbihkLEYpeyghKGEuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmbi5jYWxsKGUsZCxhLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsYyxRKSk9PT0hMCYmQyhkLGM/Yy5jb25jYXQoRik6W0ZdKX0pLHMucG9wKCl9fWlmKCFhLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQyhBKSxlfXZhciBMPU5yO2Z1bmN0aW9uIHFlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gS2UoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZMKEEsdGhpcyxlKX12YXIgV2U9S2UucHJvdG90eXBlO1dlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtXZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLHFlKX06cWU7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIGZBPUtlO2Z1bmN0aW9uIEdyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8R3Isbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1hLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgZkEoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgVkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe2EuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxaQT1WQTt2YXIgcEE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB2ZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6ZkE7dmFyIGplPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgX2U9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgemU9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6dmUsRm9ybURhdGE6amUsQmxvYjpfZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBYQT17fTtOdChYQSx7aGFzQnJvd3NlckVudjooKT0+VmUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5UcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PkxyfSk7dmFyIFZlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFRyPShBPT5WZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLExyPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uWEEsLi4uemV9O2Z1bmN0aW9uICRBKEEsZSl7cmV0dXJuIEwoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixuLG8pe3JldHVybiB3LmlzTm9kZSYmYS5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIHhyKEEpe3JldHVybiBhLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gUHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG49dC5sZW5ndGgsbztmb3Iocj0wO3I8bjtyKyspbz10W3JdLGVbb109QVtvXTtyZXR1cm4gZX1mdW5jdGlvbiBPcihBKXtmdW5jdGlvbiBlKHQscixuLG8pe2xldCBpPXRbbysrXTtpZihpPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IEk9TnVtYmVyLmlzRmluaXRlKCtpKSxsPW8+PXQubGVuZ3RoO3JldHVybiBpPSFpJiZhLmlzQXJyYXkobik/bi5sZW5ndGg6aSxsPyhhLmhhc093blByb3AobixpKT9uW2ldPVtuW2ldLHJdOm5baV09ciwhSSk6KCghbltpXXx8IWEuaXNPYmplY3QobltpXSkpJiYobltpXT1bXSksZSh0LHIsbltpXSxvKSYmYS5pc0FycmF5KG5baV0pJiYobltpXT1QcihuW2ldKSksIUkpfWlmKGEuaXNGb3JtRGF0YShBKSYmYS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBhLmZvckVhY2hFbnRyeShBLChyLG4pPT57ZSh4cihyKSxuLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBkQT1PcjtmdW5jdGlvbiBKcihBLGUsdCl7aWYoYS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLGEudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgQWU9e3RyYW5zaXRpb25hbDpwQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89YS5pc09iamVjdChlKTtpZihvJiZhLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksYS5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KGRBKGUpKTplO2lmKGEuaXNBcnJheUJ1ZmZlcihlKXx8YS5pc0J1ZmZlcihlKXx8YS5pc1N0cmVhbShlKXx8YS5pc0ZpbGUoZSl8fGEuaXNCbG9iKGUpKXJldHVybiBlO2lmKGEuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKGEuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBJO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuICRBKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoST1hLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKEk/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLEpyKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxBZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmYS5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKEkpe2lmKGkpdGhyb3cgSS5uYW1lPT09IlN5bnRheEVycm9yIj9mLmZyb20oSSxmLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOkl9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e0FlLmhlYWRlcnNbQV09e319KTt2YXIgWT1BZTt2YXIgTXI9YS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxaZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmTXJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgWGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG1BKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTphLmlzQXJyYXkoQSk/QS5tYXAobUEpOlN0cmluZyhBKX1mdW5jdGlvbiBIcihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgWXI9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gZWUoQSxlLHQscixuKXtpZihhLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFhLmlzU3RyaW5nKGUpKXtpZihhLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihhLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIHFyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIEtyKEEsZSl7bGV0IHQ9YS50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oSSxsLEIpe2xldCBnPWVBKGwpO2lmKCFnKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1hLmZpbmRLZXkobixnKTsoIXN8fG5bc109PT12b2lkIDB8fEI9PT0hMHx8Qj09PXZvaWQgMCYmbltzXSE9PSExKSYmKG5bc3x8bF09bUEoSSkpfWxldCBpPShJLGwpPT5hLmZvckVhY2goSSwoQixnKT0+byhCLGcsbCkpO3JldHVybiBhLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koZSx0KTphLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFZcihlKT9pKFplKGUpLHQpOmUhPW51bGwmJm8odCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1hLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4gSHIobik7aWYoYS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKGEuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1hLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fGVlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1lQShpKSxpKXtsZXQgST1hLmZpbmRLZXkocixpKTtJJiYoIXR8fGVlKHIscltJXSxJLHQpKSYmKGRlbGV0ZSByW0ldLG49ITApfX1yZXR1cm4gYS5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fGVlKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGEuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9YS5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1tQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IEk9ZT9xcihvKTpTdHJpbmcobykudHJpbSgpO0khPT1vJiZkZWxldGUgdFtvXSx0W0ldPW1BKG4pLHJbSV09ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYS5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJmEuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tYZV09dGhpc1tYZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IEk9ZUEoaSk7cltJXXx8KEtyKG4saSkscltJXT0hMCl9cmV0dXJuIGEuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07cS5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7YS5yZWR1Y2VEZXNjcmlwdG9ycyhxLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTthLmZyZWV6ZU1ldGhvZHMocSk7dmFyIEQ9cTtmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fFkscj1lfHx0LG49RC5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIGEuZm9yRWFjaChBLGZ1bmN0aW9uKEkpe289SS5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uICRlKEEsZSx0KXtmLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLGYuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1hLmluaGVyaXRzKCRlLGYse19fQ0FOQ0VMX186ITB9KTt2YXIgeD0kZTtmdW5jdGlvbiB0ZShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBmKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW2YuRVJSX0JBRF9SRVFVRVNULGYuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIEF0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07YS5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYS5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrciksYS5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHJlKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gbmUoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG5BKEEsZSl7cmV0dXJuIEEmJiFyZShlKT9uZShBLGUpOmV9dmFyIGV0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgST1hLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gSS5wcm90b2NvbD09PXIucHJvdG9jb2wmJkkuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gb2UoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIFdyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEI9RGF0ZS5ub3coKSxnPXJbb107aXx8KGk9QiksdFtuXT1sLHJbbl09QjtsZXQgcz1vLFE9MDtmb3IoO3MhPT1uOylRKz10W3MrK10scz1zJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxCLWk8ZSlyZXR1cm47bGV0IEM9ZyYmQi1nO3JldHVybiBDP01hdGgucm91bmQoUSoxZTMvQyk6dm9pZCAwfX12YXIgdHQ9V3I7ZnVuY3Rpb24gcnQoQSxlKXtsZXQgdD0wLHI9dHQoNTAsMjUwKTtyZXR1cm4gbj0+e2xldCBvPW4ubG9hZGVkLGk9bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLEk9by10LGw9cihJKSxCPW88PWk7dD1vO2xldCBnPXtsb2FkZWQ6byx0b3RhbDppLHByb2dyZXNzOmk/by9pOnZvaWQgMCxieXRlczpJLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZpJiZCPyhpLW8pL2w6dm9pZCAwLGV2ZW50Om59O2dbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKGcpfX12YXIgdnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixudD12ciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG49QS5kYXRhLG89RC5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTppLHdpdGhYU1JGVG9rZW46SX09QSxsO2Z1bmN0aW9uIEIoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IGc7aWYoYS5pc0Zvcm1EYXRhKG4pKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpby5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoZz1vLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPWc/Zy5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO28uc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IHM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7by5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBRPW5BKEEuYmFzZVVSTCxBLnVybCk7cy5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEMoKXtpZighcylyZXR1cm47bGV0IGM9RC5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gcyYmcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohaXx8aT09PSJ0ZXh0Inx8aT09PSJqc29uIj9zLnJlc3BvbnNlVGV4dDpzLnJlc3BvbnNlLHN0YXR1czpzLnN0YXR1cyxzdGF0dXNUZXh0OnMuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDpzfTt0ZShmdW5jdGlvbihVKXt0KFUpLEIoKX0sZnVuY3Rpb24oVSl7cihVKSxCKCl9LGQpLHM9bnVsbH1pZigib25sb2FkZW5kImluIHM/cy5vbmxvYWRlbmQ9QzpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFzfHxzLnJlYWR5U3RhdGUhPT00fHxzLnN0YXR1cz09PTAmJiEocy5yZXNwb25zZVVSTCYmcy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQyl9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKG5ldyBmKCJSZXF1ZXN0IGFib3J0ZWQiLGYuRUNPTk5BQk9SVEVELEEscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IGYoIk5ldHdvcmsgRXJyb3IiLGYuRVJSX05FVFdPUkssQSxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxwQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgZih1LGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9mLkVUSU1FRE9VVDpmLkVDT05OQUJPUlRFRCxBLHMpKSxzPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoSSYmYS5pc0Z1bmN0aW9uKEkpJiYoST1JKEEpKSxJfHxJIT09ITEmJmV0KFEpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmQXQucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZvLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfW49PT12b2lkIDAmJm8uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gcyYmYS5mb3JFYWNoKG8udG9KU09OKCksZnVuY3Rpb24odSxkKXtzLnNldFJlcXVlc3RIZWFkZXIoZCx1KX0pLGEuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwocy53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksaSYmaSE9PSJqc29uIiYmKHMucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHJ0KEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmcy51cGxvYWQmJnMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixydChBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1jPT57cyYmKHIoIWN8fGMudHlwZT9uZXcgeChudWxsLEEscyk6Yykscy5hYm9ydCgpLHM9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IEU9b2UoUSk7aWYoRSYmdy5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtyKG5ldyBmKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLGYuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59cy5zZW5kKG58fG51bGwpfSl9O3ZhciBpZT17aHR0cDp1QSx4aHI6bnR9O2EuZm9yRWFjaChpZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBvdD1BPT5gLSAke0F9YCxqcj1BPT5hLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEseUE9e2dldEFkYXB0ZXI6QT0+e0E9YS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFqcih0KSYmKHI9aWVbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgZihgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbSSxsXSk9PmBhZGFwdGVyICR7SX0gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAob3QpLmpvaW4oYApgKToiICIrb3Qob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgZigiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczppZX07ZnVuY3Rpb24gc2UoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gc2UoQSksQS5oZWFkZXJzPUQuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSkseUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFkuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gc2UoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1ELmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChzZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1ELmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIGl0PUE9PkEgaW5zdGFuY2VvZiBEP3suLi5BfTpBO2Z1bmN0aW9uIEcoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQixnLHMpe3JldHVybiBhLmlzUGxhaW5PYmplY3QoQikmJmEuaXNQbGFpbk9iamVjdChnKT9hLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LEIsZyk6YS5pc1BsYWluT2JqZWN0KGcpP2EubWVyZ2Uoe30sZyk6YS5pc0FycmF5KGcpP2cuc2xpY2UoKTpnfWZ1bmN0aW9uIG4oQixnLHMpe2lmKGEuaXNVbmRlZmluZWQoZykpe2lmKCFhLmlzVW5kZWZpbmVkKEIpKXJldHVybiByKHZvaWQgMCxCLHMpfWVsc2UgcmV0dXJuIHIoQixnLHMpfWZ1bmN0aW9uIG8oQixnKXtpZighYS5pc1VuZGVmaW5lZChnKSlyZXR1cm4gcih2b2lkIDAsZyl9ZnVuY3Rpb24gaShCLGcpe2lmKGEuaXNVbmRlZmluZWQoZykpe2lmKCFhLmlzVW5kZWZpbmVkKEIpKXJldHVybiByKHZvaWQgMCxCKX1lbHNlIHJldHVybiByKHZvaWQgMCxnKX1mdW5jdGlvbiBJKEIsZyxzKXtpZihzIGluIGUpcmV0dXJuIHIoQixnKTtpZihzIGluIEEpcmV0dXJuIHIodm9pZCAwLEIpfWxldCBsPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOkksaGVhZGVyczooQixnKT0+bihpdChCKSxpdChnKSwhMCl9O3JldHVybiBhLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihnKXtsZXQgcz1sW2ddfHxuLFE9cyhBW2ddLGVbZ10sZyk7YS5pc1VuZGVmaW5lZChRKSYmcyE9PUl8fCh0W2ddPVEpfSksdH12YXIgd0E9IjEuNi44Ijt2YXIgYWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57YWVbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIHN0PXt9O2FlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIrd0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG8saSxJKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgZihuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLGYuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhc3RbaV0mJihzdFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksSSk6ITB9fTtmdW5jdGlvbiBfcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBmKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixmLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89cltuXSxpPWVbb107aWYoaSl7bGV0IEk9QVtvXSxsPUk9PT12b2lkIDB8fGkoSSxvLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgZigib3B0aW9uICIrbysiIG11c3QgYmUgIitsLGYuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgZigiVW5rbm93biBvcHRpb24gIitvLGYuRVJSX0JBRF9PUFRJT04pfX12YXIgREE9e2Fzc2VydE9wdGlvbnM6X3IsdmFsaWRhdG9yczphZX07dmFyIFA9REEudmFsaWRhdG9ycyxLPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWkEscmVzcG9uc2U6bmV3IFpBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP28mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbyk6ci5zdGFjaz1vfXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXQ7ciE9PXZvaWQgMCYmREEuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpQLnRyYW5zaXRpb25hbChQLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlAudHJhbnNpdGlvbmFsKFAuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpQLnRyYW5zaXRpb25hbChQLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKGEuaXNGdW5jdGlvbihuKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTpEQS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpQLmZ1bmN0aW9uLHNlcmlhbGl6ZTpQLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJmEubWVyZ2Uoby5jb21tb24sb1t0Lm1ldGhvZF0pO28mJmEuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSx0LmhlYWRlcnM9RC5jb25jYXQoaSxvKTtsZXQgST1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmYy5zeW5jaHJvbm91cyxJLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IEI9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtCLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgZyxzPTAsUTtpZighbCl7bGV0IEU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsSSksRS5wdXNoLmFwcGx5KEUsQiksUT1FLmxlbmd0aCxnPVByb21pc2UucmVzb2x2ZSh0KTtzPFE7KWc9Zy50aGVuKEVbcysrXSxFW3MrK10pO3JldHVybiBnfVE9SS5sZW5ndGg7bGV0IEM9dDtmb3Iocz0wO3M8UTspe2xldCBFPUlbcysrXSxjPUlbcysrXTt0cnl7Qz1FKEMpfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7Zz1oQS5jYWxsKHRoaXMsQyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihzPTAsUT1CLmxlbmd0aDtzPFE7KWc9Zy50aGVuKEJbcysrXSxCW3MrK10pO3JldHVybiBnfWdldFVyaShlKXtlPUcodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1uQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe0sucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTthLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihvLGksSSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKEl8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1LLnByb3RvdHlwZVtlXT10KCksSy5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG9BPUs7dmFyIEllPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXt0PW99KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylyLl9saXN0ZW5lcnNbb10obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShJPT57ci5zdWJzY3JpYmUoSSksbz1JfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxJKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KG8saSxJKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxhdD1JZTtmdW5jdGlvbiBnZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gQ2UoQSl7cmV0dXJuIGEuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEJlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhCZSkuZm9yRWFjaCgoW0EsZV0pPT57QmVbZV09QX0pO3ZhciBJdD1CZTtmdW5jdGlvbiBndChBKXtsZXQgZT1uZXcgb0EoQSksdD1aKG9BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBhLmV4dGVuZCh0LG9BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSksYS5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gZ3QoRyhBLG4pKX0sdH12YXIgbT1ndChZKTttLkF4aW9zPW9BO20uQ2FuY2VsZWRFcnJvcj14O20uQ2FuY2VsVG9rZW49YXQ7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049d0E7bS50b0Zvcm1EYXRhPUw7bS5BeGlvc0Vycm9yPWY7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9Z2U7bS5pc0F4aW9zRXJyb3I9Q2U7bS5tZXJnZUNvbmZpZz1HO20uQXhpb3NIZWFkZXJzPUQ7bS5mb3JtVG9KU09OPUE9PmRBKGEuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPXlBLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT1JdDttLmRlZmF1bHQ9bTt2YXIgVz1tO3ZhcntBeGlvczpNcyxBeGlvc0Vycm9yOkhzLENhbmNlbGVkRXJyb3I6WXMsaXNDYW5jZWw6cXMsQ2FuY2VsVG9rZW46S3MsVkVSU0lPTjpXcyxhbGw6dnMsQ2FuY2VsOmpzLGlzQXhpb3NFcnJvcjpfcyxzcHJlYWQ6enMsdG9Gb3JtRGF0YTpWcyxBeGlvc0hlYWRlcnM6WnMsSHR0cFN0YXR1c0NvZGU6WHMsZm9ybVRvSlNPTjokcyxnZXRBZGFwdGVyOkFhLG1lcmdlQ29uZmlnOmVhfT1XO2FzeW5jIGZ1bmN0aW9uIHpyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCBXLmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbz1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKG8se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGlBPXpyO2Z1bmN0aW9uIEN0KEEpe2xldCBlPUtBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbcUFdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gVnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBvPUE7cmV0dXJuIG8ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9by53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6b30pOkN0KEEpfWxldCBuPWF3YWl0IGlBKGUsdCk7cmV0dXJuIEN0KG4pfXZhciBCdD1Wcjthc3luYyBmdW5jdGlvbiBacihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsaT0oYXdhaXQgVy5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6aX0pfXZhciBsdD1acjt2YXIgY3Q9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIHV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLEV0PW5ldyBUZXh0RW5jb2RlcixRdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gWHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLG89QS5mc19zdGF0KGUpLnNpemUsaT1udWxsO3V0P2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmk9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBJPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQocixJLDAsbywwKSxBLmZzX2Nsb3NlKHIpLEl9ZnVuY3Rpb24gZnQoQSxlLHQpe2xldCByPW51bGw7dXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkociksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gbi5zZXQobyksbn1mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24gdihBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG5dKTtBLnN0cmluZ1RvVVRGOChyLG8sbil9ZnVuY3Rpb24gayhBLGUsdCxyKXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9ZnQoQSxuLG8pO3JldHVybiBiKHIsaS5idWZmZXIpfWZ1bmN0aW9uIGxlKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiAkcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQixnKXtzd2l0Y2goQi50eXBlKXtjYXNlIHAuVGV4dFN0cmVhbTp7bGV0IHM9RXQuZW5jb2RlKEIuZGF0YS5kYXRhKSxRPWgoQSxzLGcsMCksQz17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O3YoQSxDLGcpO2JyZWFrfWNhc2UgcC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9RXQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEIuZGF0YSkpLFE9aChBLHMsZywwKSxDPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07dihBLEMsZyk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IHM9Qi5kYXRhLmRhdGEsUT1oKEEscyxnLDApLEM9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTt2KEEsQyxnKTticmVha31jYXNlIHAuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIHAuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQi5kYXRhLnBhdGgsQi5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IHM9Qi5kYXRhLFE9aChBLHMuZGF0YSxnLDApLEM9aChBLHMuZGlyZWN0aW9uLGcsMSksRT10eXBlb2Ygcy5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShzLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOnMuaW1hZ2VUeXBlLG5hbWU6cy5uYW1lLG9yaWdpbjpzLm9yaWdpbixzcGFjaW5nOnMuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsc2l6ZTpzLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxtZXRhZGF0YTpFfTt2KEEsYyxnKTticmVha31jYXNlIHAuTWVzaDp7bGV0IHM9Qi5kYXRhLFE9aChBLHMucG9pbnRzLGcsMCksQz1oKEEscy5jZWxscyxnLDEpLEU9aChBLHMucG9pbnREYXRhLGcsMiksYz1oKEEscy5jZWxsRGF0YSxnLDMpLHU9e21lc2hUeXBlOnMubWVzaFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZDZWxsczpzLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsY2VsbEJ1ZmZlclNpemU6cy5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTt2KEEsdSxnKTticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBzPUIuZGF0YSxRPWgoQSxzLnBvaW50cyxnLDApLEM9aChBLHMudmVydGljZXMsZywxKSxFPWgoQSxzLmxpbmVzLGcsMiksYz1oKEEscy5wb2x5Z29ucyxnLDMpLHU9aChBLHMudHJpYW5nbGVTdHJpcHMsZyw0KSxkPWgoQSxzLnBvaW50RGF0YSxnLDUpLEY9aChBLHMucG9pbnREYXRhLGcsNiksVT17cG9seURhdGFUeXBlOnMucG9seURhdGFUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpzLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0N9YCxsaW5lc0J1ZmZlclNpemU6cy5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOnMucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Rn1gfTt2KEEsVSxnKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2goQil7dGhyb3cgdHlwZW9mIEI9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoQikpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksQn1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCksST1BLmdldE1vZHVsZVN0ZGVycigpLGw9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJm89PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oQixnKXtsZXQgcz1udWxsO3N3aXRjaChCLnR5cGUpe2Nhc2UgcC5UZXh0U3RyZWFtOntsZXQgQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxnLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGcsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEMsRSk7cz17ZGF0YTpRdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgcC5Kc29uQ29tcGF0aWJsZTp7bGV0IEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxnLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixDLEUpO3M9SlNPTi5wYXJzZShRdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgcC5CaW5hcnlTdHJlYW06e2xldCBDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGcsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZywwXSk7cz17ZGF0YTpmdChBLEMsRSl9O2JyZWFrfWNhc2UgcC5UZXh0RmlsZTp7cz17cGF0aDpCLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoQi5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIHAuQmluYXJ5RmlsZTp7cz17cGF0aDpCLmRhdGEucGF0aCxkYXRhOlhyKEEsQi5kYXRhLnBhdGgpfTticmVha31jYXNlIHAuSW1hZ2U6e2xldCBDPWxlKEEsZyk7Qy5kYXRhPWsoQSxnLDAsQy5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQy5kaXJlY3Rpb249ayhBLGcsMSxTLkZsb2F0NjQpLEMubWV0YWRhdGE9bmV3IE1hcChDLm1ldGFkYXRhKSxzPUM7YnJlYWt9Y2FzZSBwLk1lc2g6e2xldCBDPWxlKEEsZyk7Qy5udW1iZXJPZlBvaW50cz4wP0MucG9pbnRzPWsoQSxnLDAsQy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkMucG9pbnRzPWIoQy5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbHM+MD9DLmNlbGxzPWsoQSxnLDEsQy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qy5jZWxscz1iKEMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mUG9pbnRQaXhlbHM+MD9DLnBvaW50RGF0YT1rKEEsZywyLEMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkMucG9pbnREYXRhPWIoQy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qy5jZWxsRGF0YT1rKEEsZywzLEMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qy5jZWxsRGF0YT1iKEMubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QzticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBDPWxlKEEsZyk7Qy5udW1iZXJPZlBvaW50cz4wP0MucG9pbnRzPWsoQSxnLDAsUy5GbG9hdDMyKTpDLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEMudmVydGljZXNCdWZmZXJTaXplPjA/Qy52ZXJ0aWNlcz1rKEEsZywxLHkuVUludDMyKTpDLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxDLmxpbmVzQnVmZmVyU2l6ZT4wP0MubGluZXM9ayhBLGcsMix5LlVJbnQzMik6Qy5saW5lcz1uZXcgVWludDMyQXJyYXksQy5wb2x5Z29uc0J1ZmZlclNpemU+MD9DLnBvbHlnb25zPWsoQSxnLDMseS5VSW50MzIpOkMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Qy50cmlhbmdsZVN0cmlwcz1rKEEsZyw0LHkuVUludDMyKTpDLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxDLm51bWJlck9mUG9pbnRQaXhlbHM+MD9DLnBvaW50RGF0YT1rKEEsZyw1LEMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpDLnBvaW50RGF0YT1iKEMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZkNlbGxQaXhlbHM+MD9DLmNlbGxEYXRhPWsoQSxnLDYsQy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qy5jZWxsRGF0YT1iKEMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgUT17dHlwZTpCLnR5cGUsZGF0YTpzfTtsLnB1c2goUSl9KSx7cmV0dXJuVmFsdWU6byxzdGRvdXQ6aSxzdGRlcnI6SSxvdXRwdXRzOmx9fXZhciBwdD0kcjt2YXIgQW49dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIGVuKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49dG4oQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIHRuKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksQW4mJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBkdD1lbjtmdW5jdGlvbiBybihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgbXQ9cm47ZnVuY3Rpb24gbm4oQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHl0PW5uO2Z1bmN0aW9uIG9uKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBodD1vbjt2YXIgc247ZnVuY3Rpb24gU0EoKXtyZXR1cm4gc259dmFyIGFuO2Z1bmN0aW9uIHd0KCl7cmV0dXJuIGFufXZhciBJbjtmdW5jdGlvbiBiQSgpe3JldHVybiBJbn12YXIgY2U9bmV3IE1hcDtmdW5jdGlvbiBnbigpe2xldCBBPWJBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBEdCgpe2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGtBKCl7bGV0IEE9d3QoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBDbihBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLGNlLmhhcyhuKSlyZXR1cm4gY2UuZ2V0KG4pO3tsZXQgbz1hd2FpdCBsdChBLGU/LnRvU3RyaW5nKCk/P0R0KCksdD8/a0EoKSk7cmV0dXJuIGNlLnNldChuLG8pLG99fWFzeW5jIGZ1bmN0aW9uIEJuKEEsZSx0LHIsbil7aWYoIWF3YWl0IGN0KCkpe2xldCB1PSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydCh1KSxuZXcgRXJyb3IodSl9bGV0IG89bj8ud2ViV29ya2VyPz9udWxsO2lmKG89PT0hMSl7bGV0IHU9YXdhaXQgQ24oQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9rQSgpKTtyZXR1cm4gcHQodSxlLHQscil9bGV0IGk9byxJPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9nbigpLGw9dHlwZW9mIEkhPSJzdHJpbmciJiZ0eXBlb2YgST8uaHJlZjwidSI/SS5ocmVmOkkse3dvcmtlclByb3h5OkIsd29ya2VyOmd9PWF3YWl0IEJ0KGksbCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9rQSgpKTtpPWc7bGV0IHM9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lmKHUudHlwZT09PXAuQmluYXJ5U3RyZWFtKXtsZXQgZD11LmRhdGEuZGF0YTtzLnB1c2goZCl9ZWxzZSBpZih1LnR5cGU9PT1wLkJpbmFyeUZpbGUpe2xldCBkPXUuZGF0YS5kYXRhO3MucHVzaChkKX1lbHNlIGlmKHUudHlwZT09PXAuSW1hZ2Upe2xldCBkPXUuZGF0YTtkLmRhdGEhPT1udWxsJiZzLnB1c2goLi4ubXQoZCkpfWVsc2UgaWYodS50eXBlPT09cC5NZXNoKXtsZXQgZD11LmRhdGE7cy5wdXNoKC4uLnl0KGQpKX1lbHNlIGlmKHUudHlwZT09PXAuUG9seURhdGEpe2xldCBkPXUuZGF0YTtzLnB1c2goLi4uaHQoZCkpfX0pO2xldCBRPW4/LnBpcGVsaW5lQmFzZVVybD8/RHQoKSxDPXR5cGVvZiBRIT0ic3RyaW5nIiYmdHlwZW9mIFE/LmhyZWY8InUiP1EuaHJlZjpRLEU9ciE9bnVsbD9XQShyLGR0KHMsbj8ubm9Db3B5KSk6bnVsbCxjPWF3YWl0IEIucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLEMsZSx0LEUsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7cmV0dXJue3JldHVyblZhbHVlOmMucmV0dXJuVmFsdWUsc3Rkb3V0OmMuc3Rkb3V0LHN0ZGVycjpjLnN0ZGVycixvdXRwdXRzOmMub3V0cHV0cyx3ZWJXb3JrZXI6aX19dmFyIHNBPUJuO3ZhciBsbj1udWxsO2Z1bmN0aW9uIFN0KCl7cmV0dXJuIGxufXZhciBFZSxjbj1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vY29tcHJlc3Mtc3RyaW5naWZ5QCR7VUF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBXYShBKXtFZT1BfWZ1bmN0aW9uIFJBKCl7aWYodHlwZW9mIEVlPCJ1IilyZXR1cm4gRWU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Y259dmFyIFFlLEVuPW51bGw7ZnVuY3Rpb24gYnQoQSl7UWU9QX1mdW5jdGlvbiBqKCl7aWYodHlwZW9mIFFlPCJ1IilyZXR1cm4gUWU7bGV0IEE9YkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6RW59dmFyIF89bnVsbDthc3luYyBmdW5jdGlvbiBrdCgpe2xldCBBPWooKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO189YXdhaXQgaUEoZSl9ZnVuY3Rpb24gWGEoQSl7Xz1BfWFzeW5jIGZ1bmN0aW9uIEZBKCl7aWYoXyE9PW51bGwpcmV0dXJuIF8udGVybWluYXRlZCYmYXdhaXQga3QoKSxfO2xldCBBPVN0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IGt0KCksXyl9YXN5bmMgZnVuY3Rpb24gUW4oQSxlPXt9KXtsZXQgdD1be3R5cGU6cC5CaW5hcnlTdHJlYW19XSxyPVt7dHlwZTpwLkJpbmFyeVN0cmVhbSxkYXRhOntkYXRhOkF9fV0sbj1bXTtuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zdHJpbmdpZnkmJmUuc3RyaW5naWZ5JiZuLnB1c2goIi0tc3RyaW5naWZ5IiksZS5jb21wcmVzc2lvbkxldmVsJiZuLnB1c2goIi0tY29tcHJlc3Npb24tbGV2ZWwiLGUuY29tcHJlc3Npb25MZXZlbC50b1N0cmluZygpKSxlLmRhdGFVcmxQcmVmaXgmJm4ucHVzaCgiLS1kYXRhLXVybC1wcmVmaXgiLGUuZGF0YVVybFByZWZpeC50b1N0cmluZygpKTtsZXQgST0iY29tcHJlc3Mtc3RyaW5naWZ5IixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBGQSgpKTtsZXR7d2ViV29ya2VyOkIscmV0dXJuVmFsdWU6ZyxzdGRlcnI6cyxvdXRwdXRzOlF9PWF3YWl0IHNBKEksbix0LHIse3BpcGVsaW5lQmFzZVVybDpSQSgpLHBpcGVsaW5lV29ya2VyVXJsOmooKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoZyE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpCLG91dHB1dDooUVswXT8uZGF0YSkuZGF0YX19dmFyIHo9UW47YXN5bmMgZnVuY3Rpb24gdW4oQSxlPXt9KXtsZXQgdD1be3R5cGU6cC5CaW5hcnlTdHJlYW19XSxyPVt7dHlwZTpwLkJpbmFyeVN0cmVhbSxkYXRhOntkYXRhOkF9fV0sbj1bXTtuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5wYXJzZVN0cmluZyYmZS5wYXJzZVN0cmluZyYmbi5wdXNoKCItLXBhcnNlLXN0cmluZyIpO2xldCBJPSJwYXJzZS1zdHJpbmctZGVjb21wcmVzcyIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgRkEoKSk7bGV0e3dlYldvcmtlcjpCLHJldHVyblZhbHVlOmcsc3RkZXJyOnMsb3V0cHV0czpRfT1hd2FpdCBzQShJLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6UkEoKSxwaXBlbGluZVdvcmtlclVybDpqKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGchPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6QixvdXRwdXQ6KFFbMF0/LmRhdGEpLmRhdGF9fXZhciBWPXVuO2FzeW5jIGZ1bmN0aW9uIGZuKEEsZT17fSl7bGV0IHI9bmV3IFRBKEEuaW1hZ2VUeXBlKTtyLm9yaWdpbj1BLm9yaWdpbixyLnNwYWNpbmc9QS5zcGFjaW5nLHIuc2l6ZT1BLnNpemUsci5tZXRhZGF0YT1BLm1ldGFkYXRhO2xldCBuPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKSxvPW5ldyBVaW50OEFycmF5KEEuZGlyZWN0aW9uLmJ1ZmZlciksaT1hd2FpdCB6KG8se2NvbXByZXNzaW9uTGV2ZWw6NSxzdHJpbmdpZnk6ITAsd2ViV29ya2VyOmUud2ViV29ya2VyLG5vQ29weTplLm5vQ29weX0pLEk9aS53ZWJXb3JrZXI7aWYoci5kaXJlY3Rpb249bi5kZWNvZGUoaS5vdXRwdXQuYnVmZmVyKSxBLmRhdGE9PT1udWxsKXIuZGF0YT1udWxsO2Vsc2V7bGV0IGw9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmJ1ZmZlciksQj1hd2FpdCB6KGwse2NvbXByZXNzaW9uTGV2ZWw6NSxzdHJpbmdpZnk6ITAsd2ViV29ya2VyOkksbm9Db3B5OmUubm9Db3B5fSk7ci5kYXRhPW4uZGVjb2RlKEIub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2VuY29kZWQ6cix3ZWJXb3JrZXI6SX19YXN5bmMgZnVuY3Rpb24gcG4oQSxlPXt9KXtsZXQgdD1BLHI9bmV3IFRleHRFbmNvZGVyLG49bmV3IFVpbnQ4QXJyYXkoci5lbmNvZGUoQS5kaXJlY3Rpb24pKSxvPWF3YWl0IFYobix7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOmUud2ViV29ya2VyLG5vQ29weTohMH0pLGk9by53ZWJXb3JrZXI7aWYodC5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShvLm91dHB1dC5idWZmZXIpLCF0LmRhdGEpdC5kYXRhPW51bGw7ZWxzZXtsZXQgST1uZXcgVWludDhBcnJheShyLmVuY29kZShBLmRhdGEpKSxsPWF3YWl0IFYoSSx7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOmksbm9Db3B5OiEwfSk7dC5kYXRhPWIodC5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSxsLm91dHB1dC5idWZmZXIpfXJldHVybntkZWNvZGVkOnQsd2ViV29ya2VyOml9fWFzeW5jIGZ1bmN0aW9uIGRuKEEsZT17fSl7bGV0IHI9bmV3IFBBKEEubWVzaFR5cGUpO3IubmFtZT1BLm5hbWUsci5udW1iZXJPZlBvaW50cz1BLm51bWJlck9mUG9pbnRzLHIubnVtYmVyT2ZDZWxscz1BLm51bWJlck9mQ2VsbHMsci5udW1iZXJPZlBvaW50UGl4ZWxzPUEubnVtYmVyT2ZQb2ludFBpeGVscyxyLm51bWJlck9mQ2VsbFBpeGVscz1BLm51bWJlck9mQ2VsbFBpeGVscyxyLmNlbGxCdWZmZXJTaXplPUEuY2VsbEJ1ZmZlclNpemU7bGV0IG49ZS53ZWJXb3JrZXIsbz1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJwb2ludERhdGEiLCJjZWxscyIsImNlbGxEYXRhIl0paWYoQVtpXT09PW51bGwpcltpXT1udWxsO2Vsc2V7bGV0IEk9bmV3IFVpbnQ4QXJyYXkoQVtpXS5idWZmZXIpLGw9YXdhaXQgeihJLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjpuLG5vQ29weTplLm5vQ29weX0pO249bC53ZWJXb3JrZXIscltpXT1vLmRlY29kZShsLm91dHB1dC5idWZmZXIpfXJldHVybntlbmNvZGVkOnIsd2ViV29ya2VyOm59fWFzeW5jIGZ1bmN0aW9uIG1uKEEsZT17fSl7bGV0IHQ9QSxyPW5ldyBNYXAoW1sicG9pbnRzIiwicG9pbnRDb21wb25lbnRUeXBlIl0sWyJwb2ludERhdGEiLCJwb2ludFBpeGVsQ29tcG9uZW50VHlwZSJdLFsiY2VsbHMiLCJjZWxsQ29tcG9uZW50VHlwZSJdLFsiY2VsbERhdGEiLCJjZWxsUGl4ZWxDb21wb25lbnRUeXBlIl1dKSxuPW5ldyBUZXh0RW5jb2RlcixvPWUud2ViV29ya2VyO2ZvcihsZXQgaSBvZlsicG9pbnRzIiwicG9pbnREYXRhIiwiY2VsbHMiLCJjZWxsRGF0YSJdKWlmKHRbaV09PT1udWxsKXRbaV09bnVsbDtlbHNle2xldCBJPW5ldyBVaW50OEFycmF5KG4uZW5jb2RlKHRbaV0pKSxsPWF3YWl0IFYoSSx7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOm8sbm9Db3B5OiEwfSk7bz1sLndlYldvcmtlcix0W2ldPWIodC5tZXNoVHlwZVtyLmdldChpKV0sbC5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZGVjb2RlZDp0LHdlYldvcmtlcjpvfX1hc3luYyBmdW5jdGlvbiB5bihBLGU9e30pe2xldCByPW5ldyBNQShBLnBvbHlEYXRhVHlwZSk7ci5uYW1lPUEubmFtZSxyLm51bWJlck9mUG9pbnRzPUEubnVtYmVyT2ZQb2ludHMsci52ZXJ0aWNlc0J1ZmZlclNpemU9QS52ZXJ0aWNlc0J1ZmZlclNpemUsci5saW5lc0J1ZmZlclNpemU9QS5saW5lc0J1ZmZlclNpemUsci5wb2x5Z29uc0J1ZmZlclNpemU9QS5wb2x5Z29uc0J1ZmZlclNpemUsci50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU9QS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsci5udW1iZXJPZlBvaW50UGl4ZWxzPUEubnVtYmVyT2ZQb2ludFBpeGVscyxyLm51bWJlck9mQ2VsbFBpeGVscz1BLm51bWJlck9mQ2VsbFBpeGVscztsZXQgbj1lLndlYldvcmtlcixvPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmb3IobGV0IGkgb2ZbInBvaW50cyIsInZlcnRpY2VzIiwibGluZXMiLCJwb2x5Z29ucyIsInRyaWFuZ2xlU3RyaXBzIiwicG9pbnREYXRhIiwiY2VsbERhdGEiXSlpZihBW2ldPT09bnVsbClyW2ldPW51bGw7ZWxzZXtsZXQgST1uZXcgVWludDhBcnJheShBW2ldLmJ1ZmZlciksbD1hd2FpdCB6KEkse2NvbXByZXNzaW9uTGV2ZWw6NSxzdHJpbmdpZnk6ITAsd2ViV29ya2VyOm4sbm9Db3B5OmUubm9Db3B5fSk7bj1sLndlYldvcmtlcixyW2ldPW8uZGVjb2RlKGwub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2VuY29kZWQ6cix3ZWJXb3JrZXI6bn19YXN5bmMgZnVuY3Rpb24gaG4oQSxlPXt9KXtsZXQgdD1BLHI9bmV3IE1hcChbWyJwb2ludHMiLCJmbG9hdDMyIl0sWyJ2ZXJ0aWNlcyIsInVpbnQzMiJdLFsibGluZXMiLCJ1aW50MzIiXSxbInBvbHlnb25zIiwidWludDMyIl0sWyJ0cmlhbmdsZVN0cmlwcyIsInVpbnQzMiJdLFsicG9pbnREYXRhIix0LnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZV0sWyJjZWxsRGF0YSIsdC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZV1dKSxuPW5ldyBUZXh0RW5jb2RlcixvPWUud2ViV29ya2VyO2ZvcihsZXQgaSBvZlsicG9pbnRzIiwidmVydGljZXMiLCJsaW5lcyIsInBvbHlnb25zIiwidHJpYW5nbGVTdHJpcHMiLCJwb2ludERhdGEiLCJjZWxsRGF0YSJdKWlmKHRbaV09PT1udWxsKXRbaV09bnVsbDtlbHNle2xldCBJPW5ldyBVaW50OEFycmF5KG4uZW5jb2RlKHRbaV0pKSxsPWF3YWl0IFYoSSx7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOm8sbm9Db3B5OiEwfSk7bz1sLndlYldvcmtlcix0W2ldPWIoci5nZXQoaSksbC5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZGVjb2RlZDp0LHdlYldvcmtlcjpvfX12YXIgUnQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZXQ9KEEsSSk9Pntmb3IodmFyIHQgaW4gSSl0dChBLHQse2dldDpJW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGd0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxtQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGl0PXtjYW5IYW5kbGU6QT0+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+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoSSxWQSkpLnRoZW4odGhpcy5faW5pdCk6SUE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS0ksImJhc2U2NCIpLFZBKS50aGVuKHRoaXMuX2luaXQpLElBKX1faW5pdChJKXtrPUkuaW5zdGFuY2UsVkEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKEksdD0wKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT1JLmJ5dGVMZW5ndGgsZz1rLmV4cG9ydHMubWFsbG9jKGUpO1hBLnNldChJLGcpLHQ9dHx8TnVtYmVyKGsuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPWsuZXhwb3J0cy5tYWxsb2ModCksaT1rLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsdCxnLGUpLHM9WEEuc2xpY2UocixyK2kpO3JldHVybiBrLmV4cG9ydHMuZnJlZShnKSxrLmV4cG9ydHMuZnJlZShyKSxzfX0sS0k9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT0k9bmV3IHlBLFRJPSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsSSx0KXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHtJfS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KTtUSXx8KGF3YWl0IE9JLmluaXQoKSxUST0hMCk7bGV0IHM9T0kuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6c30pfXZhciB4ST1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLEksdCl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyx4SShlLEksdCkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciBQST1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LHA9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxQPXVlO2Z1bmN0aW9uIGhlKEEsSSl7bGV0IHQ9bnVsbDtzd2l0Y2goQSl7Y2FzZSBwLlVJbnQ4Ont0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ4Ont0PW5ldyBJbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQxNjp7dD1uZXcgVWludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDE2Ont0PW5ldyBJbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MzI6e3Q9bmV3IFVpbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQzMjp7dD1uZXcgSW50MzJBcnJheShJKTticmVha31jYXNlIHAuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdVaW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdJbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0MzI6e3Q9bmV3IEZsb2F0MzJBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQ2NDp7dD1uZXcgRmxvYXQ2NEFycmF5KEkpO2JyZWFrfWNhc2UibnVsbCI6e3Q9bnVsbDticmVha31jYXNlIG51bGw6e3Q9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiB0fXZhciBZPWhlO3ZhciBaST10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqST1uZXcgVGV4dEVuY29kZXIsV0k9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsSSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4oSSx0LmZsYWdzKSxyPUEuZnNfc3RhdChJKS5zaXplLGk9bnVsbDtaST9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTppPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgcz1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKGUscywwLHIsMCksQS5mc19jbG9zZShlKSxzfWZ1bmN0aW9uIFZJKEEsSSx0KXtsZXQgZT1udWxsO1pJP2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmU9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksdCk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24geShBLEksdCxlKXtsZXQgZz0wO3JldHVybiBJIT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlLEkuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoSS5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIGooQSxJLHQpe2xldCBlPUpTT04uc3RyaW5naWZ5KEkpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIEYoQSxJLHQsZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxpPVZJKEEsZyxyKTtyZXR1cm4gWShlLGkuYnVmZmVyKX1mdW5jdGlvbiB6QShBLEkpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsSV0pLGU9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSxJLHQsZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBvPWpJLmVuY29kZShRLmRhdGEuZGF0YSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBvPWpJLmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBvPVEuZGF0YS5kYXRhLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBvPVEuZGF0YSxmPXkoQSxvLmRhdGEsQywwKSxuPXkoQSxvLmRpcmVjdGlvbixDLDEpLEU9dHlwZW9mIG8ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oby5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTpvLmltYWdlVHlwZSxuYW1lOm8ubmFtZSxvcmlnaW46by5vcmlnaW4sc3BhY2luZzpvLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLHNpemU6by5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07aihBLGMsQyk7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8uY2VsbHMsQywxKSxFPXkoQSxvLnBvaW50RGF0YSxDLDIpLGM9eShBLG8uY2VsbERhdGEsQywzKSx1PXttZXNoVHlwZTpvLm1lc2hUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6by5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGNlbGxCdWZmZXJTaXplOm8uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07aihBLHUsQyk7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLnZlcnRpY2VzLEMsMSksRT15KEEsby5saW5lcyxDLDIpLGM9eShBLG8ucG9seWdvbnMsQywzKSx1PXkoQSxvLnRyaWFuZ2xlU3RyaXBzLEMsNCksZD15KEEsby5wb2ludERhdGEsQyw1KSxSPXkoQSxvLnBvaW50RGF0YSxDLDYpLE49e3BvbHlEYXRhVHlwZTpvLnBvbHlEYXRhVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6by52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsbGluZXNCdWZmZXJTaXplOm8ubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpvLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6by50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07aihBLE4sQyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbihJLnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLHM9QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZyPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7bGV0IG89bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289e2RhdGE6V0kuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPUpTT04ucGFyc2UoV0kuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pO289e2RhdGE6VkkoQSxuLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbj16QShBLEMpO24uZGF0YT1GKEEsQywwLG4uaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLG4uZGlyZWN0aW9uPUYoQSxDLDEsUC5GbG9hdDY0KSxuLm1ldGFkYXRhPW5ldyBNYXAobi5tZXRhZGF0YSksbz1uO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpuLnBvaW50cz1ZKG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxzPjA/bi5jZWxscz1GKEEsQywxLG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOm4uY2VsbHM9WShuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsMixuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsMyxuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLFAuRmxvYXQzMik6bi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxuLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP24udmVydGljZXM9RihBLEMsMSxwLlVJbnQzMik6bi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksbi5saW5lc0J1ZmZlclNpemU+MD9uLmxpbmVzPUYoQSxDLDIscC5VSW50MzIpOm4ubGluZXM9bmV3IFVpbnQzMkFycmF5LG4ucG9seWdvbnNCdWZmZXJTaXplPjA/bi5wb2x5Z29ucz1GKEEsQywzLHAuVUludDMyKTpuLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxuLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP24udHJpYW5nbGVTdHJpcHM9RihBLEMsNCxwLlVJbnQzMik6bi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsNSxuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQyw2LG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6b307YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Omksc3RkZXJyOnMsb3V0cHV0czphfX12YXIgWEk9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sSSk7ZyE9PW51bGwmJnQucHVzaChnKX1yZXR1cm4gdH1mdW5jdGlvbiBwZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLHdlJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDpJP3Q6dC5zbGljZSgwKX12YXIgekk9bWU7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF9JPUZlO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2ST1TZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJEk9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSxJLHQsZSl7bGV0IGc9WEkoQSxJLHQsZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaS50eXBlPT09RC5CaW5hcnlTdHJlYW18fGkudHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IHM9aS5kYXRhO3IucHVzaChzKX1lbHNlIGlmKGkudHlwZT09PUQuSW1hZ2Upe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uX0kocykpfWVsc2UgaWYoaS50eXBlPT09RC5NZXNoKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLnZJKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuUG9seURhdGEpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uJEkocykpfX0pLEZBKGcsekkociwhMCkpfXZhciBBdD1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsSSx0LGUsZyxyKXtsZXQgaT1hd2FpdCBQSShBLEkscik7cmV0dXJuIGF3YWl0IEF0KGksdCxlLGcpfX07b0EoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7YnQoUnQpO2V4cG9ydHt6IGFzIGNvbXByZXNzU3RyaW5naWZ5LEZBIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsaiBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxSQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLGZuIGFzIGltYWdlVG9Kc29uLHBuIGFzIGpzb25Ub0ltYWdlLG1uIGFzIGpzb25Ub01lc2gsaG4gYXMganNvblRvUG9seURhdGEsZG4gYXMgbWVzaFRvSnNvbixWIGFzIHBhcnNlU3RyaW5nRGVjb21wcmVzcyx5biBhcyBwb2x5RGF0YVRvSnNvbixYYSBhcyBzZXREZWZhdWx0V2ViV29ya2VyLGJ0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLFdhIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsVUEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIFV0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgTnQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlVdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFR0PSIzLjIuMCIsVUE9VHQ7dmFyIEd0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0seT1HdDt2YXIgTHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFM9THQ7ZnVuY3Rpb24geHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHkuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIHkuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIHkuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgeS5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSB5LkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFMuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIGI9eHQ7dmFyIFB0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sRz1QdDt2YXIgTkE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHQ9eS5VSW50OCxyPUcuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9dCx0aGlzLnBpeGVsVHlwZT1yLHRoaXMuY29tcG9uZW50cz1ufX0sdWU9TkE7ZnVuY3Rpb24gT3QoQSxlLHQscixuKXtBW3IrdCplXT1ufXZhciBmZT1PdDt2YXIgVEE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHVlKXt0aGlzLmltYWdlVHlwZT1lO2xldCB0PWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheSh0KSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkodCksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSh0KnQpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCByPTA7cjx0O3IrKylmZSh0aGlzLmRpcmVjdGlvbix0LHIsciwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHQpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LEdBPVRBO3ZhciBMQT1jbGFzc3tkaW1lbnNpb247cG9pbnRDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRzO2NlbGxDb21wb25lbnRUeXBlO2NlbGxQaXhlbENvbXBvbmVudFR5cGU7Y2VsbFBpeGVsVHlwZTtjZWxsUGl4ZWxDb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PVMuRmxvYXQzMixyPVMuRmxvYXQzMixuPUcuU2NhbGFyLG89MSxpPXkuSW50MzIsST1TLkZsb2F0MzIsbD1HLlNjYWxhcixCPTEpe3RoaXMuZGltZW5zaW9uPWUsdGhpcy5wb2ludENvbXBvbmVudFR5cGU9dCx0aGlzLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlPXIsdGhpcy5wb2ludFBpeGVsVHlwZT1uLHRoaXMucG9pbnRQaXhlbENvbXBvbmVudHM9byx0aGlzLmNlbGxDb21wb25lbnRUeXBlPWksdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRUeXBlPUksdGhpcy5jZWxsUGl4ZWxUeXBlPWwsdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRzPUJ9fSxwZT1MQTt2YXIgeEE9Y2xhc3N7bWVzaFR5cGU7bmFtZT0iTWVzaCI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO251bWJlck9mUG9pbnRQaXhlbHM7cG9pbnREYXRhO251bWJlck9mQ2VsbHM7Y2VsbHM7Y2VsbEJ1ZmZlclNpemU7bnVtYmVyT2ZDZWxsUGl4ZWxzO2NlbGxEYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHBlKXt0aGlzLm1lc2hUeXBlPWUsdGhpcy5uYW1lPSJtZXNoIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxscz0wLHRoaXMuY2VsbEJ1ZmZlclNpemU9MCx0aGlzLmNlbGxzPW51bGwsdGhpcy5udW1iZXJPZkNlbGxQaXhlbHM9MCx0aGlzLmNlbGxEYXRhPW51bGx9fSxQQT14QTt2YXIgT0E9Y2xhc3N7cG9pbnRQaXhlbENvbXBvbmVudFR5cGU7cG9pbnRQaXhlbFR5cGU7cG9pbnRQaXhlbENvbXBvbmVudHM7Y2VsbFBpeGVsQ29tcG9uZW50VHlwZTtjZWxsUGl4ZWxUeXBlO2NlbGxQaXhlbENvbXBvbmVudHM7Y29uc3RydWN0b3IoZT1TLkZsb2F0MzIsdD1HLlNjYWxhcixyPTEsbj1TLkZsb2F0MzIsbz1HLlNjYWxhcixpPTEpe3RoaXMucG9pbnRQaXhlbENvbXBvbmVudFR5cGU9ZSx0aGlzLnBvaW50UGl4ZWxUeXBlPXQsdGhpcy5wb2ludFBpeGVsQ29tcG9uZW50cz1yLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50VHlwZT1uLHRoaXMuY2VsbFBpeGVsVHlwZT1vLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50cz1pfX0sZGU9T0E7dmFyIEpBPWNsYXNze3BvbHlEYXRhVHlwZTtuYW1lPSJQb2x5RGF0YSI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO3ZlcnRpY2VzQnVmZmVyU2l6ZTt2ZXJ0aWNlcztsaW5lc0J1ZmZlclNpemU7bGluZXM7cG9seWdvbnNCdWZmZXJTaXplO3BvbHlnb25zO3RyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTt0cmlhbmdsZVN0cmlwcztudW1iZXJPZlBvaW50UGl4ZWxzO3BvaW50RGF0YTtudW1iZXJPZkNlbGxQaXhlbHM7Y2VsbERhdGE7Y29uc3RydWN0b3IoZT1uZXcgZGUpe3RoaXMucG9seURhdGFUeXBlPWUsdGhpcy5wb2x5RGF0YVR5cGU9ZSx0aGlzLm5hbWU9IlBvbHlEYXRhIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSx0aGlzLnZlcnRpY2VzQnVmZmVyU2l6ZT0wLHRoaXMudmVydGljZXM9bnVsbCx0aGlzLmxpbmVzQnVmZmVyU2l6ZT0wLHRoaXMubGluZXM9bnVsbCx0aGlzLnBvbHlnb25zQnVmZmVyU2l6ZT0wLHRoaXMucG9seWdvbnM9bnVsbCx0aGlzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT0wLHRoaXMudHJpYW5nbGVTdHJpcHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxsUGl4ZWxzPTAsdGhpcy5jZWxsRGF0YT1udWxsfX0sTUE9SkE7dmFyIEp0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LHA9SnQ7dmFyIHllPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLE10PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHFBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxIQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksSUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGhlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLEh0PXtjYW5IYW5kbGU6QT0+aGUoQSkmJkFbeWVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIERlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxLQShBKX19LFl0PXtjYW5IYW5kbGU6QT0+aGUoQSkmJklBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSx3ZT1uZXcgTWFwKFtbInByb3h5IixIdF0sWyJ0aHJvdyIsWXRdXSk7ZnVuY3Rpb24gcXQoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIERlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIXF0KHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTppLHBhdGg6SX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxsPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKE8pLEI7dHJ5e2xldCBnPUkuc2xpY2UoMCwtMSkucmVkdWNlKChRLEMpPT5RW0NdLEEpLHM9SS5yZWR1Y2UoKFEsQyk9PlFbQ10sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpCPXM7YnJlYWs7Y2FzZSJTRVQiOmdbSS5zbGljZSgtMSlbMF1dPU8obi5kYXRhLnZhbHVlKSxCPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOkI9cy5hcHBseShnLGwpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IFE9bmV3IHMoLi4ubCk7Qj1fdChRKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOlEscG9ydDI6Q309bmV3IE1lc3NhZ2VDaGFubmVsO0RlKEEsQyksQj1XQShRLFtRXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpCPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goZyl7Qj17dmFsdWU6ZyxbSUFdOjB9fVByb21pc2UucmVzb2x2ZShCKS5jYXRjaChnPT4oe3ZhbHVlOmcsW0lBXTowfSkpLnRoZW4oZz0+e2xldFtzLFFdPUJBKGcpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksUSksaT09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksU2UoZSksSEEgaW4gQSYmdHlwZW9mIEFbSEFdPT0iZnVuY3Rpb24iJiZBW0hBXSgpKX0pLmNhdGNoKGc9PntsZXRbcyxRXT1CQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW0lBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxRKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIEt0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIFNlKEEpe0t0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gS0EoQSxlKXtyZXR1cm4gWUEoQSxbXSxlKX1mdW5jdGlvbiBhQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gYmUoQSl7cmV0dXJuIEooQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57U2UoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsQ0E9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSxlKSxlPT09MCYmYmUoQSl9KTtmdW5jdGlvbiBXdChBLGUpe2xldCB0PShnQS5nZXQoZSl8fDApKzE7Z0Euc2V0KGUsdCksQ0EmJkNBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiB2dChBKXtDQSYmQ0EudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBZQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChvLGkpe2lmKGFBKHIpLGk9PT1xQSlyZXR1cm4oKT0+e3Z0KG4pLGJlKEEpLHI9ITB9O2lmKGk9PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IEk9SihBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKX0pLnRoZW4oTyk7cmV0dXJuIEkudGhlbi5iaW5kKEkpfXJldHVybiBZQShBLFsuLi5lLGldKX0sc2V0KG8saSxJKXthQShyKTtsZXRbbCxCXT1CQShJKTtyZXR1cm4gSihBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsaV0ubWFwKGc9PmcudG9TdHJpbmcoKSksdmFsdWU6bH0sQikudGhlbihPKX0sYXBwbHkobyxpLEkpe2FBKHIpO2xldCBsPWVbZS5sZW5ndGgtMV07aWYobD09PU10KXJldHVybiBKKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oTyk7aWYobD09PSJiaW5kIilyZXR1cm4gWUEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbQixnXT1tZShJKTtyZXR1cm4gSihBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpCfSxnKS50aGVuKE8pfSxjb25zdHJ1Y3QobyxpKXthQShyKTtsZXRbSSxsXT1tZShpKTtyZXR1cm4gSihBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAoQj0+Qi50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6SX0sbCkudGhlbihPKX19KTtyZXR1cm4gV3QobixBKSxufWZ1bmN0aW9uIGp0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIG1lKEEpe2xldCBlPUEubWFwKEJBKTtyZXR1cm5bZS5tYXAodD0+dFswXSksanQoZS5tYXAodD0+dFsxXSkpXX12YXIga2U9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gV0EoQSxlKXtyZXR1cm4ga2Uuc2V0KEEsZSksQX1mdW5jdGlvbiBfdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbeWVdOiEwfSl9ZnVuY3Rpb24gQkEoQSl7Zm9yKGxldFtlLHRdb2Ygd2UpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxrZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBPKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHdlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gSihBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj16dCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxyKGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiB6dCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gWihBLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KGUsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOlZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpfQX09T2JqZWN0LGNBPShBPT5lPT57bGV0IHQ9VnQuY2FsbChlKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLE49QT0+KEE9QS50b0xvd2VyQ2FzZSgpLGU9PmNBKGUpPT09QSksRUE9QT0+ZT0+dHlwZW9mIGU9PT1BLHtpc0FycmF5Ok19PUFycmF5LFg9RUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIFp0KEEpe3JldHVybiBBIT09bnVsbCYmIVgoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWChBLmNvbnN0cnVjdG9yKSYmUihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgTmU9TigiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBYdChBKXtsZXQgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOmU9QSYmQS5idWZmZXImJk5lKEEuYnVmZmVyKSxlfXZhciAkdD1FQSgic3RyaW5nIiksUj1FQSgiZnVuY3Rpb24iKSxUZT1FQSgibnVtYmVyIiksUUE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixBcj1BPT5BPT09ITB8fEE9PT0hMSxsQT1BPT57aWYoY0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgZT1fQShBKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxlcj1OKCJEYXRlIiksdHI9TigiRmlsZSIpLHJyPU4oIkJsb2IiKSxucj1OKCJGaWxlTGlzdCIpLG9yPUE9PlFBKEEpJiZSKEEucGlwZSksaXI9QT0+e2xldCBlO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFIoQS5hcHBlbmQpJiYoKGU9Y0EoQSkpPT09ImZvcm1kYXRhInx8ZT09PSJvYmplY3QiJiZSKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHNyPU4oIlVSTFNlYXJjaFBhcmFtcyIpLGFyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiAkKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksTShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgbz10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGk9by5sZW5ndGgsSTtmb3Iocj0wO3I8aTtyKyspST1vW3JdLGUuY2FsbChudWxsLEFbSV0sSSxBKX19ZnVuY3Rpb24gR2UoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBMZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLHhlPUE9PiFYKEEpJiZBIT09TGU7ZnVuY3Rpb24gakEoKXtsZXR7Y2FzZWxlc3M6QX09eGUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBvPUEmJkdlKGUsbil8fG47bEEoZVtvXSkmJmxBKHIpP2Vbb109akEoZVtvXSxyKTpsQShyKT9lW29dPWpBKHt9LHIpOk0ocik/ZVtvXT1yLnNsaWNlKCk6ZVtvXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJiQoYXJndW1lbnRzW3JdLHQpO3JldHVybiBlfXZhciBJcj0oQSxlLHQse2FsbE93bktleXM6cn09e30pPT4oJChlLChuLG8pPT57dCYmUihuKT9BW29dPVoobix0KTpBW29dPW59LHthbGxPd25LZXlzOnJ9KSxBKSxncj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLENyPShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LEJyPShBLGUsdCxyKT0+e2xldCBuLG8saSxJPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPW4ubGVuZ3RoO28tLSA+MDspaT1uW29dLCghcnx8cihpLEEsZSkpJiYhSVtpXSYmKGVbaV09QVtpXSxJW2ldPSEwKTtBPXQhPT0hMSYmX0EoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LGxyPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sY3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKE0oQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIVRlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxFcj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmX0EoVWludDhBcnJheSkpLFFyPShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IG89bi52YWx1ZTtlLmNhbGwoQSxvWzBdLG9bMV0pfX0sdXI9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sZnI9TigiSFRNTEZvcm1FbGVtZW50IikscHI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLEZlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxkcj1OKCJSZWdFeHAiKSxQZT0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307JCh0LChuLG8pPT57bGV0IGk7KGk9ZShuLG8sQSkpIT09ITEmJihyW29dPWl8fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0sbXI9QT0+e1BlKEEsKGUsdCk9PntpZihSKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKFIocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0seXI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2gobz0+e3Rbb109ITB9KX07cmV0dXJuIE0oQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0saHI9KCk9Pnt9LHdyPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSx2QT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFVlPSIwMTIzNDU2Nzg5IixPZT17RElHSVQ6VWUsQUxQSEE6dkEsQUxQSEFfRElHSVQ6dkErdkEudG9VcHBlckNhc2UoKStVZX0sRHI9KEE9MTYsZT1PZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBTcihBKXtyZXR1cm4hIShBJiZSKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgYnI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKFFBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBvPU0ocik/W106e307cmV0dXJuICQociwoaSxJKT0+e2xldCBsPXQoaSxuKzEpOyFYKGwpJiYob1tJXT1sKX0pLGVbbl09dm9pZCAwLG99fXJldHVybiByfTtyZXR1cm4gdChBLDApfSxrcj1OKCJBc3luY0Z1bmN0aW9uIiksUnI9QT0+QSYmKFFBKEEpfHxSKEEpKSYmUihBLnRoZW4pJiZSKEEuY2F0Y2gpLGE9e2lzQXJyYXk6TSxpc0FycmF5QnVmZmVyOk5lLGlzQnVmZmVyOlp0LGlzRm9ybURhdGE6aXIsaXNBcnJheUJ1ZmZlclZpZXc6WHQsaXNTdHJpbmc6JHQsaXNOdW1iZXI6VGUsaXNCb29sZWFuOkFyLGlzT2JqZWN0OlFBLGlzUGxhaW5PYmplY3Q6bEEsaXNVbmRlZmluZWQ6WCxpc0RhdGU6ZXIsaXNGaWxlOnRyLGlzQmxvYjpycixpc1JlZ0V4cDpkcixpc0Z1bmN0aW9uOlIsaXNTdHJlYW06b3IsaXNVUkxTZWFyY2hQYXJhbXM6c3IsaXNUeXBlZEFycmF5OkVyLGlzRmlsZUxpc3Q6bnIsZm9yRWFjaDokLG1lcmdlOmpBLGV4dGVuZDpJcix0cmltOmFyLHN0cmlwQk9NOmdyLGluaGVyaXRzOkNyLHRvRmxhdE9iamVjdDpCcixraW5kT2Y6Y0Esa2luZE9mVGVzdDpOLGVuZHNXaXRoOmxyLHRvQXJyYXk6Y3IsZm9yRWFjaEVudHJ5OlFyLG1hdGNoQWxsOnVyLGlzSFRNTEZvcm06ZnIsaGFzT3duUHJvcGVydHk6RmUsaGFzT3duUHJvcDpGZSxyZWR1Y2VEZXNjcmlwdG9yczpQZSxmcmVlemVNZXRob2RzOm1yLHRvT2JqZWN0U2V0OnlyLHRvQ2FtZWxDYXNlOnByLG5vb3A6aHIsdG9GaW5pdGVOdW1iZXI6d3IsZmluZEtleTpHZSxnbG9iYWw6TGUsaXNDb250ZXh0RGVmaW5lZDp4ZSxBTFBIQUJFVDpPZSxnZW5lcmF0ZVN0cmluZzpEcixpc1NwZWNDb21wbGlhbnRGb3JtOlNyLHRvSlNPTk9iamVjdDpicixpc0FzeW5jRm46a3IsaXNUaGVuYWJsZTpScn07ZnVuY3Rpb24gSChBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1hLmluaGVyaXRzKEgsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzphLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBKZT1ILnByb3RvdHlwZSxNZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntNZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhILE1lKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoSmUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7SC5mcm9tPShBLGUsdCxyLG4sbyk9PntsZXQgaT1PYmplY3QuY3JlYXRlKEplKTtyZXR1cm4gYS50b0ZsYXRPYmplY3QoQSxpLGZ1bmN0aW9uKGwpe3JldHVybiBsIT09RXJyb3IucHJvdG90eXBlfSxJPT5JIT09ImlzQXhpb3NFcnJvciIpLEguY2FsbChpLEEubWVzc2FnZSxlLHQscixuKSxpLmNhdXNlPUEsaS5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGksbyksaX07dmFyIGY9SDt2YXIgdUE9bnVsbDtmdW5jdGlvbiB6QShBKXtyZXR1cm4gYS5pc1BsYWluT2JqZWN0KEEpfHxhLmlzQXJyYXkoQSl9ZnVuY3Rpb24gWWUoQSl7cmV0dXJuIGEuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gSGUoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLG8pe3JldHVybiBuPVllKG4pLCF0JiZvPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBGcihBKXtyZXR1cm4gYS5pc0FycmF5KEEpJiYhQS5zb21lKHpBKX12YXIgVXI9YS50b0ZsYXRPYmplY3QoYSx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIE5yKEEsZSx0KXtpZighYS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyh1QXx8Rm9ybURhdGEpLHQ9YS50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsdSl7cmV0dXJuIWEuaXNVbmRlZmluZWQodVtjXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fGcsbz10LmRvdHMsaT10LmluZGV4ZXMsbD0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZhLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWEuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIEIoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoYS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighbCYmYS5pc0Jsb2IoRSkpdGhyb3cgbmV3IGYoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGEuaXNBcnJheUJ1ZmZlcihFKXx8YS5pc1R5cGVkQXJyYXkoRSk/bCYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIGcoRSxjLHUpe2xldCBkPUU7aWYoRSYmIXUmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoYS5lbmRzV2l0aChjLCJ7fSIpKWM9cj9jOmMuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGEuaXNBcnJheShFKSYmRnIoRSl8fChhLmlzRmlsZUxpc3QoRSl8fGEuZW5kc1dpdGgoYywiW10iKSkmJihkPWEudG9BcnJheShFKSkpcmV0dXJuIGM9WWUoYyksZC5mb3JFYWNoKGZ1bmN0aW9uKFUsRnQpeyEoYS5pc1VuZGVmaW5lZChVKXx8VT09PW51bGwpJiZlLmFwcGVuZChpPT09ITA/SGUoW2NdLEZ0LG8pOmk9PT1udWxsP2M6YysiW10iLEIoVSkpfSksITF9cmV0dXJuIHpBKEUpPyEwOihlLmFwcGVuZChIZSh1LGMsbyksQihFKSksITEpfWxldCBzPVtdLFE9T2JqZWN0LmFzc2lnbihVcix7ZGVmYXVsdFZpc2l0b3I6Zyxjb252ZXJ0VmFsdWU6Qixpc1Zpc2l0YWJsZTp6QX0pO2Z1bmN0aW9uIEMoRSxjKXtpZighYS5pc1VuZGVmaW5lZChFKSl7aWYocy5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTtzLnB1c2goRSksYS5mb3JFYWNoKEUsZnVuY3Rpb24oZCxGKXsoIShhLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJm4uY2FsbChlLGQsYS5pc1N0cmluZyhGKT9GLnRyaW0oKTpGLGMsUSkpPT09ITAmJkMoZCxjP2MuY29uY2F0KEYpOltGXSl9KSxzLnBvcCgpfX1pZighYS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEMoQSksZX12YXIgTD1OcjtmdW5jdGlvbiBxZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIEtlKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmTChBLHRoaXMsZSl9dmFyIFdlPUtlLnByb3RvdHlwZTtXZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07V2UudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscixxZSl9OnFlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBmQT1LZTtmdW5jdGlvbiBUcihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBBQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fFRyLG49dCYmdC5zZXJpYWxpemUsbztpZihuP289bihlLHQpOm89YS5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGZBKGUsdCkudG9TdHJpbmcociksbyl7bGV0IGk9QS5pbmRleE9mKCIjIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFZBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXthLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sWkE9VkE7dmFyIHBBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgdmU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmZBO3ZhciBqZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIF9lPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIHplPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOnZlLEZvcm1EYXRhOmplLEJsb2I6X2V9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWEE9e307TnQoWEEse2hhc0Jyb3dzZXJFbnY6KCk9PlZlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+R3IsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Mcn0pO3ZhciBWZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixHcj0oQT0+VmUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxMcj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLlhBLC4uLnplfTtmdW5jdGlvbiAkQShBLGUpe3JldHVybiBMKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixvKXtyZXR1cm4gdy5pc05vZGUmJmEuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiB4cihBKXtyZXR1cm4gYS5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIFByKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLG87Zm9yKHI9MDtyPG47cisrKW89dFtyXSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gT3IoQSl7ZnVuY3Rpb24gZSh0LHIsbixvKXtsZXQgaT10W28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBJPU51bWJlci5pc0Zpbml0ZSgraSksbD1vPj10Lmxlbmd0aDtyZXR1cm4gaT0haSYmYS5pc0FycmF5KG4pP24ubGVuZ3RoOmksbD8oYS5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSxyXTpuW2ldPXIsIUkpOigoIW5baV18fCFhLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUodCxyLG5baV0sbykmJmEuaXNBcnJheShuW2ldKSYmKG5baV09UHIobltpXSkpLCFJKX1pZihhLmlzRm9ybURhdGEoQSkmJmEuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gYS5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoeHIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgZEE9T3I7ZnVuY3Rpb24gSnIoQSxlLHQpe2lmKGEuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxhLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIEFlPXt0cmFuc2l0aW9uYWw6cEEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPWEuaXNPYmplY3QoZSk7aWYobyYmYS5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLGEuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShkQShlKSk6ZTtpZihhLmlzQXJyYXlCdWZmZXIoZSl8fGEuaXNCdWZmZXIoZSl8fGEuaXNTdHJlYW0oZSl8fGEuaXNGaWxlKGUpfHxhLmlzQmxvYihlKSlyZXR1cm4gZTtpZihhLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihhLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgSTtpZihvKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiAkQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEk9YS5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBsPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gTChJP3siZmlsZXNbXSI6ZX06ZSxsJiZuZXcgbCx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxKcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8QWUudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJmEuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgaT0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChJKXtpZihpKXRocm93IEkubmFtZT09PSJTeW50YXhFcnJvciI/Zi5mcm9tKEksZi5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpJfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07YS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntBZS5oZWFkZXJzW0FdPXt9fSk7dmFyIFk9QWU7dmFyIE1yPWEudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksWmU9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihpKXtuPWkuaW5kZXhPZigiOiIpLHQ9aS5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPWkuc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJk1yW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIFhlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gZUEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBtQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6YS5pc0FycmF5KEEpP0EubWFwKG1BKTpTdHJpbmcoQSl9ZnVuY3Rpb24gSHIoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIFlyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIGVlKEEsZSx0LHIsbil7aWYoYS5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhYS5pc1N0cmluZyhlKSl7aWYoYS5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYoYS5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBxcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBLcihBLGUpe2xldCB0PWEudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLG8saSl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixvLGkpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBxPWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBvKEksbCxCKXtsZXQgZz1lQShsKTtpZighZyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IHM9YS5maW5kS2V5KG4sZyk7KCFzfHxuW3NdPT09dm9pZCAwfHxCPT09ITB8fEI9PT12b2lkIDAmJm5bc10hPT0hMSkmJihuW3N8fGxdPW1BKEkpKX1sZXQgaT0oSSxsKT0+YS5mb3JFYWNoKEksKEIsZyk9Pm8oQixnLGwpKTtyZXR1cm4gYS5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9pKGUsdCk6YS5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhWXIoZSk/aShaZShlKSx0KTplIT1udWxsJiZvKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9YS5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIEhyKG4pO2lmKGEuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihhLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9YS5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxlZSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBvKGkpe2lmKGk9ZUEoaSksaSl7bGV0IEk9YS5maW5kS2V5KHIsaSk7SSYmKCF0fHxlZShyLHJbSV0sSSx0KSkmJihkZWxldGUgcltJXSxuPSEwKX19cmV0dXJuIGEuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBvPXRbcl07KCFlfHxlZSh0aGlzLHRoaXNbb10sbyxlLCEwKSkmJihkZWxldGUgdGhpc1tvXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBhLmZvckVhY2godGhpcywobixvKT0+e2xldCBpPWEuZmluZEtleShyLG8pO2lmKGkpe3RbaV09bUEobiksZGVsZXRlIHRbb107cmV0dXJufWxldCBJPWU/cXIobyk6U3RyaW5nKG8pLnRyaW0oKTtJIT09byYmZGVsZXRlIHRbb10sdFtJXT1tQShuKSxyW0ldPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGEuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZhLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbWGVdPXRoaXNbWGVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBvKGkpe2xldCBJPWVBKGkpO3JbSV18fChLcihuLGkpLHJbSV09ITApfXJldHVybiBhLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksdGhpc319O3EuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2EucmVkdWNlRGVzY3JpcHRvcnMocS5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7YS5mcmVlemVNZXRob2RzKHEpO3ZhciBEPXE7ZnVuY3Rpb24gdEEoQSxlKXtsZXQgdD10aGlzfHxZLHI9ZXx8dCxuPUQuZnJvbShyLmhlYWRlcnMpLG89ci5kYXRhO3JldHVybiBhLmZvckVhY2goQSxmdW5jdGlvbihJKXtvPUkuY2FsbCh0LG8sbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiAkZShBLGUsdCl7Zi5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixmLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9YS5pbmhlcml0cygkZSxmLHtfX0NBTkNFTF9fOiEwfSk7dmFyIHg9JGU7ZnVuY3Rpb24gdGUoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgZigiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFtmLkVSUl9CQURfUkVRVUVTVCxmLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciBBdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLG8pe2xldCBpPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO2EuaXNOdW1iZXIodCkmJmkucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLGEuaXNTdHJpbmcocikmJmkucHVzaCgicGF0aD0iK3IpLGEuaXNTdHJpbmcobikmJmkucHVzaCgiZG9tYWluPSIrbiksbz09PSEwJiZpLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1pLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiByZShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIG5lKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBuQShBLGUpe3JldHVybiBBJiYhcmUoZSk/bmUoQSxlKTplfXZhciBldD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKG8pe2xldCBpPW87cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IEk9YS5pc1N0cmluZyhpKT9uKGkpOmk7cmV0dXJuIEkucHJvdG9jb2w9PT1yLnByb3RvY29sJiZJLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIG9lKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBXcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxvPTAsaTtyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGwpe2xldCBCPURhdGUubm93KCksZz1yW29dO2l8fChpPUIpLHRbbl09bCxyW25dPUI7bGV0IHM9byxRPTA7Zm9yKDtzIT09bjspUSs9dFtzKytdLHM9cyVBO2lmKG49KG4rMSklQSxuPT09byYmKG89KG8rMSklQSksQi1pPGUpcmV0dXJuO2xldCBDPWcmJkItZztyZXR1cm4gQz9NYXRoLnJvdW5kKFEqMWUzL0MpOnZvaWQgMH19dmFyIHR0PVdyO2Z1bmN0aW9uIHJ0KEEsZSl7bGV0IHQ9MCxyPXR0KDUwLDI1MCk7cmV0dXJuIG49PntsZXQgbz1uLmxvYWRlZCxpPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxJPW8tdCxsPXIoSSksQj1vPD1pO3Q9bztsZXQgZz17bG9hZGVkOm8sdG90YWw6aSxwcm9ncmVzczppP28vaTp2b2lkIDAsYnl0ZXM6SSxyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmaSYmQj8oaS1vKS9sOnZvaWQgMCxldmVudDpufTtnW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShnKX19dmFyIHZyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsbnQ9dnImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxvPUQuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOkl9PUEsbDtmdW5jdGlvbiBCKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShsKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpfWxldCBnO2lmKGEuaXNGb3JtRGF0YShuKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KW8uc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKGc9by5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1nP2cuc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtvLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBzPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO28uc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgUT1uQShBLmJhc2VVUkwsQS51cmwpO3Mub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEFBKFEsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCkscy50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBDKCl7aWYoIXMpcmV0dXJuO2xldCBjPUQuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHMmJnMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGQ9e2RhdGE6IWl8fGk9PT0idGV4dCJ8fGk9PT0ianNvbiI/cy5yZXNwb25zZVRleHQ6cy5yZXNwb25zZSxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6c307dGUoZnVuY3Rpb24oVSl7dChVKSxCKCl9LGZ1bmN0aW9uKFUpe3IoVSksQigpfSxkKSxzPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBzP3Mub25sb2FkZW5kPUM6cy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshc3x8cy5yZWFkeVN0YXRlIT09NHx8cy5zdGF0dXM9PT0wJiYhKHMucmVzcG9uc2VVUkwmJnMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KEMpfSxzLm9uYWJvcnQ9ZnVuY3Rpb24oKXtzJiYocihuZXcgZigiUmVxdWVzdCBhYm9ydGVkIixmLkVDT05OQUJPUlRFRCxBLHMpKSxzPW51bGwpfSxzLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBmKCJOZXR3b3JrIEVycm9yIixmLkVSUl9ORVRXT1JLLEEscykpLHM9bnVsbH0scy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgdT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsZD1BLnRyYW5zaXRpb25hbHx8cEE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYodT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IGYodSxkLmNsYXJpZnlUaW1lb3V0RXJyb3I/Zi5FVElNRURPVVQ6Zi5FQ09OTkFCT1JURUQsQSxzKSkscz1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmEuaXNGdW5jdGlvbihJKSYmKEk9SShBKSksSXx8SSE9PSExJiZldChRKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJkF0LnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmby5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1uPT09dm9pZCAwJiZvLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmEuZm9yRWFjaChvLnRvSlNPTigpLGZ1bmN0aW9uKHUsZCl7cy5zZXRSZXF1ZXN0SGVhZGVyKGQsdSl9KSxhLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KHMud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLGkmJmkhPT0ianNvbiImJihzLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZzLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixydChBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscnQoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGw9Yz0+e3MmJihyKCFjfHxjLnR5cGU/bmV3IHgobnVsbCxBLHMpOmMpLHMuYWJvcnQoKSxzPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShsKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/bCgpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixsKSkpO2xldCBFPW9lKFEpO2lmKEUmJncucHJvdG9jb2xzLmluZGV4T2YoRSk9PT0tMSl7cihuZXcgZigiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitFKyI6IixmLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufXMuc2VuZChufHxudWxsKX0pfTt2YXIgaWU9e2h0dHA6dUEseGhyOm50fTthLmZvckVhY2goaWUsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgb3Q9QT0+YC0gJHtBfWAsanI9QT0+YS5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLHlBPXtnZXRBZGFwdGVyOkE9PntBPWEuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBvPTA7bzxlO28rKyl7dD1BW29dO2xldCBpO2lmKHI9dCwhanIodCkmJihyPWllWyhpPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IGYoYFVua25vd24gYWRhcHRlciAnJHtpfSdgKTtpZihyKWJyZWFrO25baXx8IiMiK29dPXJ9aWYoIXIpe2xldCBvPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW0ksbF0pPT5gYWRhcHRlciAke0l9IGArKGw9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxpPWU/by5sZW5ndGg+MT9gc2luY2UgOgpgK28ubWFwKG90KS5qb2luKGAKYCk6IiAiK290KG9bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGYoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6aWV9O2Z1bmN0aW9uIHNlKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyB4KG51bGwsQSl9ZnVuY3Rpb24gaEEoQSl7cmV0dXJuIHNlKEEpLEEuaGVhZGVycz1ELmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9dEEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLHlBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxZLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIHNlKEEpLHIuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9RC5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIHJBKHIpfHwoc2UoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9RC5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBpdD1BPT5BIGluc3RhbmNlb2YgRD97Li4uQX06QTtmdW5jdGlvbiBUKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKEIsZyxzKXtyZXR1cm4gYS5pc1BsYWluT2JqZWN0KEIpJiZhLmlzUGxhaW5PYmplY3QoZyk/YS5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxCLGcpOmEuaXNQbGFpbk9iamVjdChnKT9hLm1lcmdlKHt9LGcpOmEuaXNBcnJheShnKT9nLnNsaWNlKCk6Z31mdW5jdGlvbiBuKEIsZyxzKXtpZihhLmlzVW5kZWZpbmVkKGcpKXtpZighYS5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQixzKX1lbHNlIHJldHVybiByKEIsZyxzKX1mdW5jdGlvbiBvKEIsZyl7aWYoIWEuaXNVbmRlZmluZWQoZykpcmV0dXJuIHIodm9pZCAwLGcpfWZ1bmN0aW9uIGkoQixnKXtpZihhLmlzVW5kZWZpbmVkKGcpKXtpZighYS5pc1VuZGVmaW5lZChCKSlyZXR1cm4gcih2b2lkIDAsQil9ZWxzZSByZXR1cm4gcih2b2lkIDAsZyl9ZnVuY3Rpb24gSShCLGcscyl7aWYocyBpbiBlKXJldHVybiByKEIsZyk7aWYocyBpbiBBKXJldHVybiByKHZvaWQgMCxCKX1sZXQgbD17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6aSx0cmFuc2Zvcm1SZXF1ZXN0OmksdHJhbnNmb3JtUmVzcG9uc2U6aSxwYXJhbXNTZXJpYWxpemVyOmksdGltZW91dDppLHRpbWVvdXRNZXNzYWdlOmksd2l0aENyZWRlbnRpYWxzOmksd2l0aFhTUkZUb2tlbjppLGFkYXB0ZXI6aSxyZXNwb25zZVR5cGU6aSx4c3JmQ29va2llTmFtZTppLHhzcmZIZWFkZXJOYW1lOmksb25VcGxvYWRQcm9ncmVzczppLG9uRG93bmxvYWRQcm9ncmVzczppLGRlY29tcHJlc3M6aSxtYXhDb250ZW50TGVuZ3RoOmksbWF4Qm9keUxlbmd0aDppLGJlZm9yZVJlZGlyZWN0OmksdHJhbnNwb3J0OmksaHR0cEFnZW50OmksaHR0cHNBZ2VudDppLGNhbmNlbFRva2VuOmksc29ja2V0UGF0aDppLHJlc3BvbnNlRW5jb2Rpbmc6aSx2YWxpZGF0ZVN0YXR1czpJLGhlYWRlcnM6KEIsZyk9Pm4oaXQoQiksaXQoZyksITApfTtyZXR1cm4gYS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24oZyl7bGV0IHM9bFtnXXx8bixRPXMoQVtnXSxlW2ddLGcpO2EuaXNVbmRlZmluZWQoUSkmJnMhPT1JfHwodFtnXT1RKX0pLHR9dmFyIHdBPSIxLjYuOCI7dmFyIGFlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e2FlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBzdD17fTthZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4obyxpKXtyZXR1cm4iW0F4aW9zIHYiK3dBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIraSsocj8iLiAiK3I6IiIpfXJldHVybihvLGksSSk9PntpZihlPT09ITEpdGhyb3cgbmV3IGYobihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxmLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXN0W2ldJiYoc3RbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxpLEkpOiEwfX07ZnVuY3Rpb24gX3IoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgZigib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsZi5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBvPXJbbl0saT1lW29dO2lmKGkpe2xldCBJPUFbb10sbD1JPT09dm9pZCAwfHxpKEksbyxBKTtpZihsIT09ITApdGhyb3cgbmV3IGYoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrbCxmLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IGYoIlVua25vd24gb3B0aW9uICIrbyxmLkVSUl9CQURfT1BUSU9OKX19dmFyIERBPXthc3NlcnRPcHRpb25zOl9yLHZhbGlkYXRvcnM6YWV9O3ZhciBQPURBLnZhbGlkYXRvcnMsSz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IFpBLHJlc3BvbnNlOm5ldyBaQX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IG89bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9vJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK28pOnIuc3RhY2s9b310aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9VCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczpvfT10O3IhPT12b2lkIDAmJkRBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6UC50cmFuc2l0aW9uYWwoUC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpQLnRyYW5zaXRpb25hbChQLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6UC50cmFuc2l0aW9uYWwoUC5ib29sZWFuKX0sITEpLG4hPW51bGwmJihhLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06REEuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6UC5mdW5jdGlvbixzZXJpYWxpemU6UC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1vJiZhLm1lcmdlKG8uY29tbW9uLG9bdC5tZXRob2RdKTtvJiZhLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBvW0VdfSksdC5oZWFkZXJzPUQuY29uY2F0KGksbyk7bGV0IEk9W10sbD0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChsPWwmJmMuc3luY2hyb25vdXMsSS51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBCPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7Qi5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IGcscz0wLFE7aWYoIWwpe2xldCBFPVtoQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLEkpLEUucHVzaC5hcHBseShFLEIpLFE9RS5sZW5ndGgsZz1Qcm9taXNlLnJlc29sdmUodCk7czxROylnPWcudGhlbihFW3MrK10sRVtzKytdKTtyZXR1cm4gZ31RPUkubGVuZ3RoO2xldCBDPXQ7Zm9yKHM9MDtzPFE7KXtsZXQgRT1JW3MrK10sYz1JW3MrK107dHJ5e0M9RShDKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e2c9aEEuY2FsbCh0aGlzLEMpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iocz0wLFE9Qi5sZW5ndGg7czxROylnPWcudGhlbihCW3MrK10sQltzKytdKTtyZXR1cm4gZ31nZXRVcmkoZSl7ZT1UKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gQUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07YS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtLLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoVChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7YS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24obyxpLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoVChJfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6aX0pKX19Sy5wcm90b3R5cGVbZV09dCgpLEsucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBvQT1LO3ZhciBJZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7dD1vfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IG89ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspci5fbGlzdGVuZXJzW29dKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBvLGk9bmV3IFByb21pc2UoST0+e3Iuc3Vic2NyaWJlKEkpLG89SX0pLnRoZW4obik7cmV0dXJuIGkuY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShvKX0saX0sZShmdW5jdGlvbihvLGksSSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgeChvLGksSSksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0sYXQ9SWU7ZnVuY3Rpb24gZ2UoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIENlKEEpe3JldHVybiBhLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBCZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQmUpLmZvckVhY2goKFtBLGVdKT0+e0JlW2VdPUF9KTt2YXIgSXQ9QmU7ZnVuY3Rpb24gZ3QoQSl7bGV0IGU9bmV3IG9BKEEpLHQ9WihvQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gYS5leHRlbmQodCxvQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGEuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGd0KFQoQSxuKSl9LHR9dmFyIG09Z3QoWSk7bS5BeGlvcz1vQTttLkNhbmNlbGVkRXJyb3I9eDttLkNhbmNlbFRva2VuPWF0O20uaXNDYW5jZWw9ckE7bS5WRVJTSU9OPXdBO20udG9Gb3JtRGF0YT1MO20uQXhpb3NFcnJvcj1mO20uQ2FuY2VsPW0uQ2FuY2VsZWRFcnJvcjttLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O20uc3ByZWFkPWdlO20uaXNBeGlvc0Vycm9yPUNlO20ubWVyZ2VDb25maWc9VDttLkF4aW9zSGVhZGVycz1EO20uZm9ybVRvSlNPTj1BPT5kQShhLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO20uZ2V0QWRhcHRlcj15QS5nZXRBZGFwdGVyO20uSHR0cFN0YXR1c0NvZGU9SXQ7bS5kZWZhdWx0PW07dmFyIFc9bTt2YXJ7QXhpb3M6TXMsQXhpb3NFcnJvcjpIcyxDYW5jZWxlZEVycm9yOllzLGlzQ2FuY2VsOnFzLENhbmNlbFRva2VuOktzLFZFUlNJT046V3MsYWxsOnZzLENhbmNlbDpqcyxpc0F4aW9zRXJyb3I6X3Msc3ByZWFkOnpzLHRvRm9ybURhdGE6VnMsQXhpb3NIZWFkZXJzOlpzLEh0dHBTdGF0dXNDb2RlOlhzLGZvcm1Ub0pTT046JHMsZ2V0QWRhcHRlcjpBYSxtZXJnZUNvbmZpZzplYX09Vzthc3luYyBmdW5jdGlvbiB6cihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgVy5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihvLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBpQT16cjtmdW5jdGlvbiBDdChBKXtsZXQgZT1LQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3FBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIFZyKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgbz1BO3JldHVybiBvLndvcmtlclByb3h5IT09dm9pZCAwPyhyPW8ud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOm99KTpDdChBKX1sZXQgbj1hd2FpdCBpQShlLHQpO3JldHVybiBDdChuKX12YXIgQnQ9VnI7YXN5bmMgZnVuY3Rpb24gWnIoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLGk9KGF3YWl0IFcuZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Oml9KX12YXIgbHQ9WnI7dmFyIGN0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciB1dD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixFdD1uZXcgVGV4dEVuY29kZXIsUXQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIFhyKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxvPUEuZnNfc3RhdChlKS5zaXplLGk9bnVsbDt1dD9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTppPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgST1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKHIsSSwwLG8sMCksQS5mc19jbG9zZShyKSxJfWZ1bmN0aW9uIGZ0KEEsZSx0KXtsZXQgcj1udWxsO3V0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KG8pLG59ZnVuY3Rpb24gaChBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIHYoQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixvLG4pfWZ1bmN0aW9uIGsoQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxpPWZ0KEEsbixvKTtyZXR1cm4gYihyLGkuYnVmZmVyKX1mdW5jdGlvbiBsZShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gJHIoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEIsZyl7c3dpdGNoKEIudHlwZSl7Y2FzZSBwLlRleHRTdHJlYW06e2xldCBzPUV0LmVuY29kZShCLmRhdGEuZGF0YSksUT1oKEEscyxnLDApLEM9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTt2KEEsQyxnKTticmVha31jYXNlIHAuSnNvbkNvbXBhdGlibGU6e2xldCBzPUV0LmVuY29kZShKU09OLnN0cmluZ2lmeShCLmRhdGEpKSxRPWgoQSxzLGcsMCksQz17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O3YoQSxDLGcpO2JyZWFrfWNhc2UgcC5CaW5hcnlTdHJlYW06e2xldCBzPUIuZGF0YS5kYXRhLFE9aChBLHMsZywwKSxDPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07dihBLEMsZyk7YnJlYWt9Y2FzZSBwLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShCLmRhdGEucGF0aCxCLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBwLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEIuZGF0YS5wYXRoLEIuZGF0YS5kYXRhKTticmVha31jYXNlIHAuSW1hZ2U6e2xldCBzPUIuZGF0YSxRPWgoQSxzLmRhdGEsZywwKSxDPWgoQSxzLmRpcmVjdGlvbixnLDEpLEU9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbWV0YWRhdGE6RX07dihBLGMsZyk7YnJlYWt9Y2FzZSBwLk1lc2g6e2xldCBzPUIuZGF0YSxRPWgoQSxzLnBvaW50cyxnLDApLEM9aChBLHMuY2VsbHMsZywxKSxFPWgoQSxzLnBvaW50RGF0YSxnLDIpLGM9aChBLHMuY2VsbERhdGEsZywzKSx1PXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07dihBLHUsZyk7YnJlYWt9Y2FzZSBwLlBvbHlEYXRhOntsZXQgcz1CLmRhdGEsUT1oKEEscy5wb2ludHMsZywwKSxDPWgoQSxzLnZlcnRpY2VzLGcsMSksRT1oKEEscy5saW5lcyxnLDIpLGM9aChBLHMucG9seWdvbnMsZywzKSx1PWgoQSxzLnRyaWFuZ2xlU3RyaXBzLGcsNCksZD1oKEEscy5wb2ludERhdGEsZyw1KSxGPWgoQSxzLnBvaW50RGF0YSxnLDYpLFU9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07dihBLFUsZyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEIpe3Rocm93IHR5cGVvZiBCPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEIpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEJ9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLEk9QS5nZXRNb2R1bGVTdGRlcnIoKSxsPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZvPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEIsZyl7bGV0IHM9bnVsbDtzd2l0Y2goQi50eXBlKXtjYXNlIHAuVGV4dFN0cmVhbTp7bGV0IEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxnLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixDLEUpO3M9e2RhdGE6UXQuZGVjb2RlKGMpfTticmVha31jYXNlIHAuSnNvbkNvbXBhdGlibGU6e2xldCBDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGcsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQyxFKTtzPUpTT04ucGFyc2UoUXQuZGVjb2RlKGMpKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxnLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGcsMF0pO3M9e2RhdGE6ZnQoQSxDLEUpfTticmVha31jYXNlIHAuVGV4dEZpbGU6e3M9e3BhdGg6Qi5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEIuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBwLkJpbmFyeUZpbGU6e3M9e3BhdGg6Qi5kYXRhLnBhdGgsZGF0YTpYcihBLEIuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgQz1sZShBLGcpO0MuZGF0YT1rKEEsZywwLEMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEMuZGlyZWN0aW9uPWsoQSxnLDEsUy5GbG9hdDY0KSxDLm1ldGFkYXRhPW5ldyBNYXAoQy5tZXRhZGF0YSkscz1DO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgQz1sZShBLGcpO0MubnVtYmVyT2ZQb2ludHM+MD9DLnBvaW50cz1rKEEsZywwLEMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpDLnBvaW50cz1iKEMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZkNlbGxzPjA/Qy5jZWxscz1rKEEsZywxLEMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkMuY2VsbHM9YihDLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qy5wb2ludERhdGE9ayhBLGcsMixDLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpDLnBvaW50RGF0YT1iKEMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxDLm51bWJlck9mQ2VsbFBpeGVscz4wP0MuY2VsbERhdGE9ayhBLGcsMyxDLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkMuY2VsbERhdGE9YihDLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUM7YnJlYWt9Y2FzZSBwLlBvbHlEYXRhOntsZXQgQz1sZShBLGcpO0MubnVtYmVyT2ZQb2ludHM+MD9DLnBvaW50cz1rKEEsZywwLFMuRmxvYXQzMik6Qy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxDLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0MudmVydGljZXM9ayhBLGcsMSx5LlVJbnQzMik6Qy52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQy5saW5lc0J1ZmZlclNpemU+MD9DLmxpbmVzPWsoQSxnLDIseS5VSW50MzIpOkMubGluZXM9bmV3IFVpbnQzMkFycmF5LEMucG9seWdvbnNCdWZmZXJTaXplPjA/Qy5wb2x5Z29ucz1rKEEsZywzLHkuVUludDMyKTpDLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxDLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0MudHJpYW5nbGVTdHJpcHM9ayhBLGcsNCx5LlVJbnQzMik6Qy50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qy5wb2ludERhdGE9ayhBLGcsNSxDLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qy5wb2ludERhdGE9YihDLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEMubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qy5jZWxsRGF0YT1rKEEsZyw2LEMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkMuY2VsbERhdGE9YihDLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1DO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IFE9e3R5cGU6Qi50eXBlLGRhdGE6c307bC5wdXNoKFEpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omksc3RkZXJyOkksb3V0cHV0czpsfX12YXIgcHQ9JHI7dmFyIEFuPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBlbihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCByPTA7cjxBLmxlbmd0aDtyKyspe2xldCBuPXRuKEFbcl0sZSk7biE9PW51bGwmJnQucHVzaChuKX1yZXR1cm4gdH1mdW5jdGlvbiB0bihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLEFuJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3Q6dC5zbGljZSgwKX12YXIgZHQ9ZW47ZnVuY3Rpb24gcm4oQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIG10PXJuO2Z1bmN0aW9uIG5uKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB5dD1ubjtmdW5jdGlvbiBvbihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgaHQ9b247dmFyIHNuO2Z1bmN0aW9uIFNBKCl7cmV0dXJuIHNufXZhciBhbjtmdW5jdGlvbiB3dCgpe3JldHVybiBhbn12YXIgSW47ZnVuY3Rpb24gYkEoKXtyZXR1cm4gSW59dmFyIGNlPW5ldyBNYXA7ZnVuY3Rpb24gZ24oKXtsZXQgQT1iQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gRHQoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBrQSgpe2xldCBBPXd0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24gQ24oQSxlLHQpe2xldCByPUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHI9bmV3IFVSTChBLmhyZWYpLG49ci5ocmVmKSxjZS5oYXMobikpcmV0dXJuIGNlLmdldChuKTt7bGV0IG89YXdhaXQgbHQoQSxlPy50b1N0cmluZygpPz9EdCgpLHQ/P2tBKCkpO3JldHVybiBjZS5zZXQobixvKSxvfX1hc3luYyBmdW5jdGlvbiBCbihBLGUsdCxyLG4pe2lmKCFhd2FpdCBjdCgpKXtsZXQgdT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQodSksbmV3IEVycm9yKHUpfWxldCBvPW4/LndlYldvcmtlcj8/bnVsbDtpZihvPT09ITEpe2xldCB1PWF3YWl0IENuKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7cmV0dXJuIHB0KHUsZSx0LHIpfWxldCBpPW8sST1uPy5waXBlbGluZVdvcmtlclVybD8/Z24oKSxsPXR5cGVvZiBJIT0ic3RyaW5nIiYmdHlwZW9mIEk/LmhyZWY8InUiP0kuaHJlZjpJLHt3b3JrZXJQcm94eTpCLHdvcmtlcjpnfT1hd2FpdCBCdChpLGwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7aT1nO2xldCBzPVtdO3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbih1KXtpZih1LnR5cGU9PT1wLkJpbmFyeVN0cmVhbSl7bGV0IGQ9dS5kYXRhLmRhdGE7cy5wdXNoKGQpfWVsc2UgaWYodS50eXBlPT09cC5CaW5hcnlGaWxlKXtsZXQgZD11LmRhdGEuZGF0YTtzLnB1c2goZCl9ZWxzZSBpZih1LnR5cGU9PT1wLkltYWdlKXtsZXQgZD11LmRhdGE7ZC5kYXRhIT09bnVsbCYmcy5wdXNoKC4uLm10KGQpKX1lbHNlIGlmKHUudHlwZT09PXAuTWVzaCl7bGV0IGQ9dS5kYXRhO3MucHVzaCguLi55dChkKSl9ZWxzZSBpZih1LnR5cGU9PT1wLlBvbHlEYXRhKXtsZXQgZD11LmRhdGE7cy5wdXNoKC4uLmh0KGQpKX19KTtsZXQgUT1uPy5waXBlbGluZUJhc2VVcmw/P0R0KCksQz10eXBlb2YgUSE9InN0cmluZyImJnR5cGVvZiBRPy5ocmVmPCJ1Ij9RLmhyZWY6USxFPXIhPW51bGw/V0EocixkdChzLG4/Lm5vQ29weSkpOm51bGwsYz1hd2FpdCBCLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxDLGUsdCxFLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P2tBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpjLnJldHVyblZhbHVlLHN0ZG91dDpjLnN0ZG91dCxzdGRlcnI6Yy5zdGRlcnIsb3V0cHV0czpjLm91dHB1dHMsd2ViV29ya2VyOml9fXZhciBzQT1Cbjt2YXIgbG49bnVsbDtmdW5jdGlvbiBTdCgpe3JldHVybiBsbn12YXIgRWUsY249YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2NvbXByZXNzLXN0cmluZ2lmeUAke1VBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gV2EoQSl7RWU9QX1mdW5jdGlvbiBSQSgpe2lmKHR5cGVvZiBFZTwidSIpcmV0dXJuIEVlO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOmNufXZhciBRZSxFbj1udWxsO2Z1bmN0aW9uIGJ0KEEpe1FlPUF9ZnVuY3Rpb24gaigpe2lmKHR5cGVvZiBRZTwidSIpcmV0dXJuIFFlO2xldCBBPWJBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOkVufXZhciBfPW51bGw7YXN5bmMgZnVuY3Rpb24ga3QoKXtsZXQgQT1qKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtfPWF3YWl0IGlBKGUpfWZ1bmN0aW9uIFhhKEEpe189QX1hc3luYyBmdW5jdGlvbiBGQSgpe2lmKF8hPT1udWxsKXJldHVybiBfLnRlcm1pbmF0ZWQmJmF3YWl0IGt0KCksXztsZXQgQT1TdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBrdCgpLF8pfWFzeW5jIGZ1bmN0aW9uIFFuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnAuQmluYXJ5U3RyZWFtfV0scj1be3R5cGU6cC5CaW5hcnlTdHJlYW0sZGF0YTp7ZGF0YTpBfX1dLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc3RyaW5naWZ5JiZlLnN0cmluZ2lmeSYmbi5wdXNoKCItLXN0cmluZ2lmeSIpLGUuY29tcHJlc3Npb25MZXZlbCYmbi5wdXNoKCItLWNvbXByZXNzaW9uLWxldmVsIixlLmNvbXByZXNzaW9uTGV2ZWwudG9TdHJpbmcoKSksZS5kYXRhVXJsUHJlZml4JiZuLnB1c2goIi0tZGF0YS11cmwtcHJlZml4IixlLmRhdGFVcmxQcmVmaXgudG9TdHJpbmcoKSk7bGV0IEk9ImNvbXByZXNzLXN0cmluZ2lmeSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgRkEoKSk7bGV0e3dlYldvcmtlcjpCLHJldHVyblZhbHVlOmcsc3RkZXJyOnMsb3V0cHV0czpRfT1hd2FpdCBzQShJLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6UkEoKSxwaXBlbGluZVdvcmtlclVybDpqKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGchPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6QixvdXRwdXQ6KFFbMF0/LmRhdGEpLmRhdGF9fXZhciB6PVFuO2FzeW5jIGZ1bmN0aW9uIHVuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOnAuQmluYXJ5U3RyZWFtfV0scj1be3R5cGU6cC5CaW5hcnlTdHJlYW0sZGF0YTp7ZGF0YTpBfX1dLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUucGFyc2VTdHJpbmcmJmUucGFyc2VTdHJpbmcmJm4ucHVzaCgiLS1wYXJzZS1zdHJpbmciKTtsZXQgST0icGFyc2Utc3RyaW5nLWRlY29tcHJlc3MiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IEZBKCkpO2xldHt3ZWJXb3JrZXI6QixyZXR1cm5WYWx1ZTpnLHN0ZGVycjpzLG91dHB1dHM6UX09YXdhaXQgc0EoSSxuLHQscix7cGlwZWxpbmVCYXNlVXJsOlJBKCkscGlwZWxpbmVXb3JrZXJVcmw6aigpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihnIT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkIsb3V0cHV0OihRWzBdPy5kYXRhKS5kYXRhfX12YXIgVj11bjthc3luYyBmdW5jdGlvbiBmbihBLGU9e30pe2xldCByPW5ldyBHQShBLmltYWdlVHlwZSk7ci5vcmlnaW49QS5vcmlnaW4sci5zcGFjaW5nPUEuc3BhY2luZyxyLnNpemU9QS5zaXplLHIubWV0YWRhdGE9QS5tZXRhZGF0YTtsZXQgbj1uZXcgVGV4dERlY29kZXIoInV0Zi04Iiksbz1uZXcgVWludDhBcnJheShBLmRpcmVjdGlvbi5idWZmZXIpLGk9YXdhaXQgeihvLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjplLndlYldvcmtlcixub0NvcHk6ZS5ub0NvcHl9KSxJPWkud2ViV29ya2VyO2lmKHIuZGlyZWN0aW9uPW4uZGVjb2RlKGkub3V0cHV0LmJ1ZmZlciksQS5kYXRhPT09bnVsbClyLmRhdGE9bnVsbDtlbHNle2xldCBsPW5ldyBVaW50OEFycmF5KEEuZGF0YS5idWZmZXIpLEI9YXdhaXQgeihsLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjpJLG5vQ29weTplLm5vQ29weX0pO3IuZGF0YT1uLmRlY29kZShCLm91dHB1dC5idWZmZXIpfXJldHVybntlbmNvZGVkOnIsd2ViV29ya2VyOkl9fWFzeW5jIGZ1bmN0aW9uIHBuKEEsZT17fSl7bGV0IHQ9QSxyPW5ldyBUZXh0RW5jb2RlcixuPW5ldyBVaW50OEFycmF5KHIuZW5jb2RlKEEuZGlyZWN0aW9uKSksbz1hd2FpdCBWKG4se3BhcnNlU3RyaW5nOiEwLHdlYldvcmtlcjplLndlYldvcmtlcixub0NvcHk6ITB9KSxpPW8ud2ViV29ya2VyO2lmKHQuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkoby5vdXRwdXQuYnVmZmVyKSwhdC5kYXRhKXQuZGF0YT1udWxsO2Vsc2V7bGV0IEk9bmV3IFVpbnQ4QXJyYXkoci5lbmNvZGUoQS5kYXRhKSksbD1hd2FpdCBWKEkse3BhcnNlU3RyaW5nOiEwLHdlYldvcmtlcjppLG5vQ29weTohMH0pO3QuZGF0YT1iKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUsbC5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZGVjb2RlZDp0LHdlYldvcmtlcjppfX1hc3luYyBmdW5jdGlvbiBkbihBLGU9e30pe2xldCByPW5ldyBQQShBLm1lc2hUeXBlKTtyLm5hbWU9QS5uYW1lLHIubnVtYmVyT2ZQb2ludHM9QS5udW1iZXJPZlBvaW50cyxyLm51bWJlck9mQ2VsbHM9QS5udW1iZXJPZkNlbGxzLHIubnVtYmVyT2ZQb2ludFBpeGVscz1BLm51bWJlck9mUG9pbnRQaXhlbHMsci5udW1iZXJPZkNlbGxQaXhlbHM9QS5udW1iZXJPZkNlbGxQaXhlbHMsci5jZWxsQnVmZmVyU2l6ZT1BLmNlbGxCdWZmZXJTaXplO2xldCBuPWUud2ViV29ya2VyLG89bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2ZvcihsZXQgaSBvZlsicG9pbnRzIiwicG9pbnREYXRhIiwiY2VsbHMiLCJjZWxsRGF0YSJdKWlmKEFbaV09PT1udWxsKXJbaV09bnVsbDtlbHNle2xldCBJPW5ldyBVaW50OEFycmF5KEFbaV0uYnVmZmVyKSxsPWF3YWl0IHooSSx7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6bixub0NvcHk6ZS5ub0NvcHl9KTtuPWwud2ViV29ya2VyLHJbaV09by5kZWNvZGUobC5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZW5jb2RlZDpyLHdlYldvcmtlcjpufX1hc3luYyBmdW5jdGlvbiBtbihBLGU9e30pe2xldCB0PUEscj1uZXcgTWFwKFtbInBvaW50cyIsInBvaW50Q29tcG9uZW50VHlwZSJdLFsicG9pbnREYXRhIiwicG9pbnRQaXhlbENvbXBvbmVudFR5cGUiXSxbImNlbGxzIiwiY2VsbENvbXBvbmVudFR5cGUiXSxbImNlbGxEYXRhIiwiY2VsbFBpeGVsQ29tcG9uZW50VHlwZSJdXSksbj1uZXcgVGV4dEVuY29kZXIsbz1lLndlYldvcmtlcjtmb3IobGV0IGkgb2ZbInBvaW50cyIsInBvaW50RGF0YSIsImNlbGxzIiwiY2VsbERhdGEiXSlpZih0W2ldPT09bnVsbCl0W2ldPW51bGw7ZWxzZXtsZXQgST1uZXcgVWludDhBcnJheShuLmVuY29kZSh0W2ldKSksbD1hd2FpdCBWKEkse3BhcnNlU3RyaW5nOiEwLHdlYldvcmtlcjpvLG5vQ29weTohMH0pO289bC53ZWJXb3JrZXIsdFtpXT1iKHQubWVzaFR5cGVbci5nZXQoaSldLGwub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2RlY29kZWQ6dCx3ZWJXb3JrZXI6b319YXN5bmMgZnVuY3Rpb24geW4oQSxlPXt9KXtsZXQgcj1uZXcgTUEoQS5wb2x5RGF0YVR5cGUpO3IubmFtZT1BLm5hbWUsci5udW1iZXJPZlBvaW50cz1BLm51bWJlck9mUG9pbnRzLHIudmVydGljZXNCdWZmZXJTaXplPUEudmVydGljZXNCdWZmZXJTaXplLHIubGluZXNCdWZmZXJTaXplPUEubGluZXNCdWZmZXJTaXplLHIucG9seWdvbnNCdWZmZXJTaXplPUEucG9seWdvbnNCdWZmZXJTaXplLHIudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPUEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHIubnVtYmVyT2ZQb2ludFBpeGVscz1BLm51bWJlck9mUG9pbnRQaXhlbHMsci5udW1iZXJPZkNlbGxQaXhlbHM9QS5udW1iZXJPZkNlbGxQaXhlbHM7bGV0IG49ZS53ZWJXb3JrZXIsbz1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJ2ZXJ0aWNlcyIsImxpbmVzIiwicG9seWdvbnMiLCJ0cmlhbmdsZVN0cmlwcyIsInBvaW50RGF0YSIsImNlbGxEYXRhIl0paWYoQVtpXT09PW51bGwpcltpXT1udWxsO2Vsc2V7bGV0IEk9bmV3IFVpbnQ4QXJyYXkoQVtpXS5idWZmZXIpLGw9YXdhaXQgeihJLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjpuLG5vQ29weTplLm5vQ29weX0pO249bC53ZWJXb3JrZXIscltpXT1vLmRlY29kZShsLm91dHB1dC5idWZmZXIpfXJldHVybntlbmNvZGVkOnIsd2ViV29ya2VyOm59fWFzeW5jIGZ1bmN0aW9uIGhuKEEsZT17fSl7bGV0IHQ9QSxyPW5ldyBNYXAoW1sicG9pbnRzIiwiZmxvYXQzMiJdLFsidmVydGljZXMiLCJ1aW50MzIiXSxbImxpbmVzIiwidWludDMyIl0sWyJwb2x5Z29ucyIsInVpbnQzMiJdLFsidHJpYW5nbGVTdHJpcHMiLCJ1aW50MzIiXSxbInBvaW50RGF0YSIsdC5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGVdLFsiY2VsbERhdGEiLHQucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGVdXSksbj1uZXcgVGV4dEVuY29kZXIsbz1lLndlYldvcmtlcjtmb3IobGV0IGkgb2ZbInBvaW50cyIsInZlcnRpY2VzIiwibGluZXMiLCJwb2x5Z29ucyIsInRyaWFuZ2xlU3RyaXBzIiwicG9pbnREYXRhIiwiY2VsbERhdGEiXSlpZih0W2ldPT09bnVsbCl0W2ldPW51bGw7ZWxzZXtsZXQgST1uZXcgVWludDhBcnJheShuLmVuY29kZSh0W2ldKSksbD1hd2FpdCBWKEkse3BhcnNlU3RyaW5nOiEwLHdlYldvcmtlcjpvLG5vQ29weTohMH0pO289bC53ZWJXb3JrZXIsdFtpXT1iKHIuZ2V0KGkpLGwub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2RlY29kZWQ6dCx3ZWJXb3JrZXI6b319dmFyIFJ0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciB0dD1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGV0PShBLEkpPT57Zm9yKHZhciB0IGluIEkpdHQoQSx0LHtnZXQ6SVt0XSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxndD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxydD1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksbUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixpdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOkkscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBvQShBLEkpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksc3QoQSl9fSxvdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBJO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ST17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319Okk9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW0ksW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQUk9bmV3IE1hcChbWyJwcm94eSIsaXRdLFsidGhyb3ciLG90XV0pO2Z1bmN0aW9uIEJ0KEEsSSl7Zm9yKGxldCB0IG9mIEEpaWYoST09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChJKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBvQShBLEk9Z2xvYmFsVGhpcyx0PVsiKiJdKXtJLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFCdCh0LGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTppLHBhdGg6c309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBDPXMuc2xpY2UoMCwtMSkucmVkdWNlKChmLG4pPT5mW25dLEEpLG89cy5yZWR1Y2UoKGYsbik9PmZbbl0sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpRPW87YnJlYWs7Y2FzZSJTRVQiOkNbcy5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9by5hcHBseShDLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IG8oLi4uYSk7UT1hdChmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6bn09bmV3IE1lc3NhZ2VDaGFubmVsO29BKEEsbiksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQyl7UT17dmFsdWU6QyxbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChDPT4oe3ZhbHVlOkMsW2VBXTowfSkpLnRoZW4oQz0+e2xldFtvLGZdPWlBKEMpO0kucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtpZDpyfSksZiksaT09PSJSRUxFQVNFIiYmKEkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksSUkoSSksbUEgaW4gQSYmdHlwZW9mIEFbbUFdPT0iZnVuY3Rpb24iJiZBW21BXSgpKX0pLmNhdGNoKEM9PntsZXRbbyxmXT1pQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7SS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOnJ9KSxmKX0pfSksSS5zdGFydCYmSS5zdGFydCgpfWZ1bmN0aW9uIEN0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIElJKEEpe0N0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gc3QoQSxJKXtyZXR1cm4gcEEoQSxbXSxJKX1mdW5jdGlvbiB0QShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gdEkoQSl7cmV0dXJuIE0oQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57SUkoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IEk9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSxJKSxJPT09MCYmdEkoQSl9KTtmdW5jdGlvbiBudChBLEkpe2xldCB0PShnQS5nZXQoSSl8fDApKzE7Z0Euc2V0KEksdCksckEmJnJBLnJlZ2lzdGVyKEEsSSxBKX1mdW5jdGlvbiBRdChBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBwQShBLEk9W10sdD1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KHQse2dldChyLGkpe2lmKHRBKGUpLGk9PT1ydClyZXR1cm4oKT0+e1F0KGcpLHRJKEEpLGU9ITB9O2lmKGk9PT0idGhlbiIpe2lmKEkubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IHM9TShBLHt0eXBlOiJHRVQiLHBhdGg6SS5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIHMudGhlbi5iaW5kKHMpfXJldHVybiBwQShBLFsuLi5JLGldKX0sc2V0KHIsaSxzKXt0QShlKTtsZXRbYSxRXT1pQShzKTtyZXR1cm4gTShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkksaV0ubWFwKEM9PkMudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixpLHMpe3RBKGUpO2xldCBhPUlbSS5sZW5ndGgtMV07aWYoYT09PWd0KXJldHVybiBNKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gcEEoQSxJLnNsaWNlKDAsLTEpKTtsZXRbUSxDXT1fQShzKTtyZXR1cm4gTShBLHt0eXBlOiJBUFBMWSIscGF0aDpJLm1hcChvPT5vLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxDKS50aGVuKGIpfSxjb25zdHJ1Y3QocixpKXt0QShlKTtsZXRbcyxhXT1fQShpKTtyZXR1cm4gTShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6SS5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6c30sYSkudGhlbihiKX19KTtyZXR1cm4gbnQoZyxBKSxnfWZ1bmN0aW9uIEV0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCBJPUEubWFwKGlBKTtyZXR1cm5bSS5tYXAodD0+dFswXSksRXQoSS5tYXAodD0+dFsxXSkpXX12YXIgZUk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSxJKXtyZXR1cm4gZUkuc2V0KEEsSSksQX1mdW5jdGlvbiBhdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gaUEoQSl7Zm9yKGxldFtJLHRdb2YgQUkpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtlLGddPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpJLHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxlSS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEFJLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gTShBLEksdCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sSSksdCl9KX1mdW5jdGlvbiBjdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLEkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KEksYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpOQX09T2JqZWN0LENBPShBPT5JPT57bGV0IHQ9ZnQuY2FsbChJKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLEk9PkNBKEkpPT09QSksc0E9QT0+ST0+dHlwZW9mIEk9PT1BLHtpc0FycmF5OnF9PUFycmF5LFo9c0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGx0KEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmUyhBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgb0k9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBEdChBKXtsZXQgSTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0k9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOkk9QSYmQS5idWZmZXImJm9JKEEuYnVmZmVyKSxJfXZhciB1dD1zQSgic3RyaW5nIiksUz1zQSgiZnVuY3Rpb24iKSxCST1zQSgibnVtYmVyIiksbkE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixodD1BPT5BPT09ITB8fEE9PT0hMSxCQT1BPT57aWYoQ0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgST1OQShBKTtyZXR1cm4oST09PW51bGx8fEk9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkdD1VKCJEYXRlIikseXQ9VSgiRmlsZSIpLHd0PVUoIkJsb2IiKSxtdD1VKCJGaWxlTGlzdCIpLHB0PUE9Pm5BKEEpJiZTKEEucGlwZSksRnQ9QT0+e2xldCBJO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFMoQS5hcHBlbmQpJiYoKEk9Q0EoQSkpPT09ImZvcm1kYXRhInx8ST09PSJvYmplY3QiJiZTKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFN0PVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJ0PUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsSSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKylJLmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGk9ci5sZW5ndGgscztmb3IoZT0wO2U8aTtlKyspcz1yW2VdLEkuY2FsbChudWxsLEFbc10scyxBKX19ZnVuY3Rpb24gQ0koQSxJKXtJPUkudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxlPXQubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9dFtlXSxJPT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBzST10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLG5JPUE9PiFaKEEpJiZBIT09c0k7ZnVuY3Rpb24gUkEoKXtsZXR7Y2FzZWxlc3M6QX09bkkodGhpcykmJnRoaXN8fHt9LEk9e30sdD0oZSxnKT0+e2xldCByPUEmJkNJKEksZyl8fGc7QkEoSVtyXSkmJkJBKGUpP0lbcl09UkEoSVtyXSxlKTpCQShlKT9JW3JdPVJBKHt9LGUpOnEoZSk/SVtyXT1lLnNsaWNlKCk6SVtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLHQpO3JldHVybiBJfXZhciBOdD0oQSxJLHQse2FsbE93bktleXM6ZX09e30pPT4oVihJLChnLHIpPT57dCYmUyhnKT9BW3JdPVcoZyx0KTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVdD1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEd0PShBLEksdCxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTpJLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LGt0PShBLEksdCxlKT0+e2xldCBnLHIsaSxzPXt9O2lmKEk9SXx8e30sQT09bnVsbClyZXR1cm4gSTtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspaT1nW3JdLCghZXx8ZShpLEEsSSkpJiYhc1tpXSYmKElbaV09QVtpXSxzW2ldPSEwKTtBPXQhPT0hMSYmTkEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsSSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEl9LEx0PShBLEksdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1JLmxlbmd0aDtsZXQgZT1BLmluZGV4T2YoSSx0KTtyZXR1cm4gZSE9PS0xJiZlPT09dH0sSnQ9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHEoQSkpcmV0dXJuIEE7bGV0IEk9QS5sZW5ndGg7aWYoIUJJKEkpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShJKTtmb3IoO0ktLSA+MDspdFtJXT1BW0ldO3JldHVybiB0fSxIdD0oQT0+ST0+QSYmSSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTkEoVWludDhBcnJheSkpLFl0PShBLEkpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTtJLmNhbGwoQSxyWzBdLHJbMV0pfX0sYnQ9KEEsSSk9PntsZXQgdCxlPVtdO2Zvcig7KHQ9QS5leGVjKEkpKSE9PW51bGw7KWUucHVzaCh0KTtyZXR1cm4gZX0sTXQ9VSgiSFRNTEZvcm1FbGVtZW50IikscXQ9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24odCxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJJPSgoe2hhc093blByb3BlcnR5OkF9KT0+KEksdCk9PkEuY2FsbChJLHQpKShPYmplY3QucHJvdG90eXBlKSxLdD1VKCJSZWdFeHAiKSxRST0oQSxJKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307Vih0LChnLHIpPT57bGV0IGk7KGk9SShnLHIsQSkpIT09ITEmJihlW3JdPWl8fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT3Q9QT0+e1FJKEEsKEksdCk9PntpZihTKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW3RdO2lmKFMoZSkpe2lmKEkuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gSSl7SS53cml0YWJsZT0hMTtyZXR1cm59SS5zZXR8fChJLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrdCsiXCciKX0pfX0pfSxUdD0oQSxJKT0+e2xldCB0PXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57dFtyXT0hMH0pfTtyZXR1cm4gcShBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KEkpKSx0fSx4dD0oKT0+e30sUHQ9KEEsSSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOkkpLFNBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsaUk9IjAxMjM0NTY3ODkiLEVJPXtESUdJVDppSSxBTFBIQTpTQSxBTFBIQV9ESUdJVDpTQStTQS50b1VwcGVyQ2FzZSgpK2lJfSxqdD0oQT0xNixJPUVJLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6ZX09STtmb3IoO0EtLTspdCs9SVtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFd0KEEpe3JldHVybiEhKEEmJlMoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBadD1BPT57bGV0IEk9bmV3IEFycmF5KDEwKSx0PShlLGcpPT57aWYobkEoZSkpe2lmKEkuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXtJW2ddPWU7bGV0IHI9cShlKT9bXTp7fTtyZXR1cm4gVihlLChpLHMpPT57bGV0IGE9dChpLGcrMSk7IVooYSkmJihyW3NdPWEpfSksSVtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiB0KEEsMCl9LFZ0PVUoIkFzeW5jRnVuY3Rpb24iKSxYdD1BPT5BJiYobkEoQSl8fFMoQSkpJiZTKEEudGhlbikmJlMoQS5jYXRjaCksQj17aXNBcnJheTpxLGlzQXJyYXlCdWZmZXI6b0ksaXNCdWZmZXI6bHQsaXNGb3JtRGF0YTpGdCxpc0FycmF5QnVmZmVyVmlldzpEdCxpc1N0cmluZzp1dCxpc051bWJlcjpCSSxpc0Jvb2xlYW46aHQsaXNPYmplY3Q6bkEsaXNQbGFpbk9iamVjdDpCQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkdCxpc0ZpbGU6eXQsaXNCbG9iOnd0LGlzUmVnRXhwOkt0LGlzRnVuY3Rpb246Uyxpc1N0cmVhbTpwdCxpc1VSTFNlYXJjaFBhcmFtczpTdCxpc1R5cGVkQXJyYXk6SHQsaXNGaWxlTGlzdDptdCxmb3JFYWNoOlYsbWVyZ2U6UkEsZXh0ZW5kOk50LHRyaW06UnQsc3RyaXBCT006VXQsaW5oZXJpdHM6R3QsdG9GbGF0T2JqZWN0Omt0LGtpbmRPZjpDQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6THQsdG9BcnJheTpKdCxmb3JFYWNoRW50cnk6WXQsbWF0Y2hBbGw6YnQsaXNIVE1MRm9ybTpNdCxoYXNPd25Qcm9wZXJ0eTpySSxoYXNPd25Qcm9wOnJJLHJlZHVjZURlc2NyaXB0b3JzOlFJLGZyZWV6ZU1ldGhvZHM6T3QsdG9PYmplY3RTZXQ6VHQsdG9DYW1lbENhc2U6cXQsbm9vcDp4dCx0b0Zpbml0ZU51bWJlcjpQdCxmaW5kS2V5OkNJLGdsb2JhbDpzSSxpc0NvbnRleHREZWZpbmVkOm5JLEFMUEhBQkVUOkVJLGdlbmVyYXRlU3RyaW5nOmp0LGlzU3BlY0NvbXBsaWFudEZvcm06V3QsdG9KU09OT2JqZWN0Olp0LGlzQXN5bmNGbjpWdCxpc1RoZW5hYmxlOlh0fTtmdW5jdGlvbiBLKEEsSSx0LGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixJJiYodGhpcy5jb2RlPUkpLHQmJih0aGlzLmNvbmZpZz10KSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUIuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkIudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGFJPUsucHJvdG90eXBlLGNJPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2NJW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssY0kpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhSSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsSSx0LGUsZyxyKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoYUkpO3JldHVybiBCLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LHM9PnMhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKGksQS5tZXNzYWdlLEksdCxlLGcpLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24oaSxyKSxpfTt2YXIgbD1LO3ZhciBRQT1udWxsO2Z1bmN0aW9uIFVBKEEpe3JldHVybiBCLmlzUGxhaW5PYmplY3QoQSl8fEIuaXNBcnJheShBKX1mdW5jdGlvbiBsSShBKXtyZXR1cm4gQi5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmSShBLEksdCl7cmV0dXJuIEE/QS5jb25jYXQoSSkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bEkoZyksIXQmJnI/IlsiK2crIl0iOmd9KS5qb2luKHQ/Ii4iOiIiKTpJfWZ1bmN0aW9uIHp0KEEpe3JldHVybiBCLmlzQXJyYXkoQSkmJiFBLnNvbWUoVUEpfXZhciBfdD1CLnRvRmxhdE9iamVjdChCLHt9LG51bGwsZnVuY3Rpb24oSSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEkpfSk7ZnVuY3Rpb24gdnQoQSxJLHQpe2lmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0k9SXx8bmV3KFFBfHxGb3JtRGF0YSksdD1CLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQi5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPXQubWV0YVRva2VucyxnPXQudmlzaXRvcnx8QyxyPXQuZG90cyxpPXQuaW5kZXhlcyxhPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkIuaXNTcGVjQ29tcGxpYW50Rm9ybShJKTtpZighQi5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihCLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZCLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQi5pc0FycmF5QnVmZmVyKEUpfHxCLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQyhFLGMsdSl7bGV0IGQ9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihCLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQi5pc0FycmF5KEUpJiZ6dChFKXx8KEIuaXNGaWxlTGlzdChFKXx8Qi5lbmRzV2l0aChjLCJbXSIpKSYmKGQ9Qi50b0FycmF5KEUpKSlyZXR1cm4gYz1sSShjKSxkLmZvckVhY2goZnVuY3Rpb24oTixJdCl7IShCLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJkkuYXBwZW5kKGk9PT0hMD9mSShbY10sSXQscik6aT09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gVUEoRSk/ITA6KEkuYXBwZW5kKGZJKHUsYyxyKSxRKEUpKSwhMSl9bGV0IG89W10sZj1PYmplY3QuYXNzaWduKF90LHtkZWZhdWx0VmlzaXRvcjpDLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOlVBfSk7ZnVuY3Rpb24gbihFLGMpe2lmKCFCLmlzVW5kZWZpbmVkKEUpKXtpZihvLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO28ucHVzaChFKSxCLmZvckVhY2goRSxmdW5jdGlvbihkLFIpeyghKEIuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmZy5jYWxsKEksZCxCLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmbihkLGM/Yy5jb25jYXQoUik6W1JdKX0pLG8ucG9wKCl9fWlmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbihBKSxJfXZhciBMPXZ0O2Z1bmN0aW9uIERJKEEpe2xldCBJPXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiBJW2VdfSl9ZnVuY3Rpb24gdUkoQSxJKXt0aGlzLl9wYWlycz1bXSxBJiZMKEEsdGhpcyxJKX12YXIgaEk9dUkucHJvdG90eXBlO2hJLmFwcGVuZD1mdW5jdGlvbihJLHQpe3RoaXMuX3BhaXJzLnB1c2goW0ksdF0pfTtoSS50b1N0cmluZz1mdW5jdGlvbihJKXtsZXQgdD1JP2Z1bmN0aW9uKGUpe3JldHVybiBJLmNhbGwodGhpcyxlLERJKX06REk7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gdChnWzBdKSsiPSIrdChnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXVJO2Z1bmN0aW9uICR0KEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSxJLHQpe2lmKCFJKXJldHVybiBBO2xldCBlPXQmJnQuZW5jb2RlfHwkdCxnPXQmJnQuc2VyaWFsaXplLHI7aWYoZz9yPWcoSSx0KTpyPUIuaXNVUkxTZWFyY2hQYXJhbXMoSSk/SS50b1N0cmluZygpOm5ldyBFQShJLHQpLnRvU3RyaW5nKGUpLHIpe2xldCBpPUEuaW5kZXhPZigiJTIzIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIEdBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoSSx0LGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpJLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoSSl7dGhpcy5oYW5kbGVyc1tJXSYmKHRoaXMuaGFuZGxlcnNbSV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChJKXtCLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmSShlKX0pfX0sa0E9R0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZEk9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5ST10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHdJPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG1JPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmRJLEZvcm1EYXRhOnlJLEJsb2I6d0l9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgTEE9e307ZXQoTEEse2hhc0Jyb3dzZXJFbnY6KCk9PnBJLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5JZX0pO3ZhciBwST10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cEkmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxJZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkxBLC4uLm1JfTtmdW5jdGlvbiBKQShBLEkpe3JldHVybiBMKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkIuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKGUsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEkpKX1mdW5jdGlvbiB0ZShBKXtyZXR1cm4gQi5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKEk9PklbMF09PT0iW10iPyIiOklbMV18fElbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCBJPXt9LHQ9T2JqZWN0LmtleXMoQSksZSxnPXQubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9dFtlXSxJW3JdPUFbcl07cmV0dXJuIEl9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gSSh0LGUsZyxyKXtsZXQgaT10W3IrK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBzPU51bWJlci5pc0Zpbml0ZSgraSksYT1yPj10Lmxlbmd0aDtyZXR1cm4gaT0haSYmQi5pc0FycmF5KGcpP2cubGVuZ3RoOmksYT8oQi5oYXNPd25Qcm9wKGcsaSk/Z1tpXT1bZ1tpXSxlXTpnW2ldPWUsIXMpOigoIWdbaV18fCFCLmlzT2JqZWN0KGdbaV0pKSYmKGdbaV09W10pLEkodCxlLGdbaV0scikmJkIuaXNBcnJheShnW2ldKSYmKGdbaV09ZWUoZ1tpXSkpLCFzKX1pZihCLmlzRm9ybURhdGEoQSkmJkIuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gQi5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e0kodGUoZSksZyx0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSxJLHQpe2lmKEIuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihJfHxKU09OLnBhcnNlKShBKSxCLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIEhBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihJLHQpe2xldCBlPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUIuaXNPYmplY3QoSSk7aWYociYmQi5pc0hUTUxGb3JtKEkpJiYoST1uZXcgRm9ybURhdGEoSSkpLEIuaXNGb3JtRGF0YShJKSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQShJKSk6STtpZihCLmlzQXJyYXlCdWZmZXIoSSl8fEIuaXNCdWZmZXIoSSl8fEIuaXNTdHJlYW0oSSl8fEIuaXNGaWxlKEkpfHxCLmlzQmxvYihJKSlyZXR1cm4gSTtpZihCLmlzQXJyYXlCdWZmZXJWaWV3KEkpKXJldHVybiBJLmJ1ZmZlcjtpZihCLmlzVVJMU2VhcmNoUGFyYW1zKEkpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLEkudG9TdHJpbmcoKTtsZXQgcztpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBKQShJLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKHM9Qi5pc0ZpbGVMaXN0KEkpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gTChzP3siZmlsZXNbXSI6SX06SSxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZShJKSk6SX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihJKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8SEEudHJhbnNpdGlvbmFsLGU9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKEkmJkIuaXNTdHJpbmcoSSkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgaT0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShJKX1jYXRjaChzKXtpZihpKXRocm93IHMubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKHMsbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpzfX1yZXR1cm4gSX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKEkpe3JldHVybiBJPj0yMDAmJkk8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntIQS5oZWFkZXJzW0FdPXt9fSk7dmFyIE89SEE7dmFyIGllPUIudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksRkk9QT0+e2xldCBJPXt9LHQsZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2c9aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9aS5zdWJzdHJpbmcoZysxKS50cmltKCksISghdHx8SVt0XSYmaWVbdF0pJiYodD09PSJzZXQtY29va2llIj9JW3RdP0lbdF0ucHVzaChlKTpJW3RdPVtlXTpJW3RdPUlbdF0/SVt0XSsiLCAiK2U6ZSl9KSxJfTt2YXIgU0k9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkIuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIG9lKEEpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPXQuZXhlYyhBKTspSVtlWzFdXT1lWzJdO3JldHVybiBJfXZhciBCZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBZQShBLEksdCxlLGcpe2lmKEIuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsSSx0KTtpZihnJiYoST10KSwhIUIuaXNTdHJpbmcoSSkpe2lmKEIuaXNTdHJpbmcoZSkpcmV0dXJuIEkuaW5kZXhPZihlKSE9PS0xO2lmKEIuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdChJKX19ZnVuY3Rpb24gQ2UoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLChJLHQsZSk9PnQudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBzZShBLEkpe2xldCB0PUIudG9DYW1lbENhc2UoIiAiK0kpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZSt0LHt2YWx1ZTpmdW5jdGlvbihnLHIsaSl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLEksZyxyLGkpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBUPWNsYXNze2NvbnN0cnVjdG9yKEkpe0kmJnRoaXMuc2V0KEkpfXNldChJLHQsZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKHMsYSxRKXtsZXQgQz16KGEpO2lmKCFDKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbz1CLmZpbmRLZXkoZyxDKTsoIW98fGdbb109PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tvXSE9PSExKSYmKGdbb3x8YV09ZkEocykpfWxldCBpPShzLGEpPT5CLmZvckVhY2gocywoUSxDKT0+cihRLEMsYSkpO3JldHVybiBCLmlzUGxhaW5PYmplY3QoSSl8fEkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koSSx0KTpCLmlzU3RyaW5nKEkpJiYoST1JLnRyaW0oKSkmJiFCZShJKT9pKEZJKEkpLHQpOkkhPW51bGwmJnIodCxJLGUpLHRoaXN9Z2V0KEksdCl7aWYoST16KEkpLEkpe2xldCBlPUIuZmluZEtleSh0aGlzLEkpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIXQpcmV0dXJuIGc7aWYodD09PSEwKXJldHVybiBvZShnKTtpZihCLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGcsZSk7aWYoQi5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoSSx0KXtpZihJPXooSSksSSl7bGV0IGU9Qi5maW5kS2V5KHRoaXMsSSk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCF0fHxZQSh0aGlzLHRoaXNbZV0sZSx0KSkpfXJldHVybiExfWRlbGV0ZShJLHQpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKGkpe2lmKGk9eihpKSxpKXtsZXQgcz1CLmZpbmRLZXkoZSxpKTtzJiYoIXR8fFlBKGUsZVtzXSxzLHQpKSYmKGRlbGV0ZSBlW3NdLGc9ITApfX1yZXR1cm4gQi5pc0FycmF5KEkpP0kuZm9yRWFjaChyKTpyKEkpLGd9Y2xlYXIoSSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcyksZT10Lmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9dFtlXTsoIUl8fFlBKHRoaXMsdGhpc1tyXSxyLEksITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZShJKXtsZXQgdD10aGlzLGU9e307cmV0dXJuIEIuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IGk9Qi5maW5kS2V5KGUscik7aWYoaSl7dFtpXT1mQShnKSxkZWxldGUgdFtyXTtyZXR1cm59bGV0IHM9ST9DZShyKTpTdHJpbmcocikudHJpbSgpO3MhPT1yJiZkZWxldGUgdFtyXSx0W3NdPWZBKGcpLGVbc109ITB9KSx0aGlzfWNvbmNhdCguLi5JKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5JKX10b0pTT04oSSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQi5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJih0W2ddPUkmJkIuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtJLHRdKT0+SSsiOiAiK3QpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiB0aGlzP0k6bmV3IHRoaXMoSSl9c3RhdGljIGNvbmNhdChJLC4uLnQpe2xldCBlPW5ldyB0aGlzKEkpO3JldHVybiB0LmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKEkpe2xldCBlPSh0aGlzW1NJXT10aGlzW1NJXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihpKXtsZXQgcz16KGkpO2Vbc118fChzZShnLGkpLGVbc109ITApfXJldHVybiBCLmlzQXJyYXkoSSk/SS5mb3JFYWNoKHIpOnIoSSksdGhpc319O1QuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0IucmVkdWNlRGVzY3JpcHRvcnMoVC5wcm90b3R5cGUsKHt2YWx1ZTpBfSxJKT0+e2xldCB0PUlbMF0udG9VcHBlckNhc2UoKStJLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbdF09ZX19fSk7Qi5mcmVlemVNZXRob2RzKFQpO3ZhciBtPVQ7ZnVuY3Rpb24gXyhBLEkpe2xldCB0PXRoaXN8fE8sZT1JfHx0LGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEIuZm9yRWFjaChBLGZ1bmN0aW9uKHMpe3I9cy5jYWxsKHQscixnLm5vcm1hbGl6ZSgpLEk/SS5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUkkoQSxJLHQpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsSSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUIuaW5oZXJpdHMoUkksbCx7X19DQU5DRUxfXzohMH0pO3ZhciBKPVJJO2Z1bmN0aW9uIGJBKEEsSSx0KXtsZXQgZT10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFlfHxlKHQuc3RhdHVzKT9BKHQpOkkobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX12YXIgTkk9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsSSx0LGUsZyxyKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEkpXTtCLmlzTnVtYmVyKHQpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxCLmlzU3RyaW5nKGUpJiZpLnB1c2goInBhdGg9IitlKSxCLmlzU3RyaW5nKGcpJiZpLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBJPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gST9kZWNvZGVVUklDb21wb25lbnQoSVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBNQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBxQShBLEkpe3JldHVybiBJP0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrSS5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLEkpe3JldHVybiBBJiYhTUEoSSk/cUEoQSxJKTpJfXZhciBVST13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBJPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBpPXI7cmV0dXJuIEkmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IHM9Qi5pc1N0cmluZyhpKT9nKGkpOmk7cmV0dXJuIHMucHJvdG9jb2w9PT1lLnByb3RvY29sJiZzLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEtBKEEpe2xldCBJPS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiBJJiZJWzFdfHwiIn1mdW5jdGlvbiBuZShBLEkpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsaTtyZXR1cm4gST1JIT09dm9pZCAwP0k6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQz1lW3JdO2l8fChpPVEpLHRbZ109YSxlW2ddPVE7bGV0IG89cixmPTA7Zm9yKDtvIT09ZzspZis9dFtvKytdLG89byVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1pPEkpcmV0dXJuO2xldCBuPUMmJlEtQztyZXR1cm4gbj9NYXRoLnJvdW5kKGYqMWUzL24pOnZvaWQgMH19dmFyIEdJPW5lO2Z1bmN0aW9uIGtJKEEsSSl7bGV0IHQ9MCxlPUdJKDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxpPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxzPXItdCxhPWUocyksUT1yPD1pO3Q9cjtsZXQgQz17bG9hZGVkOnIsdG90YWw6aSxwcm9ncmVzczppP3IvaTp2b2lkIDAsYnl0ZXM6cyxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmaSYmUT8oaS1yKS9hOnZvaWQgMCxldmVudDpnfTtDW0k/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShDKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTEk9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOnN9PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBDO2lmKEIuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEM9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1DP0Muc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBvPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7by5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLG8udGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gbigpe2lmKCFvKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBvJiZvLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxkPXtkYXRhOiFpfHxpPT09InRleHQifHxpPT09Impzb24iP28ucmVzcG9uc2VUZXh0Om8ucmVzcG9uc2Usc3RhdHVzOm8uc3RhdHVzLHN0YXR1c1RleHQ6by5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Om99O2JBKGZ1bmN0aW9uKE4pe3QoTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0sZCksbz1udWxsfWlmKCJvbmxvYWRlbmQiaW4gbz9vLm9ubG9hZGVuZD1uOm8ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IW98fG8ucmVhZHlTdGF0ZSE9PTR8fG8uc3RhdHVzPT09MCYmIShvLnJlc3BvbnNlVVJMJiZvLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChuKX0sby5vbmFib3J0PWZ1bmN0aW9uKCl7byYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxvKSksbz1udWxsKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLG8pKSxvPW51bGx9LG8ub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLGQ9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUsZC5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsbykpLG89bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihzJiZCLmlzRnVuY3Rpb24ocykmJihzPXMoQSkpLHN8fHMhPT0hMSYmVUkoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOSS5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBvJiZCLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LGQpe28uc2V0UmVxdWVzdEhlYWRlcihkLHUpfSksQi5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChvLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxpJiZpIT09Impzb24iJiYoby5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmby5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa0koQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZvLnVwbG9hZCYmby51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGtJKEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntvJiYoZSghY3x8Yy50eXBlP25ldyBKKG51bGwsQSxvKTpjKSxvLmFib3J0KCksbz1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1LQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1vLnNlbmQoZ3x8bnVsbCl9KX07dmFyIE9BPXtodHRwOlFBLHhocjpMSX07Qi5mb3JFYWNoKE9BLChBLEkpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6SX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTpJfSl9fSk7dmFyIEpJPUE9PmAtICR7QX1gLEVlPUE9PkIuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1CLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDpJfT1BLHQsZSxnPXt9O2ZvcihsZXQgcj0wO3I8STtyKyspe3Q9QVtyXTtsZXQgaTtpZihlPXQsIUVlKHQpJiYoZT1PQVsoaT1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke2l9XCdgKTtpZihlKWJyZWFrO2dbaXx8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbcyxhXSk9PmBhZGFwdGVyICR7c30gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ST9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKSSkuam9pbihgJTBBYCk6IiAiK0pJKHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6T0F9O2Z1bmN0aW9uIFRBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBKKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFRBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fE8uYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gVEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoVEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEhJPUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIEcoQSxJKXtJPUl8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIGUoUSxDLG8pe3JldHVybiBCLmlzUGxhaW5PYmplY3QoUSkmJkIuaXNQbGFpbk9iamVjdChDKT9CLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm99LFEsQyk6Qi5pc1BsYWluT2JqZWN0KEMpP0IubWVyZ2Uoe30sQyk6Qi5pc0FycmF5KEMpP0Muc2xpY2UoKTpDfWZ1bmN0aW9uIGcoUSxDLG8pe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLG8pfWVsc2UgcmV0dXJuIGUoUSxDLG8pfWZ1bmN0aW9uIHIoUSxDKXtpZighQi5pc1VuZGVmaW5lZChDKSlyZXR1cm4gZSh2b2lkIDAsQyl9ZnVuY3Rpb24gaShRLEMpe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxDKX1mdW5jdGlvbiBzKFEsQyxvKXtpZihvIGluIEkpcmV0dXJuIGUoUSxDKTtpZihvIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOnMsaGVhZGVyczooUSxDKT0+ZyhISShRKSxISShDKSwhMCl9O3JldHVybiBCLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLEkpKSxmdW5jdGlvbihDKXtsZXQgbz1hW0NdfHxnLGY9byhBW0NdLElbQ10sQyk7Qi5pc1VuZGVmaW5lZChmKSYmbyE9PXN8fCh0W0NdPWYpfSksdH12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLEkpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyhJPDE/Im4gIjoiICIpK0F9fSk7dmFyIFlJPXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihJLHQsZSl7ZnVuY3Rpb24gZyhyLGkpe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK2krKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixpLHMpPT57aWYoST09PSExKXRocm93IG5ldyBsKGcoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiFZSVtpXSYmKFlJW2ldPSEwLGNvbnNvbGUud2FybihnKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksST9JKHIsaSxzKTohMH19O2Z1bmN0aW9uIGFlKEEsSSx0KXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLGk9SVtyXTtpZihpKXtsZXQgcz1BW3JdLGE9cz09PXZvaWQgMHx8aShzLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgSD1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IoSSl7dGhpcy5kZWZhdWx0cz1JLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBrQSxyZXNwb25zZTpuZXcga0F9fWFzeW5jIHJlcXVlc3QoSSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoSSx0KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdChJLHQpe3R5cGVvZiBJPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1JKTp0PUl8fHt9LHQ9Ryh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT10O2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKX0sITEpLGchPW51bGwmJihCLmlzRnVuY3Rpb24oZyk/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6SC5mdW5jdGlvbixzZXJpYWxpemU6SC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1yJiZCLm1lcmdlKHIuY29tbW9uLHJbdC5tZXRob2RdKTtyJiZCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksdC5oZWFkZXJzPW0uY29uY2F0KGkscik7bGV0IHM9W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMscy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEMsbz0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLHMpLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQz1Qcm9taXNlLnJlc29sdmUodCk7bzxmOylDPUMudGhlbihFW28rK10sRVtvKytdKTtyZXR1cm4gQ31mPXMubGVuZ3RoO2xldCBuPXQ7Zm9yKG89MDtvPGY7KXtsZXQgRT1zW28rK10sYz1zW28rK107dHJ5e249RShuKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0M9REEuY2FsbCh0aGlzLG4pfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iobz0wLGY9US5sZW5ndGg7bzxmOylDPUMudGhlbihRW28rK10sUVtvKytdKTtyZXR1cm4gQ31nZXRVcmkoSSl7ST1HKHRoaXMuZGVmYXVsdHMsSSk7bGV0IHQ9JChJLmJhc2VVUkwsSS51cmwpO3JldHVybiBYKHQsSS5wYXJhbXMsSS5wYXJhbXNTZXJpYWxpemVyKX19O0IuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oSSl7eC5wcm90b3R5cGVbSV09ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoZXx8e30se21ldGhvZDpJLHVybDp0LGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0IuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKEkpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoc3x8e30se21ldGhvZDpJLGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOml9KSl9fXgucHJvdG90eXBlW0ldPXQoKSx4LnByb3RvdHlwZVtJKyJGb3JtIl09dCghMCl9KTt2YXIgQUE9eDt2YXIgUEE9Y2xhc3MgQXtjb25zdHJ1Y3RvcihJKXtpZih0eXBlb2YgSSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe3Q9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixpPW5ldyBQcm9taXNlKHM9PntlLnN1YnNjcmliZShzKSxyPXN9KS50aGVuKGcpO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LGl9LEkoZnVuY3Rpb24ocixpLHMpe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEoocixpLHMpLHQoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoSSl7aWYodGhpcy5yZWFzb24pe0kodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goSSk6dGhpcy5fbGlzdGVuZXJzPVtJXX11bnN1YnNjcmliZShJKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihJKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IEk7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe0k9Z30pLGNhbmNlbDpJfX19LGJJPVBBO2Z1bmN0aW9uIGpBKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBXQShBKXtyZXR1cm4gQi5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgWkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFpBKS5mb3JFYWNoKChbQSxJXSk9PntaQVtJXT1BfSk7dmFyIE1JPVpBO2Z1bmN0aW9uIHFJKEEpe2xldCBJPW5ldyBBQShBKSx0PVcoQUEucHJvdG90eXBlLnJlcXVlc3QsSSk7cmV0dXJuIEIuZXh0ZW5kKHQsQUEucHJvdG90eXBlLEkse2FsbE93bktleXM6ITB9KSxCLmV4dGVuZCh0LEksbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxSShHKEEsZykpfSx0fXZhciBoPXFJKE8pO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUo7aC5DYW5jZWxUb2tlbj1iSTtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1MO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbihJKXtyZXR1cm4gUHJvbWlzZS5hbGwoSSl9O2guc3ByZWFkPWpBO2guaXNBeGlvc0Vycm9yPVdBO2gubWVyZ2VDb25maWc9RztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShCLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TUk7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOm9pLEF4aW9zRXJyb3I6QmksQ2FuY2VsZWRFcnJvcjpDaSxpc0NhbmNlbDpzaSxDYW5jZWxUb2tlbjpuaSxWRVJTSU9OOlFpLGFsbDpFaSxDYW5jZWw6YWksaXNBeGlvc0Vycm9yOmNpLHNwcmVhZDpmaSx0b0Zvcm1EYXRhOmxpLEF4aW9zSGVhZGVyczpEaSxIdHRwU3RhdHVzQ29kZTp1aSxmb3JtVG9KU09OOmhpLGdldEFkYXB0ZXI6ZGksbWVyZ2VDb25maWc6eWl9PWRBO3ZhciBJQSxrLFhBLFZBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7WEE9bmV3IFVpbnQ4QXJyYXkoay5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gSUF8fCh0eXBlb2YgZmV0Y2g8InUiP0lBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS0kpLnRoZW4oST0+SS5hcnJheUJ1ZmZlcigpKS50aGVuKEk9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEksVkEpKS50aGVuKHRoaXMuX2luaXQpOklBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEtJLCJiYXNlNjQiKSxWQSkudGhlbih0aGlzLl9pbml0KSxJQSl9X2luaXQoSSl7az1JLmluc3RhbmNlLFZBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZShJLHQ9MCl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9SS5ieXRlTGVuZ3RoLGc9ay5leHBvcnRzLm1hbGxvYyhlKTtYQS5zZXQoSSxnKSx0PXR8fE51bWJlcihrLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1rLmV4cG9ydHMubWFsbG9jKHQpLGk9ay5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLHQsZyxlKSxzPVhBLnNsaWNlKHIscitpKTtyZXR1cm4gay5leHBvcnRzLmZyZWUoZyksay5leHBvcnRzLmZyZWUociksc319LEtJPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE9JPW5ldyB5QSxUST0hMTthc3luYyBmdW5jdGlvbiBjZShBLEksdCl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7SX0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSk7VEl8fChhd2FpdCBPSS5pbml0KCksVEk9ITApO2xldCBzPU9JLmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgeEk9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSxJLHQpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcseEkoZSxJLHQpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgUEk9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFA9dWU7ZnVuY3Rpb24gaGUoQSxJKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDg6e3Q9bmV3IEludDhBcnJheShJKTticmVha31jYXNlIHAuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShJKTticmVha31jYXNlIHAuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoSSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFk9aGU7dmFyIFpJPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGpJPW5ldyBUZXh0RW5jb2RlcixXST1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSxJKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3BlbihJLHQuZmxhZ3MpLHI9QS5mc19zdGF0KEkpLnNpemUsaT1udWxsO1pJP2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOmk9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBzPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQoZSxzLDAsciwwKSxBLmZzX2Nsb3NlKGUpLHN9ZnVuY3Rpb24gVkkoQSxJLHQpe2xldCBlPW51bGw7Wkk/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6ZT1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSx0KTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiB5KEEsSSx0LGUpe2xldCBnPTA7cmV0dXJuIEkhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGUsSS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShJLmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gaihBLEksdCl7bGV0IGU9SlNPTi5zdHJpbmdpZnkoSSksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gRihBLEksdCxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLGk9VkkoQSxnLHIpO3JldHVybiBZKGUsaS5idWZmZXIpfWZ1bmN0aW9uIHpBKEEsSSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxJXSksZT1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLEksdCxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxDKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG89akkuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG89akkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG89US5kYXRhLmRhdGEsZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG89US5kYXRhLGY9eShBLG8uZGF0YSxDLDApLG49eShBLG8uZGlyZWN0aW9uLEMsMSksRT10eXBlb2Ygby5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShvLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOm8uaW1hZ2VUeXBlLG5hbWU6by5uYW1lLG9yaWdpbjpvLm9yaWdpbixzcGFjaW5nOm8uc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsc2l6ZTpvLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtqKEEsYyxDKTticmVha31jYXNlIEQuTWVzaDp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby5jZWxscyxDLDEpLEU9eShBLG8ucG9pbnREYXRhLEMsMiksYz15KEEsby5jZWxsRGF0YSxDLDMpLHU9e21lc2hUeXBlOm8ubWVzaFR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpvLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsY2VsbEJ1ZmZlclNpemU6by5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtqKEEsdSxDKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8udmVydGljZXMsQywxKSxFPXkoQSxvLmxpbmVzLEMsMiksYz15KEEsby5wb2x5Z29ucyxDLDMpLHU9eShBLG8udHJpYW5nbGVTdHJpcHMsQyw0KSxkPXkoQSxvLnBvaW50RGF0YSxDLDUpLFI9eShBLG8ucG9pbnREYXRhLEMsNiksTj17cG9seURhdGFUeXBlOm8ucG9seURhdGFUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpvLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxsaW5lc0J1ZmZlclNpemU6by5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOm8ucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpvLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtqKEEsTixDKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKEkuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCkscz1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJnI9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oUSxDKXtsZXQgbz1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz17ZGF0YTpXSS5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289SlNPTi5wYXJzZShXSS5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSk7bz17ZGF0YTpWSShBLG4sRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBuPXpBKEEsQyk7bi5kYXRhPUYoQSxDLDAsbi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksbi5kaXJlY3Rpb249RihBLEMsMSxQLkZsb2F0NjQpLG4ubWV0YWRhdGE9bmV3IE1hcChuLm1ldGFkYXRhKSxvPW47YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsbi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOm4ucG9pbnRzPVkobi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbHM+MD9uLmNlbGxzPUYoQSxDLDEsbi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6bi5jZWxscz1ZKG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQywyLG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQywzLG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsUC5GbG9hdDMyKTpuLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LG4udmVydGljZXNCdWZmZXJTaXplPjA/bi52ZXJ0aWNlcz1GKEEsQywxLHAuVUludDMyKTpuLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxuLmxpbmVzQnVmZmVyU2l6ZT4wP24ubGluZXM9RihBLEMsMixwLlVJbnQzMik6bi5saW5lcz1uZXcgVWludDMyQXJyYXksbi5wb2x5Z29uc0J1ZmZlclNpemU+MD9uLnBvbHlnb25zPUYoQSxDLDMscC5VSW50MzIpOm4ucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LG4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bi50cmlhbmdsZVN0cmlwcz1GKEEsQyw0LHAuVUludDMyKTpuLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQyw1LG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDYsbi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTpvfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6aSxzdGRlcnI6cyxvdXRwdXRzOmF9fXZhciBYST15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsSSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSxJKTtnIT09bnVsbCYmdC5wdXNoKGcpfXJldHVybiB0fWZ1bmN0aW9uIHBlKEEsSSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksd2UmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkk/dDp0LnNsaWNlKDApfXZhciB6ST1tZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX0k9RmU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZJPVNlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkST1SZTthc3luYyBmdW5jdGlvbiBOZShBLEksdCxlKXtsZXQgZz1YSShBLEksdCxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8aS50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKHMpfWVsc2UgaWYoaS50eXBlPT09RC5JbWFnZSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi5fSShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELk1lc2gpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4udkkocykpfWVsc2UgaWYoaS50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi4kSShzKSl9fSksRkEoZyx6SShyLCEwKSl9dmFyIEF0PU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSxJLHQsZSxnLHIpe2xldCBpPWF3YWl0IFBJKEEsSSxyKTtyZXR1cm4gYXdhaXQgQXQoaSx0LGUsZyl9fTtvQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztidChSdCk7ZXhwb3J0e3ogYXMgY29tcHJlc3NTdHJpbmdpZnksRkEgYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixqIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLFJBIGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsZm4gYXMgaW1hZ2VUb0pzb24scG4gYXMganNvblRvSW1hZ2UsbW4gYXMganNvblRvTWVzaCxobiBhcyBqc29uVG9Qb2x5RGF0YSxkbiBhcyBtZXNoVG9Kc29uLFYgYXMgcGFyc2VTdHJpbmdEZWNvbXByZXNzLHluIGFzIHBvbHlEYXRhVG9Kc29uLFhhIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsYnQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsV2EgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxVQSBhcyB2ZXJzaW9ufTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py index 11731085c..88c513ea3 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py @@ -1 +1 @@ -__version__ = "3.2.0" +__version__ = "3.3.0" diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py index 11731085c..88c513ea3 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py @@ -1 +1 @@ -__version__ = "3.2.0" +__version__ = "3.3.0" diff --git a/packages/compress-stringify/typescript/README.md b/packages/compress-stringify/typescript/README.md index 34d2155b6..37789c490 100644 --- a/packages/compress-stringify/typescript/README.md +++ b/packages/compress-stringify/typescript/README.md @@ -4,9 +4,9 @@ > Zstandard compression and decompression and base64 encoding and decoding in WebAssembly. -[👨‍💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/itk-wasm/compress-stringify/ts/app/ ':include :type=iframe width=100% height=800px') +[👨‍💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/ITK-Wasm/compress-stringify/ts/app/ ':include :type=iframe width=100% height=800px') -[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/itk-wasm/compress-stringify/ts/docs/) +[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/ITK-Wasm/compress-stringify/ts/docs/) ## Installation diff --git a/packages/compress-stringify/typescript/package.json b/packages/compress-stringify/typescript/package.json index 708d7922e..6328d0b51 100644 --- a/packages/compress-stringify/typescript/package.json +++ b/packages/compress-stringify/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compress-stringify", - "version": "3.2.0", + "version": "3.3.0", "packageManager": "pnpm@9.6.0", "description": "Zstandard compression and decompression and base64 encoding and decoding in WebAssembly.", "type": "module", diff --git a/packages/compress-stringify/typescript/src/index-worker-embedded.ts b/packages/compress-stringify/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/compress-stringify/typescript/src/index-worker-embedded.ts +++ b/packages/compress-stringify/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js' diff --git a/packages/core/typescript/create-itk-wasm/package.json b/packages/core/typescript/create-itk-wasm/package.json index 0a8a5a91e..e2478f688 100644 --- a/packages/core/typescript/create-itk-wasm/package.json +++ b/packages/core/typescript/create-itk-wasm/package.json @@ -1,6 +1,6 @@ { "name": "create-itk-wasm", - "version": "1.1.0", + "version": "1.2.0", "description": "CLI to create a new ITK-Wasm project or add a pipeline to an existing project.", "type": "module", "exports": { diff --git a/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts b/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts index fb520cc29..0ef57b983 100644 --- a/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts +++ b/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts @@ -59,7 +59,7 @@ function generatePackageJson(project: ProjectSpec) { devDependencies: { '@itk-wasm/dam': '^1.1.1', '@thewtex/setup-micromamba': '^1.9.7', - 'itk-wasm': '1.0.0-b.175' + 'itk-wasm': '1.0.0-b.178' } } if (project.author) { diff --git a/packages/core/typescript/itk-wasm/package.json b/packages/core/typescript/itk-wasm/package.json index ff5f0c38a..63701cf8b 100644 --- a/packages/core/typescript/itk-wasm/package.json +++ b/packages/core/typescript/itk-wasm/package.json @@ -1,6 +1,6 @@ { "name": "itk-wasm", - "version": "1.0.0-b.177", + "version": "1.0.0-b.178", "packageManager": "pnpm@9.6.0", "description": "High-performance spatial analysis in a web browser, Node.js, and reproducible execution across programming languages and hardware architectures.", "type": "module", diff --git a/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json b/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json index 5180bca84..d0b8fa87d 100644 --- a/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json +++ b/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json @@ -33,7 +33,7 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "itk-wasm": "1.0.0-b.175" + "itk-wasm": "1.0.0-b.177" }, "devDependencies": { "@itk-wasm/demo-app": "^0.2.0", diff --git a/packages/core/typescript/itk-wasm/src/interface-types/transform-type.ts b/packages/core/typescript/itk-wasm/src/interface-types/transform-type.ts index 4dfab9b85..7116bf48e 100644 --- a/packages/core/typescript/itk-wasm/src/interface-types/transform-type.ts +++ b/packages/core/typescript/itk-wasm/src/interface-types/transform-type.ts @@ -1,7 +1,7 @@ import TransformParameterizations from './transform-parameterizations.js' class TransformType { - constructor( + constructor ( public readonly inputDimension: number = 3, public readonly outputDimension: number = 3, public readonly transformParameterization: (typeof TransformParameterizations)[keyof typeof TransformParameterizations] = TransformParameterizations.Identity diff --git a/packages/core/typescript/itk-wasm/src/interface-types/transform.ts b/packages/core/typescript/itk-wasm/src/interface-types/transform.ts index a0f809047..eb44d3fcb 100644 --- a/packages/core/typescript/itk-wasm/src/interface-types/transform.ts +++ b/packages/core/typescript/itk-wasm/src/interface-types/transform.ts @@ -13,7 +13,7 @@ class Transform { parameters: number[] fixedParameters: number[] - constructor(transformType = new TransformType()) { + constructor (transformType = new TransformType()) { this.transformType = transformType this.numberOfFixedParameters = 0 this.numberOfParameters = 0 diff --git a/packages/core/typescript/itk-wasm/src/pipeline/pipeline-input.ts b/packages/core/typescript/itk-wasm/src/pipeline/pipeline-input.ts index edc7daefa..4b6db4544 100644 --- a/packages/core/typescript/itk-wasm/src/pipeline/pipeline-input.ts +++ b/packages/core/typescript/itk-wasm/src/pipeline/pipeline-input.ts @@ -12,17 +12,17 @@ import JsonCompatible from '../interface-types/json-compatible.js' interface PipelineInput { type: (typeof InterfaceTypes)[keyof typeof InterfaceTypes] data: - | string - | Uint8Array - | JsonCompatible - | TextStream - | BinaryStream - | TextFile - | BinaryFile - | Image - | Mesh - | PolyData - | Transform + | string + | Uint8Array + | JsonCompatible + | TextStream + | BinaryStream + | TextFile + | BinaryFile + | Image + | Mesh + | PolyData + | Transform } export default PipelineInput diff --git a/packages/core/typescript/itk-wasm/src/pipeline/pipeline-output.ts b/packages/core/typescript/itk-wasm/src/pipeline/pipeline-output.ts index 7afcf3201..720a6bf1d 100644 --- a/packages/core/typescript/itk-wasm/src/pipeline/pipeline-output.ts +++ b/packages/core/typescript/itk-wasm/src/pipeline/pipeline-output.ts @@ -12,17 +12,17 @@ import JsonCompatible from '../interface-types/json-compatible.js' interface PipelineOutput { type: (typeof InterfaceTypes)[keyof typeof InterfaceTypes] data?: - | string - | Uint8Array - | JsonCompatible - | TextStream - | BinaryStream - | TextFile - | BinaryFile - | Image - | Mesh - | PolyData - | Transform + | string + | Uint8Array + | JsonCompatible + | TextStream + | BinaryStream + | TextFile + | BinaryFile + | Image + | Mesh + | PolyData + | Transform } export default PipelineOutput diff --git a/packages/core/typescript/itk-wasm/src/pipeline/run-pipeline-node.ts b/packages/core/typescript/itk-wasm/src/pipeline/run-pipeline-node.ts index 6572f7e28..159f385d0 100644 --- a/packages/core/typescript/itk-wasm/src/pipeline/run-pipeline-node.ts +++ b/packages/core/typescript/itk-wasm/src/pipeline/run-pipeline-node.ts @@ -62,7 +62,7 @@ async function runPipelineNode ( Array.from(mountedDirs) .filter((x, _, a) => a.every((y) => x === y || !x.includes(y))) .forEach((dir) => unmountable.add(dir) - ) + ) } if (typeof mountDirs !== 'undefined') { args = replaceArgumentsWithEmscriptenPaths(args, mountDirs) diff --git a/packages/core/typescript/itk-wasm/src/version.ts b/packages/core/typescript/itk-wasm/src/version.ts index 92337c0a0..41c964c5b 100644 --- a/packages/core/typescript/itk-wasm/src/version.ts +++ b/packages/core/typescript/itk-wasm/src/version.ts @@ -1,3 +1,3 @@ -const version = '1.0.0-b.177' +const version = '1.0.0-b.178' export default version diff --git a/packages/core/typescript/itk-wasm/test/node/pipeline/run-pipeline-node-test.js b/packages/core/typescript/itk-wasm/test/node/pipeline/run-pipeline-node-test.js index f285d2ef9..0d38ad331 100644 --- a/packages/core/typescript/itk-wasm/test/node/pipeline/run-pipeline-node-test.js +++ b/packages/core/typescript/itk-wasm/test/node/pipeline/run-pipeline-node-test.js @@ -220,7 +220,7 @@ test('runPipelineNode uses input and output text and binary files', (t) => { '--input-text-file', testInputTextFile, '--input-binary-file', - testInputBinFile, + testInputBinFile ] const desiredOutputs = [ { type: InterfaceTypes.TextStream }, 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 fb16410aa..54ccb5d27 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.0.1" +__version__ = "7.1.0" 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 8c347b276..96840859b 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,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjAuMSIsRkE9RnQ7dmFyIFJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0saD1SdDt2YXIgYnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09YnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIGguVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBoLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGguVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGguSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBoLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBoLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgaC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBoLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEw9VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sbGU9TnQ7dmFyIFJBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWguVUludDgscj1sZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSxCZT1SQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIENlPVR0O3ZhciBiQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgQmUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKUNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sY2U9YkE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgY2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLGc9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgZyhvKTtsZXQgQz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKylDKj10LnNpemVbc107bGV0IGw9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsQypsKSxsKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgVUE9R3Q7dmFyIE5BPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sZyk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxnLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLmd9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPWcsbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBDPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsQ1swXSxDWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IEM9bi5yZXN1bHRzO24ucmVzb2x2ZShDKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sVEE9TkE7dmFyIEx0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sUT1MdDt2YXIgRWU9U3ltYm9sKCJDb21saW5rLnByb3h5IikseHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IikseEE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLEdBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxzQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksUWU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsT3Q9e2NhbkhhbmRsZTpBPT5RZShBKSYmQVtFZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gcGUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLE9BKEEpfX0sUHQ9e2NhbkhhbmRsZTpBPT5RZShBKSYmc0EgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LGZlPW5ldyBNYXAoW1sicHJveHkiLE90XSxbInRocm93IixQdF1dKTtmdW5jdGlvbiBKdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gcGUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighSnQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm8scGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLEM9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksbDt0cnl7bGV0IHM9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKEUsQik9PkVbQl0sQSksYT1nLnJlZHVjZSgoRSxCKT0+RVtCXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOmw9YTticmVhaztjYXNlIlNFVCI6c1tnLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLGw9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6bD1hLmFwcGx5KHMsQyk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgRT1uZXcgYSguLi5DKTtsPUt0KEUpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6RSxwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7cGUoQSxCKSxsPVBBKEUsW0VdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChzKXtsPXt2YWx1ZTpzLFtzQV06MH19UHJvbWlzZS5yZXNvbHZlKGwpLmNhdGNoKHM9Pih7dmFsdWU6cyxbc0FdOjB9KSkudGhlbihzPT57bGV0W2EsRV09bEEocyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxFKSxvPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxkZShlKSxHQSBpbiBBJiZ0eXBlb2YgQVtHQV09PSJmdW5jdGlvbiImJkFbR0FdKCkpfSkuY2F0Y2gocz0+e2xldFthLEVdPWxBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbc0FdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLEUpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gSHQoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZGUoQSl7SHQoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBPQShBLGUpe3JldHVybiBMQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBtZShBKXtyZXR1cm4gWShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntkZShBKX0pfXZhciBJQT1uZXcgV2Vha01hcCxnQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oSUEuZ2V0KEEpfHwwKS0xO0lBLnNldChBLGUpLGU9PT0wJiZtZShBKX0pO2Z1bmN0aW9uIE10KEEsZSl7bGV0IHQ9KElBLmdldChlKXx8MCkrMTtJQS5zZXQoZSx0KSxnQSYmZ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFl0KEEpe2dBJiZnQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIExBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KGksbyl7aWYoYUEociksbz09PXhBKXJldHVybigpPT57WXQobiksbWUoQSkscj0hMH07aWYobz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgZz1ZKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChDPT5DLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIExBKEEsWy4uLmUsb10pfSxzZXQoaSxvLGcpe2FBKHIpO2xldFtDLGxdPWxBKGcpO3JldHVybiBZKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxvXS5tYXAocz0+cy50b1N0cmluZygpKSx2YWx1ZTpDfSxsKS50aGVuKEgpfSxhcHBseShpLG8sZyl7YUEocik7bGV0IEM9ZVtlLmxlbmd0aC0xXTtpZihDPT09eHQpcmV0dXJuIFkoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihDPT09ImJpbmQiKXJldHVybiBMQShBLGUuc2xpY2UoMCwtMSkpO2xldFtsLHNdPXVlKGcpO3JldHVybiBZKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omx9LHMpLnRoZW4oSCl9LGNvbnN0cnVjdChpLG8pe2FBKHIpO2xldFtnLENdPXVlKG8pO3JldHVybiBZKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxDKS50aGVuKEgpfX0pO3JldHVybiBNdChuLEEpLG59ZnVuY3Rpb24gcXQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gdWUoQSl7bGV0IGU9QS5tYXAobEEpO3JldHVybltlLm1hcCh0PT50WzBdKSxxdChlLm1hcCh0PT50WzFdKSldfXZhciBoZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBQQShBLGUpe3JldHVybiBoZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIEt0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tFZV06ITB9KX1mdW5jdGlvbiBsQShBKXtmb3IobGV0W2UsdF1vZiBmZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGhlLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gZmUuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBZKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPVd0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIFd0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6dnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOk1BfT1PYmplY3QsQ0E9KEE9PmU9PntsZXQgdD12dC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVD1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+Q0EoZSk9PT1BKSxjQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6cX09QXJyYXksWD1jQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24ganQoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZVKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBTZT1UKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIF90KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmU2UoQS5idWZmZXIpLGV9dmFyIHp0PWNBKCJzdHJpbmciKSxVPWNBKCJmdW5jdGlvbiIpLGtlPWNBKCJudW1iZXIiKSx1QT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFZ0PUE9PkE9PT0hMHx8QT09PSExLEJBPUE9PntpZihDQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPU1BKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFp0PVQoIkRhdGUiKSxYdD1UKCJGaWxlIiksJHQ9VCgiQmxvYiIpLEFyPVQoIkZpbGVMaXN0IiksZXI9QT0+dUEoQSkmJlUoQS5waXBlKSx0cj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VShBLmFwcGVuZCkmJigoZT1DQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlUoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scnI9VCgiVVJMU2VhcmNoUGFyYW1zIiksaXI9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxxKEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBpPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1pLmxlbmd0aCxnO2ZvcihyPTA7cjxvO3IrKylnPWlbcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBGZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIFJlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsYmU9QT0+IVgoQSkmJkEhPT1SZTtmdW5jdGlvbiBIQSgpe2xldHtjYXNlbGVzczpBfT1iZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG4pPT57bGV0IGk9QSYmRmUoZSxuKXx8bjtCQShlW2ldKSYmQkEocik/ZVtpXT1IQShlW2ldLHIpOkJBKHIpP2VbaV09SEEoe30scik6cShyKT9lW2ldPXIuc2xpY2UoKTplW2ldPXJ9O2ZvcihsZXQgcj0wLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIG5yPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG4saSk9Pnt0JiZVKG4pP0FbaV09WihuLHQpOkFbaV09bn0se2FsbE93bktleXM6cn0pLEEpLG9yPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksYXI9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sc3I9KEEsZSx0LHIpPT57bGV0IG4saSxvLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9bi5sZW5ndGg7aS0tID4wOylvPW5baV0sKCFyfHxyKG8sQSxlKSkmJiFnW29dJiYoZVtvXT1BW29dLGdbb109ITApO0E9dCE9PSExJiZNQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sSXI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxncj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZigha2UoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LGxyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZNQShVaW50OEFycmF5KSksQnI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgaT1uLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSxDcj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxjcj1UKCJIVE1MRm9ybUVsZW1lbnQiKSx1cj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksd2U9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLEVyPVQoIlJlZ0V4cCIpLFVlPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG4saSk9PntsZXQgbzsobz1lKG4saSxBKSkhPT0hMSYmKHJbaV09b3x8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxRcj1BPT57VWUoQSwoZSx0KT0+e2lmKFUoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoVShyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxmcj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChpPT57dFtpXT0hMH0pfTtyZXR1cm4gcShBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxwcj0oKT0+e30sZHI9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLEpBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsRGU9IjAxMjM0NTY3ODkiLE5lPXtESUdJVDpEZSxBTFBIQTpKQSxBTFBIQV9ESUdJVDpKQStKQS50b1VwcGVyQ2FzZSgpK0RlfSxtcj0oQT0xNixlPU5lLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIGhyKEEpe3JldHVybiEhKEEmJlUoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciB5cj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG4pPT57aWYodUEocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW25dPXI7bGV0IGk9cShyKT9bXTp7fTtyZXR1cm4gJChyLChvLGcpPT57bGV0IEM9dChvLG4rMSk7IVgoQykmJihpW2ddPUMpfSksZVtuXT12b2lkIDAsaX19cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LHdyPVQoIkFzeW5jRnVuY3Rpb24iKSxEcj1BPT5BJiYodUEoQSl8fFUoQSkpJiZVKEEudGhlbikmJlUoQS5jYXRjaCksST17aXNBcnJheTpxLGlzQXJyYXlCdWZmZXI6U2UsaXNCdWZmZXI6anQsaXNGb3JtRGF0YTp0cixpc0FycmF5QnVmZmVyVmlldzpfdCxpc1N0cmluZzp6dCxpc051bWJlcjprZSxpc0Jvb2xlYW46VnQsaXNPYmplY3Q6dUEsaXNQbGFpbk9iamVjdDpCQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTpadCxpc0ZpbGU6WHQsaXNCbG9iOiR0LGlzUmVnRXhwOkVyLGlzRnVuY3Rpb246VSxpc1N0cmVhbTplcixpc1VSTFNlYXJjaFBhcmFtczpycixpc1R5cGVkQXJyYXk6bHIsaXNGaWxlTGlzdDpBcixmb3JFYWNoOiQsbWVyZ2U6SEEsZXh0ZW5kOm5yLHRyaW06aXIsc3RyaXBCT006b3IsaW5oZXJpdHM6YXIsdG9GbGF0T2JqZWN0OnNyLGtpbmRPZjpDQSxraW5kT2ZUZXN0OlQsZW5kc1dpdGg6SXIsdG9BcnJheTpncixmb3JFYWNoRW50cnk6QnIsbWF0Y2hBbGw6Q3IsaXNIVE1MRm9ybTpjcixoYXNPd25Qcm9wZXJ0eTp3ZSxoYXNPd25Qcm9wOndlLHJlZHVjZURlc2NyaXB0b3JzOlVlLGZyZWV6ZU1ldGhvZHM6UXIsdG9PYmplY3RTZXQ6ZnIsdG9DYW1lbENhc2U6dXIsbm9vcDpwcix0b0Zpbml0ZU51bWJlcjpkcixmaW5kS2V5OkZlLGdsb2JhbDpSZSxpc0NvbnRleHREZWZpbmVkOmJlLEFMUEhBQkVUOk5lLGdlbmVyYXRlU3RyaW5nOm1yLGlzU3BlY0NvbXBsaWFudEZvcm06aHIsdG9KU09OT2JqZWN0OnlyLGlzQXN5bmNGbjp3cixpc1RoZW5hYmxlOkRyfTtmdW5jdGlvbiBLKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfUkuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkkudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIFRlPUsucHJvdG90eXBlLEdlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e0dlW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssR2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShUZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsZSx0LHIsbixpKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoVGUpO3JldHVybiBJLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24oQyl7cmV0dXJuIEMhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKG8sQS5tZXNzYWdlLGUsdCxyLG4pLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obyxpKSxvfTt2YXIgcD1LO3ZhciBFQT1udWxsO2Z1bmN0aW9uIFlBKEEpe3JldHVybiBJLmlzUGxhaW5PYmplY3QoQSl8fEkuaXNBcnJheShBKX1mdW5jdGlvbiB4ZShBKXtyZXR1cm4gSS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBMZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG49eGUobiksIXQmJmk/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIFNyKEEpe3JldHVybiBJLmlzQXJyYXkoQSkmJiFBLnNvbWUoWUEpfXZhciBrcj1JLnRvRmxhdE9iamVjdChJLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRnIoQSxlLHQpe2lmKCFJLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KEVBfHxGb3JtRGF0YSksdD1JLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyxmKXtyZXR1cm4hSS5pc1VuZGVmaW5lZChmW2NdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8cyxpPXQuZG90cyxvPXQuaW5kZXhlcyxDPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkkuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighSS5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gbCh1KXtpZih1PT09bnVsbClyZXR1cm4iIjtpZihJLmlzRGF0ZSh1KSlyZXR1cm4gdS50b0lTT1N0cmluZygpO2lmKCFDJiZJLmlzQmxvYih1KSl0aHJvdyBuZXcgcCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gSS5pc0FycmF5QnVmZmVyKHUpfHxJLmlzVHlwZWRBcnJheSh1KT9DJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbdV0pOkJ1ZmZlci5mcm9tKHUpOnV9ZnVuY3Rpb24gcyh1LGMsZil7bGV0IGQ9dTtpZih1JiYhZiYmdHlwZW9mIHU9PSJvYmplY3QiKXtpZihJLmVuZHNXaXRoKGMsInt9IikpYz1yP2M6Yy5zbGljZSgwLC0yKSx1PUpTT04uc3RyaW5naWZ5KHUpO2Vsc2UgaWYoSS5pc0FycmF5KHUpJiZTcih1KXx8KEkuaXNGaWxlTGlzdCh1KXx8SS5lbmRzV2l0aChjLCJbXSIpKSYmKGQ9SS50b0FycmF5KHUpKSlyZXR1cm4gYz14ZShjKSxkLmZvckVhY2goZnVuY3Rpb24oUyxEdCl7IShJLmlzVW5kZWZpbmVkKFMpfHxTPT09bnVsbCkmJmUuYXBwZW5kKG89PT0hMD9MZShbY10sRHQsaSk6bz09PW51bGw/YzpjKyJbXSIsbChTKSl9KSwhMX1yZXR1cm4gWUEodSk/ITA6KGUuYXBwZW5kKExlKGYsYyxpKSxsKHUpKSwhMSl9bGV0IGE9W10sRT1PYmplY3QuYXNzaWduKGtyLHtkZWZhdWx0VmlzaXRvcjpzLGNvbnZlcnRWYWx1ZTpsLGlzVmlzaXRhYmxlOllBfSk7ZnVuY3Rpb24gQih1LGMpe2lmKCFJLmlzVW5kZWZpbmVkKHUpKXtpZihhLmluZGV4T2YodSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2EucHVzaCh1KSxJLmZvckVhY2godSxmdW5jdGlvbihkLEYpeyghKEkuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmbi5jYWxsKGUsZCxJLmlzU3RyaW5nKEYpP0YudHJpbSgpOkYsYyxFKSk9PT0hMCYmQihkLGM/Yy5jb25jYXQoRik6W0ZdKX0pLGEucG9wKCl9fWlmKCFJLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSxlfXZhciB4PUZyO2Z1bmN0aW9uIE9lKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gUGUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZ4KEEsdGhpcyxlKX12YXIgSmU9UGUucHJvdG90eXBlO0plLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtKZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLE9lKX06T2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIFFBPVBlO2Z1bmN0aW9uIFJyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8UnIsbj10JiZ0LnNlcmlhbGl6ZSxpO2lmKG4/aT1uKGUsdCk6aT1JLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgUUEoZSx0KS50b1N0cmluZyhyKSxpKXtsZXQgbz1BLmluZGV4T2YoIiMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikraX1yZXR1cm4gQX12YXIgcUE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe0kuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxLQT1xQTt2YXIgZkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBIZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6UUE7dmFyIE1lPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgWWU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgcWU9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6SGUsRm9ybURhdGE6TWUsQmxvYjpZZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBXQT17fTtrdChXQSx7aGFzQnJvd3NlckVudjooKT0+S2UsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5icixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlVyfSk7dmFyIEtlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLGJyPShBPT5LZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFVyPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgdz17Li4uV0EsLi4ucWV9O2Z1bmN0aW9uIHZBKEEsZSl7cmV0dXJuIHgoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixuLGkpe3JldHVybiB3LmlzTm9kZSYmSS5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmkuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIE5yKEEpe3JldHVybiBJLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gVHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG49dC5sZW5ndGgsaTtmb3Iocj0wO3I8bjtyKyspaT10W3JdLGVbaV09QVtpXTtyZXR1cm4gZX1mdW5jdGlvbiBHcihBKXtmdW5jdGlvbiBlKHQscixuLGkpe2xldCBvPXRbaSsrXTtpZihvPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtvKSxDPWk+PXQubGVuZ3RoO3JldHVybiBvPSFvJiZJLmlzQXJyYXkobik/bi5sZW5ndGg6byxDPyhJLmhhc093blByb3AobixvKT9uW29dPVtuW29dLHJdOm5bb109ciwhZyk6KCghbltvXXx8IUkuaXNPYmplY3QobltvXSkpJiYobltvXT1bXSksZSh0LHIsbltvXSxpKSYmSS5pc0FycmF5KG5bb10pJiYobltvXT1UcihuW29dKSksIWcpfWlmKEkuaXNGb3JtRGF0YShBKSYmSS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBJLmZvckVhY2hFbnRyeShBLChyLG4pPT57ZShOcihyKSxuLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBwQT1HcjtmdW5jdGlvbiBMcihBLGUsdCl7aWYoSS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLEkudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgakE9e3RyYW5zaXRpb25hbDpmQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9SS5pc09iamVjdChlKTtpZihpJiZJLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksSS5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KHBBKGUpKTplO2lmKEkuaXNBcnJheUJ1ZmZlcihlKXx8SS5pc0J1ZmZlcihlKXx8SS5pc1N0cmVhbShlKXx8SS5pc0ZpbGUoZSl8fEkuaXNCbG9iKGUpKXJldHVybiBlO2lmKEkuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKEkuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKGkpe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIHZBKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1JLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IEM9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiB4KGc/eyJmaWxlc1tdIjplfTplLEMmJm5ldyBDLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gaXx8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLExyKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxqQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmSS5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBvPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKG8pdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9wLmZyb20oZyxwLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtJLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e2pBLmhlYWRlcnNbQV09e319KTt2YXIgVz1qQTt2YXIgeHI9SS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxXZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe249by5pbmRleE9mKCI6IiksdD1vLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9by5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmeHJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgdmU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpJLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiBPcihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgUHI9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gX0EoQSxlLHQscixuKXtpZihJLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFJLmlzU3RyaW5nKGUpKXtpZihJLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihJLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIEpyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIEhyKEEsZSl7bGV0IHQ9SS50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLGksbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHY9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIGkoZyxDLGwpe2xldCBzPWVBKEMpO2lmKCFzKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgYT1JLmZpbmRLZXkobixzKTsoIWF8fG5bYV09PT12b2lkIDB8fGw9PT0hMHx8bD09PXZvaWQgMCYmblthXSE9PSExKSYmKG5bYXx8Q109ZEEoZykpfWxldCBvPShnLEMpPT5JLmZvckVhY2goZywobCxzKT0+aShsLHMsQykpO3JldHVybiBJLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28oZSx0KTpJLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFQcihlKT9vKFdlKGUpLHQpOmUhPW51bGwmJmkodCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1JLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4gT3Iobik7aWYoSS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKEkuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1JLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fF9BKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIGkobyl7aWYobz1lQShvKSxvKXtsZXQgZz1JLmZpbmRLZXkocixvKTtnJiYoIXR8fF9BKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gSS5pc0FycmF5KGUpP2UuZm9yRWFjaChpKTppKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTsoIWV8fF9BKHRoaXMsdGhpc1tpXSxpLGUsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIEkuZm9yRWFjaCh0aGlzLChuLGkpPT57bGV0IG89SS5maW5kS2V5KHIsaSk7aWYobyl7dFtvXT1kQShuKSxkZWxldGUgdFtpXTtyZXR1cm59bGV0IGc9ZT9KcihpKTpTdHJpbmcoaSkudHJpbSgpO2chPT1pJiZkZWxldGUgdFtpXSx0W2ddPWRBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gSS5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJkkuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1t2ZV09dGhpc1t2ZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkobyl7bGV0IGc9ZUEobyk7cltnXXx8KEhyKG4sbykscltnXT0hMCl9cmV0dXJuIEkuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSx0aGlzfX07di5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7SS5yZWR1Y2VEZXNjcmlwdG9ycyh2LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtJLmZyZWV6ZU1ldGhvZHModik7dmFyIEQ9djtmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fFcscj1lfHx0LG49RC5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIEkuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe2k9Zy5jYWxsKHQsaSxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksaX1mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGplKEEsZSx0KXtwLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHAuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1JLmluaGVyaXRzKGplLHAse19fQ0FOQ0VMX186ITB9KTt2YXIgTz1qZTtmdW5jdGlvbiB6QShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBwKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3AuRVJSX0JBRF9SRVFVRVNULHAuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIF9lPXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4saSl7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07SS5pc051bWJlcih0KSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksSS5pc1N0cmluZyhyKSYmby5wdXNoKCJwYXRoPSIrciksSS5pc1N0cmluZyhuKSYmby5wdXNoKCJkb21haW49IituKSxpPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIFZBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gWkEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGlBKEEsZSl7cmV0dXJuIEEmJiFWQShlKT9aQShBLGUpOmV9dmFyIHplPXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4oaSl7bGV0IG89aTtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgZz1JLmlzU3RyaW5nKG8pP24obyk6bztyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gWEEoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIE1yKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLGk9MCxvO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oQyl7bGV0IGw9RGF0ZS5ub3coKSxzPXJbaV07b3x8KG89bCksdFtuXT1DLHJbbl09bDtsZXQgYT1pLEU9MDtmb3IoO2EhPT1uOylFKz10W2ErK10sYT1hJUE7aWYobj0obisxKSVBLG49PT1pJiYoaT0oaSsxKSVBKSxsLW88ZSlyZXR1cm47bGV0IEI9cyYmbC1zO3JldHVybiBCP01hdGgucm91bmQoRSoxZTMvQik6dm9pZCAwfX12YXIgVmU9TXI7ZnVuY3Rpb24gWmUoQSxlKXtsZXQgdD0wLHI9VmUoNTAsMjUwKTtyZXR1cm4gbj0+e2xldCBpPW4ubG9hZGVkLG89bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGc9aS10LEM9cihnKSxsPWk8PW87dD1pO2xldCBzPXtsb2FkZWQ6aSx0b3RhbDpvLHByb2dyZXNzOm8/aS9vOnZvaWQgMCxieXRlczpnLHJhdGU6Q3x8dm9pZCAwLGVzdGltYXRlZDpDJiZvJiZsPyhvLWkpL0M6dm9pZCAwLGV2ZW50Om59O3NbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKHMpfX12YXIgWXI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixYZT1ZciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG49QS5kYXRhLGk9RC5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpvLHdpdGhYU1JGVG9rZW46Z309QSxDO2Z1bmN0aW9uIGwoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKEMpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsQyl9bGV0IHM7aWYoSS5pc0Zvcm1EYXRhKG4pKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigocz1pLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLmZdPXM/cy5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2kuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5mXS5qb2luKCI7ICIpKX19bGV0IGE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIixmPUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrZikpfWxldCBFPWlBKEEuYmFzZVVSTCxBLnVybCk7YS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoRSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEIoKXtpZighYSlyZXR1cm47bGV0IGM9RC5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDphfTt6QShmdW5jdGlvbihTKXt0KFMpLGwoKX0sZnVuY3Rpb24oUyl7cihTKSxsKCl9LGQpLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9QjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQil9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBmPUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxmQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihmPUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgcChmLGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmSS5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJnplKEUpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmX2UucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZpLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfW49PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmSS5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24oZixkKXthLnNldFJlcXVlc3RIZWFkZXIoZCxmKX0pLEkuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLFplKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixaZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYoQz1jPT57YSYmKHIoIWN8fGMudHlwZT9uZXcgTyhudWxsLEEsYSk6YyksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKEMpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9DKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLEMpKSk7bGV0IHU9WEEoRSk7aWYodSYmdy5wcm90b2NvbHMuaW5kZXhPZih1KT09PS0xKXtyKG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK3UrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciAkQT17aHR0cDpFQSx4aHI6WGV9O0kuZm9yRWFjaCgkQSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciAkZT1BPT5gLSAke0F9YCxxcj1BPT5JLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9SS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IGk9MDtpPGU7aSsrKXt0PUFbaV07bGV0IG87aWYocj10LCFxcih0KSYmKHI9JEFbKG89U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke299J2ApO2lmKHIpYnJlYWs7bltvfHwiIyIraV09cn1pZighcil7bGV0IGk9T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxDXSk9PmBhZGFwdGVyICR7Z30gYCsoQz09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89ZT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAoJGUpLmpvaW4oYApgKToiICIrJGUoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczokQX07ZnVuY3Rpb24gQWUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IE8obnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gQWUoQSksQS5oZWFkZXJzPUQuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFcuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gQWUoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1ELmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fChBZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1ELmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEF0PUE9PkEgaW5zdGFuY2VvZiBEP3suLi5BfTpBO2Z1bmN0aW9uIEcoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIobCxzLGEpe3JldHVybiBJLmlzUGxhaW5PYmplY3QobCkmJkkuaXNQbGFpbk9iamVjdChzKT9JLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LGwscyk6SS5pc1BsYWluT2JqZWN0KHMpP0kubWVyZ2Uoe30scyk6SS5pc0FycmF5KHMpP3Muc2xpY2UoKTpzfWZ1bmN0aW9uIG4obCxzLGEpe2lmKEkuaXNVbmRlZmluZWQocykpe2lmKCFJLmlzVW5kZWZpbmVkKGwpKXJldHVybiByKHZvaWQgMCxsLGEpfWVsc2UgcmV0dXJuIHIobCxzLGEpfWZ1bmN0aW9uIGkobCxzKXtpZighSS5pc1VuZGVmaW5lZChzKSlyZXR1cm4gcih2b2lkIDAscyl9ZnVuY3Rpb24gbyhsLHMpe2lmKEkuaXNVbmRlZmluZWQocykpe2lmKCFJLmlzVW5kZWZpbmVkKGwpKXJldHVybiByKHZvaWQgMCxsKX1lbHNlIHJldHVybiByKHZvaWQgMCxzKX1mdW5jdGlvbiBnKGwscyxhKXtpZihhIGluIGUpcmV0dXJuIHIobCxzKTtpZihhIGluIEEpcmV0dXJuIHIodm9pZCAwLGwpfWxldCBDPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczoobCxzKT0+bihBdChsKSxBdChzKSwhMCl9O3JldHVybiBJLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihzKXtsZXQgYT1DW3NdfHxuLEU9YShBW3NdLGVbc10scyk7SS5pc1VuZGVmaW5lZChFKSYmYSE9PWd8fCh0W3NdPUUpfSksdH12YXIgeUE9IjEuNi44Ijt2YXIgZWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57ZWVbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIGV0PXt9O2VlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihpLG8pe3JldHVybiJbQXhpb3MgdiIreUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIitvKyhyPyIuICIrcjoiIil9cmV0dXJuKGksbyxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKG8sIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhZXRbb10mJihldFtvXT0hMCxjb25zb2xlLndhcm4obihvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShpLG8sZyk6ITB9fTtmdW5jdGlvbiBLcihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IGk9cltuXSxvPWVbaV07aWYobyl7bGV0IGc9QVtpXSxDPWc9PT12b2lkIDB8fG8oZyxpLEEpO2lmKEMhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIraSsiIG11c3QgYmUgIitDLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitpLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6S3IsdmFsaWRhdG9yczplZX07dmFyIFA9d0EudmFsaWRhdG9ycyxqPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgS0EscmVzcG9uc2U6bmV3IEtBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgaT1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1HKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOml9PXQ7ciE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpQLnRyYW5zaXRpb25hbChQLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOlAudHJhbnNpdGlvbmFsKFAuYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpQLnRyYW5zaXRpb25hbChQLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKEkuaXNGdW5jdGlvbihuKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpQLmZ1bmN0aW9uLHNlcmlhbGl6ZTpQLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBvPWkmJkkubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJkkuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSx1PT57ZGVsZXRlIGlbdV19KSx0LmhlYWRlcnM9RC5jb25jYXQobyxpKTtsZXQgZz1bXSxDPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4odCk9PT0hMXx8KEM9QyYmYy5zeW5jaHJvbm91cyxnLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IGw9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtsLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgcyxhPTAsRTtpZighQyl7bGV0IHU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IodS51bnNoaWZ0LmFwcGx5KHUsZyksdS5wdXNoLmFwcGx5KHUsbCksRT11Lmxlbmd0aCxzPVByb21pc2UucmVzb2x2ZSh0KTthPEU7KXM9cy50aGVuKHVbYSsrXSx1W2ErK10pO3JldHVybiBzfUU9Zy5sZW5ndGg7bGV0IEI9dDtmb3IoYT0wO2E8RTspe2xldCB1PWdbYSsrXSxjPWdbYSsrXTt0cnl7Qj11KEIpfWNhdGNoKGYpe2MuY2FsbCh0aGlzLGYpO2JyZWFrfX10cnl7cz1oQS5jYWxsKHRoaXMsQil9Y2F0Y2godSl7cmV0dXJuIFByb21pc2UucmVqZWN0KHUpfWZvcihhPTAsRT1sLmxlbmd0aDthPEU7KXM9cy50aGVuKGxbYSsrXSxsW2ErK10pO3JldHVybiBzfWdldFVyaShlKXtlPUcodGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1pQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtJLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe2oucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtJLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihpLG8sZyl7cmV0dXJuIHRoaXMucmVxdWVzdChHKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpvfSkpfX1qLnByb3RvdHlwZVtlXT10KCksai5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIG5BPWo7dmFyIHRlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0PWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IGksbz1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksaT1nfSkudGhlbihuKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxvfSxlKGZ1bmN0aW9uKGksbyxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBPKGksbyxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSx0dD10ZTtmdW5jdGlvbiByZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gaWUoQSl7cmV0dXJuIEkuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIG5lPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhuZSkuZm9yRWFjaCgoW0EsZV0pPT57bmVbZV09QX0pO3ZhciBydD1uZTtmdW5jdGlvbiBpdChBKXtsZXQgZT1uZXcgbkEoQSksdD1aKG5BLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBJLmV4dGVuZCh0LG5BLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSksSS5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gaXQoRyhBLG4pKX0sdH12YXIgbT1pdChXKTttLkF4aW9zPW5BO20uQ2FuY2VsZWRFcnJvcj1PO20uQ2FuY2VsVG9rZW49dHQ7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049eUE7bS50b0Zvcm1EYXRhPXg7bS5BeGlvc0Vycm9yPXA7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9cmU7bS5pc0F4aW9zRXJyb3I9aWU7bS5tZXJnZUNvbmZpZz1HO20uQXhpb3NIZWFkZXJzPUQ7bS5mb3JtVG9KU09OPUE9PnBBKEkuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPW1BLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT1ydDttLmRlZmF1bHQ9bTt2YXIgXz1tO3ZhcntBeGlvczpUYSxBeGlvc0Vycm9yOkdhLENhbmNlbGVkRXJyb3I6TGEsaXNDYW5jZWw6eGEsQ2FuY2VsVG9rZW46T2EsVkVSU0lPTjpQYSxhbGw6SmEsQ2FuY2VsOkhhLGlzQXhpb3NFcnJvcjpNYSxzcHJlYWQ6WWEsdG9Gb3JtRGF0YTpxYSxBeGlvc0hlYWRlcnM6S2EsSHR0cFN0YXR1c0NvZGU6V2EsZm9ybVRvSlNPTjp2YSxnZXRBZGFwdGVyOmphLG1lcmdlQ29uZmlnOl9hfT1fO2FzeW5jIGZ1bmN0aW9uIFdyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCBfLmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksaT1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKGkse3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIG9BPVdyO2Z1bmN0aW9uIG50KEEpe2xldCBlPU9BKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbeEFdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gdnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBpPUE7cmV0dXJuIGkud29ya2VyUHJveHkhPT12b2lkIDA/KHI9aS53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6aX0pOm50KEEpfWxldCBuPWF3YWl0IG9BKGUsdCk7cmV0dXJuIG50KG4pfXZhciBvdD12cjthc3luYyBmdW5jdGlvbiBqcihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsbz0oYXdhaXQgXy5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6b30pfXZhciBhdD1qcjt2YXIgc3Q9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIGx0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLEl0PW5ldyBUZXh0RW5jb2RlcixndD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gX3IoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLGk9QS5mc19zdGF0KGUpLnNpemUsbz1udWxsO2x0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKGkpOm89bmV3IEFycmF5QnVmZmVyKGkpO2xldCBnPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQocixnLDAsaSwwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gQnQoQSxlLHQpe2xldCByPW51bGw7bHQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkociksaT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gbi5zZXQoaSksbn1mdW5jdGlvbiB5KEEsZSx0LHIpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24geihBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLGk9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG5dKTtBLnN0cmluZ1RvVVRGOChyLGksbil9ZnVuY3Rpb24gUihBLGUsdCxyKXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxpPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG89QnQoQSxuLGkpO3JldHVybiBMKHIsby5idWZmZXIpfWZ1bmN0aW9uIG9lKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiB6cihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24obCxzKXtzd2l0Y2gobC50eXBlKXtjYXNlIFEuVGV4dFN0cmVhbTp7bGV0IGE9SXQuZW5jb2RlKGwuZGF0YS5kYXRhKSxFPXkoQSxhLHMsMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O3ooQSxCLHMpO2JyZWFrfWNhc2UgUS5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9SXQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGwuZGF0YSkpLEU9eShBLGEscywwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YH07eihBLEIscyk7YnJlYWt9Y2FzZSBRLkJpbmFyeVN0cmVhbTp7bGV0IGE9bC5kYXRhLmRhdGEsRT15KEEsYSxzLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gfTt6KEEsQixzKTticmVha31jYXNlIFEuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKGwuZGF0YS5wYXRoLGwuZGF0YS5kYXRhKTticmVha31jYXNlIFEuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUobC5kYXRhLnBhdGgsbC5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgUS5JbWFnZTp7bGV0IGE9bC5kYXRhLEU9eShBLGEuZGF0YSxzLDApLEI9eShBLGEuZGlyZWN0aW9uLHMsMSksdT10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxtZXRhZGF0YTp1fTt6KEEsYyxzKTticmVha31jYXNlIFEuTWVzaDp7bGV0IGE9bC5kYXRhLEU9eShBLGEucG9pbnRzLHMsMCksQj15KEEsYS5jZWxscyxzLDEpLHU9eShBLGEucG9pbnREYXRhLHMsMiksYz15KEEsYS5jZWxsRGF0YSxzLDMpLGY9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTt6KEEsZixzKTticmVha31jYXNlIFEuUG9seURhdGE6e2xldCBhPWwuZGF0YSxFPXkoQSxhLnBvaW50cyxzLDApLEI9eShBLGEudmVydGljZXMscywxKSx1PXkoQSxhLmxpbmVzLHMsMiksYz15KEEsYS5wb2x5Z29ucyxzLDMpLGY9eShBLGEudHJpYW5nbGVTdHJpcHMscyw0KSxkPXkoQSxhLnBvaW50RGF0YSxzLDUpLEY9eShBLGEucG9pbnREYXRhLHMsNiksUz17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Rn1gfTt6KEEsUyxzKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLGk9MDt0cnl7aT1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2gobCl7dGhyb3cgdHlwZW9mIGw9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UobCkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksbH1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksZz1BLmdldE1vZHVsZVN0ZGVycigpLEM9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJmk9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24obCxzKXtsZXQgYT1udWxsO3N3aXRjaChsLnR5cGUpe2Nhc2UgUS5UZXh0U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSx1PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsdSk7YT17ZGF0YTpndC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgUS5Kc29uQ29tcGF0aWJsZTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLHUpO2E9SlNPTi5wYXJzZShndC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgUS5CaW5hcnlTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSk7YT17ZGF0YTpCdChBLEIsdSl9O2JyZWFrfWNhc2UgUS5UZXh0RmlsZTp7YT17cGF0aDpsLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUobC5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIFEuQmluYXJ5RmlsZTp7YT17cGF0aDpsLmRhdGEucGF0aCxkYXRhOl9yKEEsbC5kYXRhLnBhdGgpfTticmVha31jYXNlIFEuSW1hZ2U6e2xldCBCPW9lKEEscyk7Qi5kYXRhPVIoQSxzLDAsQi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQi5kaXJlY3Rpb249UihBLHMsMSxNLkZsb2F0NjQpLEIubWV0YWRhdGE9bmV3IE1hcChCLm1ldGFkYXRhKSxhPUI7YnJlYWt9Y2FzZSBRLk1lc2g6e2xldCBCPW9lKEEscyk7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPVIoQSxzLDAsQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPUwoQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbHM+MD9CLmNlbGxzPVIoQSxzLDEsQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qi5jZWxscz1MKEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1SKEEscywyLEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUwoQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1SKEEscywzLEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1MKEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31jYXNlIFEuUG9seURhdGE6e2xldCBCPW9lKEEscyk7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPVIoQSxzLDAsTS5GbG9hdDMyKTpCLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEIudmVydGljZXNCdWZmZXJTaXplPjA/Qi52ZXJ0aWNlcz1SKEEscywxLGguVUludDMyKTpCLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxCLmxpbmVzQnVmZmVyU2l6ZT4wP0IubGluZXM9UihBLHMsMixoLlVJbnQzMik6Qi5saW5lcz1uZXcgVWludDMyQXJyYXksQi5wb2x5Z29uc0J1ZmZlclNpemU+MD9CLnBvbHlnb25zPVIoQSxzLDMsaC5VSW50MzIpOkIucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEIudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Qi50cmlhbmdsZVN0cmlwcz1SKEEscyw0LGguVUludDMyKTpCLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1SKEEscyw1LEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1MKEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPVIoQSxzLDYsQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1MKEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgRT17dHlwZTpsLnR5cGUsZGF0YTphfTtDLnB1c2goRSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6byxzdGRlcnI6ZyxvdXRwdXRzOkN9fXZhciBDdD16cjt2YXIgVnI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFpyKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49WHIoQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIFhyKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVnImJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBjdD1acjtmdW5jdGlvbiAkcihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgdXQ9JHI7ZnVuY3Rpb24gQWkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEV0PUFpO2Z1bmN0aW9uIGVpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBRdD1laTt2YXIgdGk7ZnVuY3Rpb24gREEoKXtyZXR1cm4gdGl9dmFyIHJpO2Z1bmN0aW9uIGZ0KCl7cmV0dXJuIHJpfXZhciBpaTtmdW5jdGlvbiBTQSgpe3JldHVybiBpaX12YXIgYWU9bmV3IE1hcDtmdW5jdGlvbiBuaSgpe2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBwdCgpe2xldCBBPURBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGtBKCl7bGV0IEE9ZnQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBvaShBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLGFlLmhhcyhuKSlyZXR1cm4gYWUuZ2V0KG4pO3tsZXQgaT1hd2FpdCBhdChBLGU/LnRvU3RyaW5nKCk/P3B0KCksdD8/a0EoKSk7cmV0dXJuIGFlLnNldChuLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIGFpKEEsZSx0LHIsbil7aWYoIWF3YWl0IHN0KCkpe2xldCBmPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChmKSxuZXcgRXJyb3IoZil9bGV0IGk9bj8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IGY9YXdhaXQgb2koQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9rQSgpKTtyZXR1cm4gQ3QoZixlLHQscil9bGV0IG89aSxnPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9uaSgpLEM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5Omwsd29ya2VyOnN9PWF3YWl0IG90KG8sQyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9rQSgpKTtvPXM7bGV0IGE9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGYpe2lmKGYudHlwZT09PVEuQmluYXJ5U3RyZWFtKXtsZXQgZD1mLmRhdGEuZGF0YTthLnB1c2goZCl9ZWxzZSBpZihmLnR5cGU9PT1RLkJpbmFyeUZpbGUpe2xldCBkPWYuZGF0YS5kYXRhO2EucHVzaChkKX1lbHNlIGlmKGYudHlwZT09PVEuSW1hZ2Upe2xldCBkPWYuZGF0YTtkLmRhdGEhPT1udWxsJiZhLnB1c2goLi4udXQoZCkpfWVsc2UgaWYoZi50eXBlPT09US5NZXNoKXtsZXQgZD1mLmRhdGE7YS5wdXNoKC4uLkV0KGQpKX1lbHNlIGlmKGYudHlwZT09PVEuUG9seURhdGEpe2xldCBkPWYuZGF0YTthLnB1c2goLi4uUXQoZCkpfX0pO2xldCBFPW4/LnBpcGVsaW5lQmFzZVVybD8/cHQoKSxCPXR5cGVvZiBFIT0ic3RyaW5nIiYmdHlwZW9mIEU/LmhyZWY8InUiP0UuaHJlZjpFLHU9ciE9bnVsbD9QQShyLGN0KGEsbj8ubm9Db3B5KSk6bnVsbCxjPWF3YWl0IGwucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLEIsZSx0LHUsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7cmV0dXJue3JldHVyblZhbHVlOmMucmV0dXJuVmFsdWUsc3Rkb3V0OmMuc3Rkb3V0LHN0ZGVycjpjLnN0ZGVycixvdXRwdXRzOmMub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIGI9YWk7dmFyIHNpPW51bGw7ZnVuY3Rpb24gZHQoKXtyZXR1cm4gc2l9dmFyIHNlLElpPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kaWNvbUAke0ZBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gUHMoQSl7c2U9QX1mdW5jdGlvbiBOKCl7aWYodHlwZW9mIHNlPCJ1IilyZXR1cm4gc2U7bGV0IEE9REEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6SWl9dmFyIEllLGdpPW51bGw7ZnVuY3Rpb24gbXQoQSl7SWU9QX1mdW5jdGlvbiBrKCl7aWYodHlwZW9mIEllPCJ1IilyZXR1cm4gSWU7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6Z2l9dmFyIFY9bnVsbDthc3luYyBmdW5jdGlvbiBodCgpe2xldCBBPWsoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO1Y9YXdhaXQgb0EoZSl9ZnVuY3Rpb24gV3MoQSl7Vj1BfWFzeW5jIGZ1bmN0aW9uIEooKXtpZihWIT09bnVsbClyZXR1cm4gVi50ZXJtaW5hdGVkJiZhd2FpdCBodCgpLFY7bGV0IEE9ZHQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgaHQoKSxWKX1hc3luYyBmdW5jdGlvbiBsaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOlEuSnNvbkNvbXBhdGlibGV9LHt0eXBlOlEuSW1hZ2V9XSxuPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBTPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtuPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFMpfX1sZXQgaT1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUz1hd2FpdCBlLmFycmF5QnVmZmVyKCk7aT17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShTKX19bGV0IG89W3t0eXBlOlEuQmluYXJ5RmlsZSxkYXRhOm59LHt0eXBlOlEuQmluYXJ5RmlsZSxkYXRhOml9XSxnPVtdLEM9bi5wYXRoO2cucHVzaChDKTtsZXQgbD1pLnBhdGg7Zy5wdXNoKGwpLGcucHVzaCgiMCIpLGcucHVzaCgiMSIpLGcucHVzaCgiLS1tZW1vcnktaW8iKSx0LmNvbG9yT3V0cHV0JiZ0LmNvbG9yT3V0cHV0JiZnLnB1c2goIi0tY29sb3Itb3V0cHV0IiksdC5jb25maWdGaWxlJiZnLnB1c2goIi0tY29uZmlnLWZpbGUiLHQuY29uZmlnRmlsZS50b1N0cmluZygpKSx0LmZyYW1lJiZnLnB1c2goIi0tZnJhbWUiLHQuZnJhbWUudG9TdHJpbmcoKSksdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZ0Lm5vUHJlc2VudGF0aW9uU3RhdGVPdXRwdXQmJmcucHVzaCgiLS1uby1wcmVzZW50YXRpb24tc3RhdGUtb3V0cHV0IiksdC5ub0JpdG1hcE91dHB1dCYmdC5ub0JpdG1hcE91dHB1dCYmZy5wdXNoKCItLW5vLWJpdG1hcC1vdXRwdXQiKTtsZXQgRT0iYXBwbHktcHJlc2VudGF0aW9uLXN0YXRlLXRvLWltYWdlIixCPXQ/LndlYldvcmtlcjtCPT09dm9pZCAwJiYoQj1hd2FpdCBKKCkpO2xldHt3ZWJXb3JrZXI6dSxyZXR1cm5WYWx1ZTpjLHN0ZGVycjpmLG91dHB1dHM6ZH09YXdhaXQgYihFLGcscixvLHtwaXBlbGluZUJhc2VVcmw6TigpLHBpcGVsaW5lV29ya2VyVXJsOmsoKSx3ZWJXb3JrZXI6Qixub0NvcHk6dD8ubm9Db3B5fSk7aWYoYyE9PTAmJmYhPT0iIil0aHJvdyBuZXcgRXJyb3IoZik7cmV0dXJue3dlYldvcmtlcjp1LHByZXNlbnRhdGlvblN0YXRlT3V0U3RyZWFtOmRbMF0/LmRhdGEsb3V0cHV0SW1hZ2U6ZFsxXT8uZGF0YX19dmFyIEJpPWxpO2FzeW5jIGZ1bmN0aW9uIENpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOlEuQmluYXJ5U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgYz1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShjKX19bGV0IG49W3t0eXBlOlEuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5yZWFkRmlsZU9ubHkmJmUucmVhZEZpbGVPbmx5JiZpLnB1c2goIi0tcmVhZC1maWxlLW9ubHkiKSxlLnJlYWREYXRhc2V0JiZlLnJlYWREYXRhc2V0JiZpLnB1c2goIi0tcmVhZC1kYXRhc2V0IiksZS5yZWFkWGZlckF1dG8mJmUucmVhZFhmZXJBdXRvJiZpLnB1c2goIi0tcmVhZC14ZmVyLWF1dG8iKSxlLnJlYWRYZmVyRGV0ZWN0JiZlLnJlYWRYZmVyRGV0ZWN0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWRldGVjdCIpLGUucmVhZFhmZXJMaXR0bGUmJmUucmVhZFhmZXJMaXR0bGUmJmkucHVzaCgiLS1yZWFkLXhmZXItbGl0dGxlIiksZS5yZWFkWGZlckJpZyYmZS5yZWFkWGZlckJpZyYmaS5wdXNoKCItLXJlYWQteGZlci1iaWciKSxlLnJlYWRYZmVySW1wbGljaXQmJmUucmVhZFhmZXJJbXBsaWNpdCYmaS5wdXNoKCItLXJlYWQteGZlci1pbXBsaWNpdCIpLGUuYWNjZXB0T2RkTGVuZ3RoJiZlLmFjY2VwdE9kZExlbmd0aCYmaS5wdXNoKCItLWFjY2VwdC1vZGQtbGVuZ3RoIiksZS5hc3N1bWVFdmVuTGVuZ3RoJiZlLmFzc3VtZUV2ZW5MZW5ndGgmJmkucHVzaCgiLS1hc3N1bWUtZXZlbi1sZW5ndGgiKSxlLmVuYWJsZUNwMjQ2JiZlLmVuYWJsZUNwMjQ2JiZpLnB1c2goIi0tZW5hYmxlLWNwMjQ2IiksZS5kaXNhYmxlQ3AyNDYmJmUuZGlzYWJsZUNwMjQ2JiZpLnB1c2goIi0tZGlzYWJsZS1jcDI0NiIpLGUucmV0YWluVW4mJmUucmV0YWluVW4mJmkucHVzaCgiLS1yZXRhaW4tdW4iKSxlLmNvbnZlcnRVbiYmZS5jb252ZXJ0VW4mJmkucHVzaCgiLS1jb252ZXJ0LXVuIiksZS5lbmFibGVDb3JyZWN0aW9uJiZlLmVuYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1lbmFibGUtY29ycmVjdGlvbiIpLGUuZGlzYWJsZUNvcnJlY3Rpb24mJmUuZGlzYWJsZUNvcnJlY3Rpb24mJmkucHVzaCgiLS1kaXNhYmxlLWNvcnJlY3Rpb24iKTtsZXQgQz0icmVhZC1kaWNvbS1lbmNhcHN1bGF0ZWQtcGRmIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBKKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpFLG91dHB1dHM6Qn09YXdhaXQgYihDLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6TigpLHBpcGVsaW5lV29ya2VyVXJsOmsoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJkUhPT0iIil0aHJvdyBuZXcgRXJyb3IoRSk7cmV0dXJue3dlYldvcmtlcjpzLHBkZkJpbmFyeU91dHB1dDooQlswXT8uZGF0YSkuZGF0YX19dmFyIGNpPUNpO2FzeW5jIGZ1bmN0aW9uIHVpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOlEuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IGM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoYyl9fWxldCBuPVt7dHlwZTpRLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpZihpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmaS5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmaS5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmaS5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmaS5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZpLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJmkucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJmkucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLnByb2Nlc3NpbmdEZXRhaWxzJiZlLnByb2Nlc3NpbmdEZXRhaWxzJiZpLnB1c2goIi0tcHJvY2Vzc2luZy1kZXRhaWxzIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLmRpc2FibGVWckNoZWNrZXImJmUuZGlzYWJsZVZyQ2hlY2tlciYmaS5wdXNoKCItLWRpc2FibGUtdnItY2hlY2tlciIpLGUuY2hhcnNldFJlcXVpcmUmJmUuY2hhcnNldFJlcXVpcmUmJmkucHVzaCgiLS1jaGFyc2V0LXJlcXVpcmUiKSxlLmNoYXJzZXRBc3N1bWUmJmkucHVzaCgiLS1jaGFyc2V0LWFzc3VtZSIsZS5jaGFyc2V0QXNzdW1lLnRvU3RyaW5nKCkpLGUuY2hhcnNldENoZWNrQWxsJiZlLmNoYXJzZXRDaGVja0FsbCYmaS5wdXNoKCItLWNoYXJzZXQtY2hlY2stYWxsIiksZS5jb252ZXJ0VG9VdGY4JiZlLmNvbnZlcnRUb1V0ZjgmJmkucHVzaCgiLS1jb252ZXJ0LXRvLXV0ZjgiKSxlLnVybFByZWZpeCYmaS5wdXNoKCItLXVybC1wcmVmaXgiLGUudXJsUHJlZml4LnRvU3RyaW5nKCkpLGUuaHRtbDMyJiZlLmh0bWwzMiYmaS5wdXNoKCItLWh0bWwtMzIiKSxlLmh0bWw0MCYmZS5odG1sNDAmJmkucHVzaCgiLS1odG1sLTQwIiksZS54aHRtbDExJiZlLnhodG1sMTEmJmkucHVzaCgiLS14aHRtbC0xMSIpLGUuYWRkRG9jdW1lbnRUeXBlJiZlLmFkZERvY3VtZW50VHlwZSYmaS5wdXNoKCItLWFkZC1kb2N1bWVudC10eXBlIiksZS5jc3NSZWZlcmVuY2Upe2xldCBjPW4ubGVuZ3RoLnRvU3RyaW5nKCk7bi5wdXNoKHt0eXBlOlEuVGV4dFN0cmVhbSxkYXRhOntkYXRhOmUuY3NzUmVmZXJlbmNlfX0pLGkucHVzaCgiLS1jc3MtcmVmZXJlbmNlIixjKX1pZihlLmNzc0ZpbGUpe2xldCBjPWUuY3NzRmlsZSxmPWM7aWYoYyBpbnN0YW5jZW9mIEZpbGUpe2xldCBGPWF3YWl0IGMuYXJyYXlCdWZmZXIoKTtmPXtwYXRoOmMubmFtZSxkYXRhOm5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShGKX19aS5wdXNoKCItLWNzcy1maWxlIiksbi5wdXNoKHt0eXBlOlEuVGV4dEZpbGUsZGF0YTpmfSk7bGV0IGQ9YyBpbnN0YW5jZW9mIEZpbGU/Yy5uYW1lOmMucGF0aDtpLnB1c2goZCl9ZS5leHBhbmRJbmxpbmUmJmUuZXhwYW5kSW5saW5lJiZpLnB1c2goIi0tZXhwYW5kLWlubGluZSIpLGUubmV2ZXJFeHBhbmRJbmxpbmUmJmUubmV2ZXJFeHBhbmRJbmxpbmUmJmkucHVzaCgiLS1uZXZlci1leHBhbmQtaW5saW5lIiksZS5hbHdheXNFeHBhbmRJbmxpbmUmJmUuYWx3YXlzRXhwYW5kSW5saW5lJiZpLnB1c2goIi0tYWx3YXlzLWV4cGFuZC1pbmxpbmUiKSxlLnJlbmRlckZ1bGxEYXRhJiZlLnJlbmRlckZ1bGxEYXRhJiZpLnB1c2goIi0tcmVuZGVyLWZ1bGwtZGF0YSIpLGUuc2VjdGlvblRpdGxlSW5saW5lJiZlLnNlY3Rpb25UaXRsZUlubGluZSYmaS5wdXNoKCItLXNlY3Rpb24tdGl0bGUtaW5saW5lIiksZS5kb2N1bWVudFR5cGVUaXRsZSYmZS5kb2N1bWVudFR5cGVUaXRsZSYmaS5wdXNoKCItLWRvY3VtZW50LXR5cGUtdGl0bGUiKSxlLnBhdGllbnRJbmZvVGl0bGUmJmUucGF0aWVudEluZm9UaXRsZSYmaS5wdXNoKCItLXBhdGllbnQtaW5mby10aXRsZSIpLGUubm9Eb2N1bWVudEhlYWRlciYmZS5ub0RvY3VtZW50SGVhZGVyJiZpLnB1c2goIi0tbm8tZG9jdW1lbnQtaGVhZGVyIiksZS5yZW5kZXJJbmxpbmVDb2RlcyYmZS5yZW5kZXJJbmxpbmVDb2RlcyYmaS5wdXNoKCItLXJlbmRlci1pbmxpbmUtY29kZXMiKSxlLmNvbmNlcHROYW1lQ29kZXMmJmUuY29uY2VwdE5hbWVDb2RlcyYmaS5wdXNoKCItLWNvbmNlcHQtbmFtZS1jb2RlcyIpLGUubnVtZXJpY1VuaXRDb2RlcyYmZS5udW1lcmljVW5pdENvZGVzJiZpLnB1c2goIi0tbnVtZXJpYy11bml0LWNvZGVzIiksZS5jb2RlVmFsdWVVbml0JiZlLmNvZGVWYWx1ZVVuaXQmJmkucHVzaCgiLS1jb2RlLXZhbHVlLXVuaXQiKSxlLmNvZGVNZWFuaW5nVW5pdCYmZS5jb2RlTWVhbmluZ1VuaXQmJmkucHVzaCgiLS1jb2RlLW1lYW5pbmctdW5pdCIpLGUucmVuZGVyQWxsQ29kZXMmJmUucmVuZGVyQWxsQ29kZXMmJmkucHVzaCgiLS1yZW5kZXItYWxsLWNvZGVzIiksZS5jb2RlRGV0YWlsc1Rvb2x0aXAmJmUuY29kZURldGFpbHNUb29sdGlwJiZpLnB1c2goIi0tY29kZS1kZXRhaWxzLXRvb2x0aXAiKTtsZXQgQz0ic3RydWN0dXJlZC1yZXBvcnQtdG8taHRtbCIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgSigpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6RSxvdXRwdXRzOkJ9PWF3YWl0IGIoQyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOk4oKSxwaXBlbGluZVdvcmtlclVybDprKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZFIT09IiIpdGhyb3cgbmV3IEVycm9yKEUpO3JldHVybnt3ZWJXb3JrZXI6cyxvdXRwdXRUZXh0OihCWzBdPy5kYXRhKS5kYXRhfX12YXIgRWk9dWk7YXN5bmMgZnVuY3Rpb24gUWkoQSxlPXt9KXtsZXQgdD1be3R5cGU6US5UZXh0U3RyZWFtfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgYz1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShjKX19bGV0IG49W3t0eXBlOlEuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2kucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS51bmtub3duUmVsYXRpb25zaGlwJiZlLnVua25vd25SZWxhdGlvbnNoaXAmJmkucHVzaCgiLS11bmtub3duLXJlbGF0aW9uc2hpcCIpLGUuaW52YWxpZEl0ZW1WYWx1ZSYmZS5pbnZhbGlkSXRlbVZhbHVlJiZpLnB1c2goIi0taW52YWxpZC1pdGVtLXZhbHVlIiksZS5pZ25vcmVDb25zdHJhaW50cyYmZS5pZ25vcmVDb25zdHJhaW50cyYmaS5wdXNoKCItLWlnbm9yZS1jb25zdHJhaW50cyIpLGUuaWdub3JlSXRlbUVycm9ycyYmZS5pZ25vcmVJdGVtRXJyb3JzJiZpLnB1c2goIi0taWdub3JlLWl0ZW0tZXJyb3JzIiksZS5za2lwSW52YWxpZEl0ZW1zJiZlLnNraXBJbnZhbGlkSXRlbXMmJmkucHVzaCgiLS1za2lwLWludmFsaWQtaXRlbXMiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmaS5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUubnVtYmVyTmVzdGVkSXRlbXMmJmUubnVtYmVyTmVzdGVkSXRlbXMmJmkucHVzaCgiLS1udW1iZXItbmVzdGVkLWl0ZW1zIiksZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmZS5zaG9ydGVuTG9uZ1ZhbHVlcyYmaS5wdXNoKCItLXNob3J0ZW4tbG9uZy12YWx1ZXMiKSxlLnByaW50SW5zdGFuY2VVaWQmJmUucHJpbnRJbnN0YW5jZVVpZCYmaS5wdXNoKCItLXByaW50LWluc3RhbmNlLXVpZCIpLGUucHJpbnRTb3BjbGFzc1Nob3J0JiZlLnByaW50U29wY2xhc3NTaG9ydCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXNob3J0IiksZS5wcmludFNvcGNsYXNzTG9uZyYmZS5wcmludFNvcGNsYXNzTG9uZyYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLWxvbmciKSxlLnByaW50U29wY2xhc3NVaWQmJmUucHJpbnRTb3BjbGFzc1VpZCYmaS5wdXNoKCItLXByaW50LXNvcGNsYXNzLXVpZCIpLGUucHJpbnRBbGxDb2RlcyYmZS5wcmludEFsbENvZGVzJiZpLnB1c2goIi0tcHJpbnQtYWxsLWNvZGVzIiksZS5wcmludEludmFsaWRDb2RlcyYmZS5wcmludEludmFsaWRDb2RlcyYmaS5wdXNoKCItLXByaW50LWludmFsaWQtY29kZXMiKSxlLnByaW50VGVtcGxhdGVJZCYmZS5wcmludFRlbXBsYXRlSWQmJmkucHVzaCgiLS1wcmludC10ZW1wbGF0ZS1pZCIpLGUuaW5kaWNhdGVFbmhhbmNlZCYmZS5pbmRpY2F0ZUVuaGFuY2VkJiZpLnB1c2goIi0taW5kaWNhdGUtZW5oYW5jZWQiKSxlLnByaW50Q29sb3ImJmUucHJpbnRDb2xvciYmaS5wdXNoKCItLXByaW50LWNvbG9yIik7bGV0IEM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLXRleHQiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IEooKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOkUsb3V0cHV0czpCfT1hd2FpdCBiKEMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDpOKCkscGlwZWxpbmVXb3JrZXJVcmw6aygpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmRSE9PSIiKXRocm93IG5ldyBFcnJvcihFKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0VGV4dDooQlswXT8uZGF0YSkuZGF0YX19dmFyIGZpPVFpO2FzeW5jIGZ1bmN0aW9uIHBpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOlEuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCB1PWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHUpfX1sZXQgbj1be3R5cGU6US5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aWYoaS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgZS50YWdzVG9SZWFkPCJ1Iil7bGV0IHU9bi5sZW5ndGgudG9TdHJpbmcoKTtuLnB1c2goe3R5cGU6US5Kc29uQ29tcGF0aWJsZSxkYXRhOmUudGFnc1RvUmVhZH0pLGkucHVzaCgiLS10YWdzLXRvLXJlYWQiLHUpfWxldCBDPSJyZWFkLWRpY29tLXRhZ3MiLHt3ZWJXb3JrZXI6bCxyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6RX09YXdhaXQgYihDLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6TigpLHBpcGVsaW5lV29ya2VyVXJsOmsoKSx3ZWJXb3JrZXI6ZT8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6bCx0YWdzOkVbMF0uZGF0YX19dmFyIGRpPXBpO2FzeW5jIGZ1bmN0aW9uIG1pKEEsZT0hMSx0PXt9KXtsZXQgcj1be3R5cGU6US5JbWFnZX0se3R5cGU6US5Kc29uQ29tcGF0aWJsZX1dLG49W10saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksaS5wdXNoKCItLWlucHV0LWltYWdlcyIpLEEuZm9yRWFjaCh1PT57bi5wdXNoKHt0eXBlOlEuQmluYXJ5RmlsZSxkYXRhOnV9KSxpLnB1c2godS5wYXRoKX0pLHR5cGVvZiBlPCJ1IiYmZSYmaS5wdXNoKCItLXNpbmdsZS1zb3J0ZWQtc2VyaWVzIik7bGV0IEM9InJlYWQtaW1hZ2UtZGljb20tZmlsZS1zZXJpZXMiLHt3ZWJXb3JrZXI6bCxyZXR1cm5WYWx1ZTpzLHN0ZGVycjphLG91dHB1dHM6RX09YXdhaXQgYihDLGkscixuLHtwaXBlbGluZUJhc2VVcmw6TigpLHBpcGVsaW5lV29ya2VyVXJsOmsoKSx3ZWJXb3JrZXI6dD8ud2ViV29ya2VyPz9udWxsfSk7aWYocyE9PTApdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6bCxvdXRwdXRJbWFnZTpFWzBdLmRhdGEsc29ydGVkRmlsZW5hbWVzOkVbMV0uZGF0YX19dmFyIGdlPW1pO3ZhciBoaT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NCx5dD04O2FzeW5jIGZ1bmN0aW9uIHlpKEE9e2lucHV0SW1hZ2VzOltdfSl7bGV0IGU9QS53ZWJXb3JrZXJQb29sPz9udWxsO2U9PT1udWxsJiYoZT1uZXcgVEEoaGksZ2UpKTtsZXQgdD1bXTtpZihBLmlucHV0SW1hZ2VzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignImlucHV0LWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtpZihhd2FpdCBQcm9taXNlLmFsbChBLmlucHV0SW1hZ2VzLm1hcChhc3luYyByPT57bGV0IG49cjtpZihyIGluc3RhbmNlb2YgRmlsZSl7bGV0IGk9YXdhaXQgci5hcnJheUJ1ZmZlcigpO249e3BhdGg6ci5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoaSl9fXQucHVzaChuKX0pKSxBLnNpbmdsZVNvcnRlZFNlcmllcyl7bGV0IHI9W107Zm9yKGxldCBDPTA7Qzx0Lmxlbmd0aDtDKz15dCl7bGV0IGw9dC5zbGljZShDLEMreXQpO3IucHVzaChbbCxBLnNpbmdsZVNvcnRlZFNlcmllcyx7fV0pfWxldCBuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZSxpPW4ubWFwKEM9PkMub3V0cHV0SW1hZ2UpLG89bi5yZWR1Y2UoKEMsbCk9PkMuY29uY2F0KGwuc29ydGVkRmlsZW5hbWVzKSxbXSk7cmV0dXJue291dHB1dEltYWdlOlVBKGkpLHdlYldvcmtlclBvb2w6ZSxzb3J0ZWRGaWxlbmFtZXM6b319ZWxzZXtsZXQgcj1bW3QsQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dXSxuPWF3YWl0IGUucnVuVGFza3MocikucHJvbWlzZTtyZXR1cm57b3V0cHV0SW1hZ2U6blswXS5vdXRwdXRJbWFnZSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm5bMF0uc29ydGVkRmlsZW5hbWVzfX19dmFyIHdpPXlpO3ZhciB3dD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgdHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBldD0oQSxJKT0+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/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLHhJKGUsSSx0KSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIFBJPWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFA9dWU7ZnVuY3Rpb24gaGUoQSxJKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDg6e3Q9bmV3IEludDhBcnJheShJKTticmVha31jYXNlIHAuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShJKTticmVha31jYXNlIHAuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoSSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFk9aGU7dmFyIFpJPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGpJPW5ldyBUZXh0RW5jb2RlcixXST1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSxJKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3BlbihJLHQuZmxhZ3MpLHI9QS5mc19zdGF0KEkpLnNpemUsaT1udWxsO1pJP2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOmk9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBzPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQoZSxzLDAsciwwKSxBLmZzX2Nsb3NlKGUpLHN9ZnVuY3Rpb24gVkkoQSxJLHQpe2xldCBlPW51bGw7Wkk/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6ZT1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSx0KTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiB5KEEsSSx0LGUpe2xldCBnPTA7cmV0dXJuIEkhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGUsSS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShJLmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gaihBLEksdCl7bGV0IGU9SlNPTi5zdHJpbmdpZnkoSSksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gRihBLEksdCxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLGk9VkkoQSxnLHIpO3JldHVybiBZKGUsaS5idWZmZXIpfWZ1bmN0aW9uIHpBKEEsSSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxJXSksZT1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLEksdCxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxDKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG89akkuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG89akkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG89US5kYXRhLmRhdGEsZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG89US5kYXRhLGY9eShBLG8uZGF0YSxDLDApLG49eShBLG8uZGlyZWN0aW9uLEMsMSksRT10eXBlb2Ygby5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShvLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOm8uaW1hZ2VUeXBlLG5hbWU6by5uYW1lLG9yaWdpbjpvLm9yaWdpbixzcGFjaW5nOm8uc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsc2l6ZTpvLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtqKEEsYyxDKTticmVha31jYXNlIEQuTWVzaDp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby5jZWxscyxDLDEpLEU9eShBLG8ucG9pbnREYXRhLEMsMiksYz15KEEsby5jZWxsRGF0YSxDLDMpLHU9e21lc2hUeXBlOm8ubWVzaFR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpvLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsY2VsbEJ1ZmZlclNpemU6by5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtqKEEsdSxDKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8udmVydGljZXMsQywxKSxFPXkoQSxvLmxpbmVzLEMsMiksYz15KEEsby5wb2x5Z29ucyxDLDMpLHU9eShBLG8udHJpYW5nbGVTdHJpcHMsQyw0KSxkPXkoQSxvLnBvaW50RGF0YSxDLDUpLFI9eShBLG8ucG9pbnREYXRhLEMsNiksTj17cG9seURhdGFUeXBlOm8ucG9seURhdGFUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpvLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxsaW5lc0J1ZmZlclNpemU6by5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOm8ucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpvLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtqKEEsTixDKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKEkuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCkscz1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJnI9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oUSxDKXtsZXQgbz1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz17ZGF0YTpXSS5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289SlNPTi5wYXJzZShXSS5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSk7bz17ZGF0YTpWSShBLG4sRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBuPXpBKEEsQyk7bi5kYXRhPUYoQSxDLDAsbi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksbi5kaXJlY3Rpb249RihBLEMsMSxQLkZsb2F0NjQpLG4ubWV0YWRhdGE9bmV3IE1hcChuLm1ldGFkYXRhKSxvPW47YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsbi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOm4ucG9pbnRzPVkobi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbHM+MD9uLmNlbGxzPUYoQSxDLDEsbi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6bi5jZWxscz1ZKG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQywyLG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQywzLG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsUC5GbG9hdDMyKTpuLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LG4udmVydGljZXNCdWZmZXJTaXplPjA/bi52ZXJ0aWNlcz1GKEEsQywxLHAuVUludDMyKTpuLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxuLmxpbmVzQnVmZmVyU2l6ZT4wP24ubGluZXM9RihBLEMsMixwLlVJbnQzMik6bi5saW5lcz1uZXcgVWludDMyQXJyYXksbi5wb2x5Z29uc0J1ZmZlclNpemU+MD9uLnBvbHlnb25zPUYoQSxDLDMscC5VSW50MzIpOm4ucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LG4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bi50cmlhbmdsZVN0cmlwcz1GKEEsQyw0LHAuVUludDMyKTpuLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQyw1LG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDYsbi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTpvfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6aSxzdGRlcnI6cyxvdXRwdXRzOmF9fXZhciBYST15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsSSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSxJKTtnIT09bnVsbCYmdC5wdXNoKGcpfXJldHVybiB0fWZ1bmN0aW9uIHBlKEEsSSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksd2UmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkk/dDp0LnNsaWNlKDApfXZhciB6ST1tZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX0k9RmU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZJPVNlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkST1SZTthc3luYyBmdW5jdGlvbiBOZShBLEksdCxlKXtsZXQgZz1YSShBLEksdCxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8aS50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKHMpfWVsc2UgaWYoaS50eXBlPT09RC5JbWFnZSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi5fSShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELk1lc2gpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4udkkocykpfWVsc2UgaWYoaS50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi4kSShzKSl9fSksRkEoZyx6SShyLCEwKSl9dmFyIEF0PU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSxJLHQsZSxnLHIpe2xldCBpPWF3YWl0IFBJKEEsSSxyKTtyZXR1cm4gYXdhaXQgQXQoaSx0LGUsZyl9fTtvQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJzttdCh3dCk7ZXhwb3J0e0JpIGFzIGFwcGx5UHJlc2VudGF0aW9uU3RhdGVUb0ltYWdlLEogYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixrIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLE4gYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxjaSBhcyByZWFkRGljb21FbmNhcHN1bGF0ZWRQZGYsZGkgYXMgcmVhZERpY29tVGFncyx3aSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXMsZ2UgYXMgcmVhZEltYWdlRGljb21GaWxlU2VyaWVzV29ya2VyRnVuY3Rpb24sV3MgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixtdCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxQcyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLEVpIGFzIHN0cnVjdHVyZWRSZXBvcnRUb0h0bWwsZmkgYXMgc3RydWN0dXJlZFJlcG9ydFRvVGV4dCxGQSBhcyB2ZXJzaW9ufTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" +default_js_module = """data:text/javascript;base64,dmFyIFN0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIga3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlTdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEZ0PSI3LjAuMSIsRkE9RnQ7dmFyIFJ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0saD1SdDt2YXIgYnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09YnQ7ZnVuY3Rpb24gVXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIGguVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBoLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIGguVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIGguSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBoLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBoLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgaC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBoLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEw9VXQ7dmFyIE50PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sbGU9TnQ7dmFyIFJBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PWguVUludDgscj1sZS5TY2FsYXIsbj0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPW59fSxCZT1SQTtmdW5jdGlvbiBUdChBLGUsdCxyLG4pe0Fbcit0KmVdPW59dmFyIENlPVR0O3ZhciBiQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgQmUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKUNlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sY2U9YkE7ZnVuY3Rpb24gR3QoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgY2UoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IG49ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IGk9QS5yZWR1Y2UoKHMsYSk9PnMrYS5zaXplW25dLDApO3Quc2l6ZVtuXT1pO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKHMsYSk9PnMqYSwxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLGc9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgZyhvKTtsZXQgQz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgcz0wO3M8dC5zaXplLmxlbmd0aC0xO3MrKylDKj10LnNpemVbc107bGV0IGw9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBzPTA7czxBLmxlbmd0aDtzKyspdC5kYXRhLnNldChBW3NdLmRhdGEsQypsKSxsKz1BW3NdLnNpemVbbl07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgVUE9R3Q7dmFyIE5BPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChuLGkpPT57ci5yZXNvbHZlPW4sci5yZWplY3Q9aSxyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sZyk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxnLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBuPXRoaXMucnVuSW5mb1tlXTtpZihuPy5jYW5jZWxlZD09PSEwKXtuLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2sobi5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBpPXRoaXMud29ya2VyUXVldWUucG9wKCk7bi5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPWksdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLmd9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihuLnJ1bm5pbmdXb3JrZXJzLS0sbi5yZXN1bHRzW3RdPWcsbi5jb21wbGV0ZWRUYXNrcysrLG4ucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmbi5wcm9ncmVzc0NhbGxiYWNrKG4uY29tcGxldGVkVGFza3Msbi5yZXN1bHRzLmxlbmd0aCksbi50YXNrUXVldWUubGVuZ3RoPjApe2xldCBDPW4udGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsQ1swXSxDWzFdKX1lbHNlIGlmKCFuLmFkZGluZ1Rhc2tzJiZuLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IEM9bi5yZXN1bHRzO24ucmVzb2x2ZShDKSx0aGlzLmNsZWFyVGFzayhuLmluZGV4KX19fSkuY2F0Y2gobz0+e24ucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKG4uaW5kZXgpfSl9ZWxzZSBuLnJ1bm5pbmdXb3JrZXJzIT09MHx8bi5wb3N0cG9uZWQ/bi50YXNrUXVldWUucHVzaChbdCxyXSk6KG4ucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntuLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2sobi5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sVEE9TkE7dmFyIEx0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGY9THQ7dmFyIEVlPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHh0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHhBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxHQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksc0E9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGZlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLE90PXtjYW5IYW5kbGU6QT0+ZmUoQSkmJkFbRWVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIHBlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxPQShBKX19LFB0PXtjYW5IYW5kbGU6QT0+ZmUoQSkmJnNBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxRZT1uZXcgTWFwKFtbInByb3h5IixPdF0sWyJ0aHJvdyIsUHRdXSk7ZnVuY3Rpb24gSnQoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHBlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIUp0KHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpvLHBhdGg6Z309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxDPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEgpLGw7dHJ5e2xldCBzPWcuc2xpY2UoMCwtMSkucmVkdWNlKChFLEIpPT5FW0JdLEEpLGE9Zy5yZWR1Y2UoKEUsQik9PkVbQl0sQSk7c3dpdGNoKG8pe2Nhc2UiR0VUIjpsPWE7YnJlYWs7Y2FzZSJTRVQiOnNbZy5zbGljZSgtMSlbMF1dPUgobi5kYXRhLnZhbHVlKSxsPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmw9YS5hcHBseShzLEMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IEU9bmV3IGEoLi4uQyk7bD1LdChFKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOkUscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO3BlKEEsQiksbD1QQShFLFtFXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpsPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gocyl7bD17dmFsdWU6cyxbc0FdOjB9fVByb21pc2UucmVzb2x2ZShsKS5jYXRjaChzPT4oe3ZhbHVlOnMsW3NBXTowfSkpLnRoZW4ocz0+e2xldFthLEVdPWxBKHMpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDppfSksRSksbz09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksZGUoZSksR0EgaW4gQSYmdHlwZW9mIEFbR0FdPT0iZnVuY3Rpb24iJiZBW0dBXSgpKX0pLmNhdGNoKHM9PntsZXRbYSxFXT1sQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW3NBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxFKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIEh0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGRlKEEpe0h0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gT0EoQSxlKXtyZXR1cm4gTEEoQSxbXSxlKX1mdW5jdGlvbiBhQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gbWUoQSl7cmV0dXJuIFkoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57ZGUoQSl9KX12YXIgSUE9bmV3IFdlYWtNYXAsZ0E9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KElBLmdldChBKXx8MCktMTtJQS5zZXQoQSxlKSxlPT09MCYmbWUoQSl9KTtmdW5jdGlvbiBNdChBLGUpe2xldCB0PShJQS5nZXQoZSl8fDApKzE7SUEuc2V0KGUsdCksZ0EmJmdBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBZdChBKXtnQSYmZ0EudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBMQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChpLG8pe2lmKGFBKHIpLG89PT14QSlyZXR1cm4oKT0+e1l0KG4pLG1lKEEpLHI9ITB9O2lmKG89PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IGc9WShBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoQz0+Qy50b1N0cmluZygpKX0pLnRoZW4oSCk7cmV0dXJuIGcudGhlbi5iaW5kKGcpfXJldHVybiBMQShBLFsuLi5lLG9dKX0sc2V0KGksbyxnKXthQShyKTtsZXRbQyxsXT1sQShnKTtyZXR1cm4gWShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsb10ubWFwKHM9PnMudG9TdHJpbmcoKSksdmFsdWU6Q30sbCkudGhlbihIKX0sYXBwbHkoaSxvLGcpe2FBKHIpO2xldCBDPWVbZS5sZW5ndGgtMV07aWYoQz09PXh0KXJldHVybiBZKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oSCk7aWYoQz09PSJiaW5kIilyZXR1cm4gTEEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbbCxzXT11ZShnKTtyZXR1cm4gWShBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpsfSxzKS50aGVuKEgpfSxjb25zdHJ1Y3QoaSxvKXthQShyKTtsZXRbZyxDXT11ZShvKTtyZXR1cm4gWShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Z30sQykudGhlbihIKX19KTtyZXR1cm4gTXQobixBKSxufWZ1bmN0aW9uIHF0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIHVlKEEpe2xldCBlPUEubWFwKGxBKTtyZXR1cm5bZS5tYXAodD0+dFswXSkscXQoZS5tYXAodD0+dFsxXSkpXX12YXIgaGU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gUEEoQSxlKXtyZXR1cm4gaGUuc2V0KEEsZSksQX1mdW5jdGlvbiBLdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbRWVdOiEwfSl9ZnVuY3Rpb24gbEEoQSl7Zm9yKGxldFtlLHRdb2YgUWUpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxoZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBIKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIFFlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gWShBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj1XdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShvKXshby5kYXRhfHwhby5kYXRhLmlkfHxvLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKG8uZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiBXdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gWihBLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KGUsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOnZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpNQX09T2JqZWN0LENBPShBPT5lPT57bGV0IHQ9dnQuY2FsbChlKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFQ9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLGU9PkNBKGUpPT09QSksY0E9QT0+ZT0+dHlwZW9mIGU9PT1BLHtpc0FycmF5OnF9PUFycmF5LFg9Y0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGp0KEEpe3JldHVybiBBIT09bnVsbCYmIVgoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWChBLmNvbnN0cnVjdG9yKSYmVShBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgU2U9VCgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBfdChBKXtsZXQgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOmU9QSYmQS5idWZmZXImJlNlKEEuYnVmZmVyKSxlfXZhciB6dD1jQSgic3RyaW5nIiksVT1jQSgiZnVuY3Rpb24iKSxrZT1jQSgibnVtYmVyIiksdUE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixWdD1BPT5BPT09ITB8fEE9PT0hMSxCQT1BPT57aWYoQ0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgZT1NQShBKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxadD1UKCJEYXRlIiksWHQ9VCgiRmlsZSIpLCR0PVQoIkJsb2IiKSxBcj1UKCJGaWxlTGlzdCIpLGVyPUE9PnVBKEEpJiZVKEEucGlwZSksdHI9QT0+e2xldCBlO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFUoQS5hcHBlbmQpJiYoKGU9Q0EoQSkpPT09ImZvcm1kYXRhInx8ZT09PSJvYmplY3QiJiZVKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHJyPVQoIlVSTFNlYXJjaFBhcmFtcyIpLGlyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiAkKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG49QS5sZW5ndGg7cjxuO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG89aS5sZW5ndGgsZztmb3Iocj0wO3I8bztyKyspZz1pW3JdLGUuY2FsbChudWxsLEFbZ10sZyxBKX19ZnVuY3Rpb24gRmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG47Zm9yKDtyLS0gPjA7KWlmKG49dFtyXSxlPT09bi50b0xvd2VyQ2FzZSgpKXJldHVybiBuO3JldHVybiBudWxsfXZhciBSZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLGJlPUE9PiFYKEEpJiZBIT09UmU7ZnVuY3Rpb24gSEEoKXtsZXR7Y2FzZWxlc3M6QX09YmUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBpPUEmJkZlKGUsbil8fG47QkEoZVtpXSkmJkJBKHIpP2VbaV09SEEoZVtpXSxyKTpCQShyKT9lW2ldPUhBKHt9LHIpOnEocik/ZVtpXT1yLnNsaWNlKCk6ZVtpXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJiQoYXJndW1lbnRzW3JdLHQpO3JldHVybiBlfXZhciBucj0oQSxlLHQse2FsbE93bktleXM6cn09e30pPT4oJChlLChuLGkpPT57dCYmVShuKT9BW2ldPVoobix0KTpBW2ldPW59LHthbGxPd25LZXlzOnJ9KSxBKSxvcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGFyPShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LHNyPShBLGUsdCxyKT0+e2xldCBuLGksbyxnPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxpPW4ubGVuZ3RoO2ktLSA+MDspbz1uW2ldLCghcnx8cihvLEEsZSkpJiYhZ1tvXSYmKGVbb109QVtvXSxnW29dPSEwKTtBPXQhPT0hMSYmTUEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LElyPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sZ3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHEoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIWtlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxscj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTUEoVWludDhBcnJheSkpLEJyPShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IGk9bi52YWx1ZTtlLmNhbGwoQSxpWzBdLGlbMV0pfX0sQ3I9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sY3I9VCgiSFRNTEZvcm1FbGVtZW50IiksdXI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLHdlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxFcj1UKCJSZWdFeHAiKSxVZT0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307JCh0LChuLGkpPT57bGV0IG87KG89ZShuLGksQSkpIT09ITEmJihyW2ldPW98fG4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0sZnI9QT0+e1VlKEEsKGUsdCk9PntpZihVKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKFUocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0sUXI9KEEsZSk9PntsZXQgdD17fSxyPW49PntuLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0scHI9KCk9Pnt9LGRyPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxKQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLERlPSIwMTIzNDU2Nzg5IixOZT17RElHSVQ6RGUsQUxQSEE6SkEsQUxQSEFfRElHSVQ6SkErSkEudG9VcHBlckNhc2UoKStEZX0sbXI9KEE9MTYsZT1OZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBocihBKXtyZXR1cm4hIShBJiZVKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgeXI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKHVBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBpPXEocik/W106e307cmV0dXJuICQociwobyxnKT0+e2xldCBDPXQobyxuKzEpOyFYKEMpJiYoaVtnXT1DKX0pLGVbbl09dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChBLDApfSx3cj1UKCJBc3luY0Z1bmN0aW9uIiksRHI9QT0+QSYmKHVBKEEpfHxVKEEpKSYmVShBLnRoZW4pJiZVKEEuY2F0Y2gpLEk9e2lzQXJyYXk6cSxpc0FycmF5QnVmZmVyOlNlLGlzQnVmZmVyOmp0LGlzRm9ybURhdGE6dHIsaXNBcnJheUJ1ZmZlclZpZXc6X3QsaXNTdHJpbmc6enQsaXNOdW1iZXI6a2UsaXNCb29sZWFuOlZ0LGlzT2JqZWN0OnVBLGlzUGxhaW5PYmplY3Q6QkEsaXNVbmRlZmluZWQ6WCxpc0RhdGU6WnQsaXNGaWxlOlh0LGlzQmxvYjokdCxpc1JlZ0V4cDpFcixpc0Z1bmN0aW9uOlUsaXNTdHJlYW06ZXIsaXNVUkxTZWFyY2hQYXJhbXM6cnIsaXNUeXBlZEFycmF5OmxyLGlzRmlsZUxpc3Q6QXIsZm9yRWFjaDokLG1lcmdlOkhBLGV4dGVuZDpucix0cmltOmlyLHN0cmlwQk9NOm9yLGluaGVyaXRzOmFyLHRvRmxhdE9iamVjdDpzcixraW5kT2Y6Q0Esa2luZE9mVGVzdDpULGVuZHNXaXRoOklyLHRvQXJyYXk6Z3IsZm9yRWFjaEVudHJ5OkJyLG1hdGNoQWxsOkNyLGlzSFRNTEZvcm06Y3IsaGFzT3duUHJvcGVydHk6d2UsaGFzT3duUHJvcDp3ZSxyZWR1Y2VEZXNjcmlwdG9yczpVZSxmcmVlemVNZXRob2RzOmZyLHRvT2JqZWN0U2V0OlFyLHRvQ2FtZWxDYXNlOnVyLG5vb3A6cHIsdG9GaW5pdGVOdW1iZXI6ZHIsZmluZEtleTpGZSxnbG9iYWw6UmUsaXNDb250ZXh0RGVmaW5lZDpiZSxBTFBIQUJFVDpOZSxnZW5lcmF0ZVN0cmluZzptcixpc1NwZWNDb21wbGlhbnRGb3JtOmhyLHRvSlNPTk9iamVjdDp5cixpc0FzeW5jRm46d3IsaXNUaGVuYWJsZTpEcn07ZnVuY3Rpb24gSyhBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1JLmluaGVyaXRzKEssRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpJLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBUZT1LLnByb3RvdHlwZSxHZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntHZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLEdlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoVGUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Sy5mcm9tPShBLGUsdCxyLG4saSk9PntsZXQgbz1PYmplY3QuY3JlYXRlKFRlKTtyZXR1cm4gSS50b0ZsYXRPYmplY3QoQSxvLGZ1bmN0aW9uKEMpe3JldHVybiBDIT09RXJyb3IucHJvdG90eXBlfSxnPT5nIT09ImlzQXhpb3NFcnJvciIpLEsuY2FsbChvLEEubWVzc2FnZSxlLHQscixuKSxvLmNhdXNlPUEsby5uYW1lPUEubmFtZSxpJiZPYmplY3QuYXNzaWduKG8saSksb307dmFyIHA9Szt2YXIgRUE9bnVsbDtmdW5jdGlvbiBZQShBKXtyZXR1cm4gSS5pc1BsYWluT2JqZWN0KEEpfHxJLmlzQXJyYXkoQSl9ZnVuY3Rpb24geGUoQSl7cmV0dXJuIEkuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gTGUoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLGkpe3JldHVybiBuPXhlKG4pLCF0JiZpPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBTcihBKXtyZXR1cm4gSS5pc0FycmF5KEEpJiYhQS5zb21lKFlBKX12YXIga3I9SS50b0ZsYXRPYmplY3QoSSx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIEZyKEEsZSx0KXtpZighSS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhFQXx8Rm9ybURhdGEpLHQ9SS50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGMsUSl7cmV0dXJuIUkuaXNVbmRlZmluZWQoUVtjXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fHMsaT10LmRvdHMsbz10LmluZGV4ZXMsQz0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZJLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIUkuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGwodSl7aWYodT09PW51bGwpcmV0dXJuIiI7aWYoSS5pc0RhdGUodSkpcmV0dXJuIHUudG9JU09TdHJpbmcoKTtpZighQyYmSS5pc0Jsb2IodSkpdGhyb3cgbmV3IHAoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIEkuaXNBcnJheUJ1ZmZlcih1KXx8SS5pc1R5cGVkQXJyYXkodSk/QyYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW3VdKTpCdWZmZXIuZnJvbSh1KTp1fWZ1bmN0aW9uIHModSxjLFEpe2xldCBkPXU7aWYodSYmIVEmJnR5cGVvZiB1PT0ib2JqZWN0Iil7aWYoSS5lbmRzV2l0aChjLCJ7fSIpKWM9cj9jOmMuc2xpY2UoMCwtMiksdT1KU09OLnN0cmluZ2lmeSh1KTtlbHNlIGlmKEkuaXNBcnJheSh1KSYmU3IodSl8fChJLmlzRmlsZUxpc3QodSl8fEkuZW5kc1dpdGgoYywiW10iKSkmJihkPUkudG9BcnJheSh1KSkpcmV0dXJuIGM9eGUoYyksZC5mb3JFYWNoKGZ1bmN0aW9uKFMsRHQpeyEoSS5pc1VuZGVmaW5lZChTKXx8Uz09PW51bGwpJiZlLmFwcGVuZChvPT09ITA/TGUoW2NdLER0LGkpOm89PT1udWxsP2M6YysiW10iLGwoUykpfSksITF9cmV0dXJuIFlBKHUpPyEwOihlLmFwcGVuZChMZShRLGMsaSksbCh1KSksITEpfWxldCBhPVtdLEU9T2JqZWN0LmFzc2lnbihrcix7ZGVmYXVsdFZpc2l0b3I6cyxjb252ZXJ0VmFsdWU6bCxpc1Zpc2l0YWJsZTpZQX0pO2Z1bmN0aW9uIEIodSxjKXtpZighSS5pc1VuZGVmaW5lZCh1KSl7aWYoYS5pbmRleE9mKHUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2Muam9pbigiLiIpKTthLnB1c2godSksSS5mb3JFYWNoKHUsZnVuY3Rpb24oZCxGKXsoIShJLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJm4uY2FsbChlLGQsSS5pc1N0cmluZyhGKT9GLnRyaW0oKTpGLGMsRSkpPT09ITAmJkIoZCxjP2MuY29uY2F0KEYpOltGXSl9KSxhLnBvcCgpfX1pZighSS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEIoQSksZX12YXIgeD1GcjtmdW5jdGlvbiBPZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIFBlKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmeChBLHRoaXMsZSl9dmFyIEplPVBlLnByb3RvdHlwZTtKZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07SmUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscixPZSl9Ok9lO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obil7cmV0dXJuIHQoblswXSkrIj0iK3QoblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBmQT1QZTtmdW5jdGlvbiBScihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBBQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fFJyLG49dCYmdC5zZXJpYWxpemUsaTtpZihuP2k9bihlLHQpOmk9SS5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGZBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG89QS5pbmRleE9mKCIjIik7byE9PS0xJiYoQT1BLnNsaWNlKDAsbykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIHFBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtJLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sS0E9cUE7dmFyIFFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgSGU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmZBO3ZhciBNZT10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIFllPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIHFlPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOkhlLEZvcm1EYXRhOk1lLEJsb2I6WWV9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgV0E9e307a3QoV0Ese2hhc0Jyb3dzZXJFbnY6KCk9PktlLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+YnIsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Vcn0pO3ZhciBLZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixicj0oQT0+S2UmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxVcj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLldBLC4uLnFlfTtmdW5jdGlvbiB2QShBLGUpe3JldHVybiB4KEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixpKXtyZXR1cm4gdy5pc05vZGUmJkkuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBOcihBKXtyZXR1cm4gSS5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIFRyKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG47cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gR3IoQSl7ZnVuY3Rpb24gZSh0LHIsbixpKXtsZXQgbz10W2krK107aWYobz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBnPU51bWJlci5pc0Zpbml0ZSgrbyksQz1pPj10Lmxlbmd0aDtyZXR1cm4gbz0hbyYmSS5pc0FycmF5KG4pP24ubGVuZ3RoOm8sQz8oSS5oYXNPd25Qcm9wKG4sbyk/bltvXT1bbltvXSxyXTpuW29dPXIsIWcpOigoIW5bb118fCFJLmlzT2JqZWN0KG5bb10pKSYmKG5bb109W10pLGUodCxyLG5bb10saSkmJkkuaXNBcnJheShuW29dKSYmKG5bb109VHIobltvXSkpLCFnKX1pZihJLmlzRm9ybURhdGEoQSkmJkkuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gSS5mb3JFYWNoRW50cnkoQSwocixuKT0+e2UoTnIociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgcEE9R3I7ZnVuY3Rpb24gTHIoQSxlLHQpe2lmKEkuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxJLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIGpBPXt0cmFuc2l0aW9uYWw6UUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPUkuaXNPYmplY3QoZSk7aWYoaSYmSS5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLEkuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShwQShlKSk6ZTtpZihJLmlzQXJyYXlCdWZmZXIoZSl8fEkuaXNCdWZmZXIoZSl8fEkuaXNTdHJlYW0oZSl8fEkuaXNGaWxlKGUpfHxJLmlzQmxvYihlKSlyZXR1cm4gZTtpZihJLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihJLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgZztpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiB2QShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGc9SS5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBDPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4geChnP3siZmlsZXNbXSI6ZX06ZSxDJiZuZXcgQyx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG4/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxMcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8akEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxuPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJkkuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG4pKXtsZXQgbz0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZuO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChnKXtpZihvKXRocm93IGcubmFtZT09PSJTeW50YXhFcnJvciI/cC5mcm9tKGcscC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpnfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07SS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntqQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFc9akE7dmFyIHhyPUkudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksV2U9QT0+e2xldCBlPXt9LHQscixuO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihvKXtuPW8uaW5kZXhPZigiOiIpLHQ9by5zdWJzdHJpbmcoMCxuKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW8uc3Vic3RyaW5nKG4rMSkudHJpbSgpLCEoIXR8fGVbdF0mJnhyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIHZlPVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gZUEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBkQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6SS5pc0FycmF5KEEpP0EubWFwKGRBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gT3IoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIFByPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIF9BKEEsZSx0LHIsbil7aWYoSS5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG4mJihlPXQpLCEhSS5pc1N0cmluZyhlKSl7aWYoSS5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYoSS5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBKcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBIcihBLGUpe2xldCB0PUkudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihuLGksbyl7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbixpLG8pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciB2PWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG49dGhpcztmdW5jdGlvbiBpKGcsQyxsKXtsZXQgcz1lQShDKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9SS5maW5kS2V5KG4scyk7KCFhfHxuW2FdPT09dm9pZCAwfHxsPT09ITB8fGw9PT12b2lkIDAmJm5bYV0hPT0hMSkmJihuW2F8fENdPWRBKGcpKX1sZXQgbz0oZyxDKT0+SS5mb3JFYWNoKGcsKGwscyk9PmkobCxzLEMpKTtyZXR1cm4gSS5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9vKGUsdCk6SS5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhUHIoZSk/byhXZShlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9SS5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG49dGhpc1tyXTtpZighdClyZXR1cm4gbjtpZih0PT09ITApcmV0dXJuIE9yKG4pO2lmKEkuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbixyKTtpZihJLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9ZUEoZSksZSl7bGV0IHI9SS5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxfQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbj0hMTtmdW5jdGlvbiBpKG8pe2lmKG89ZUEobyksbyl7bGV0IGc9SS5maW5kS2V5KHIsbyk7ZyYmKCF0fHxfQShyLHJbZ10sZyx0KSkmJihkZWxldGUgcltnXSxuPSEwKX19cmV0dXJuIEkuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxufWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbj0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxfQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxuPSEwKX1yZXR1cm4gbn1ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBJLmZvckVhY2godGhpcywobixpKT0+e2xldCBvPUkuZmluZEtleShyLGkpO2lmKG8pe3Rbb109ZEEobiksZGVsZXRlIHRbaV07cmV0dXJufWxldCBnPWU/SnIoaSk6U3RyaW5nKGkpLnRyaW0oKTtnIT09aSYmZGVsZXRlIHRbaV0sdFtnXT1kQShuKSxyW2ddPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIEkuZm9yRWFjaCh0aGlzLChyLG4pPT57ciE9bnVsbCYmciE9PSExJiYodFtuXT1lJiZJLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChuPT5yLnNldChuKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbdmVdPXRoaXNbdmVdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG8pe2xldCBnPWVBKG8pO3JbZ118fChIcihuLG8pLHJbZ109ITApfXJldHVybiBJLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O3YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0kucmVkdWNlRGVzY3JpcHRvcnModi5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7SS5mcmVlemVNZXRob2RzKHYpO3ZhciBEPXY7ZnVuY3Rpb24gdEEoQSxlKXtsZXQgdD10aGlzfHxXLHI9ZXx8dCxuPUQuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBJLmZvckVhY2goQSxmdW5jdGlvbihnKXtpPWcuY2FsbCh0LGksbi5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxuLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqZShBLGUsdCl7cC5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIixwLkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9SS5pbmhlcml0cyhqZSxwLHtfX0NBTkNFTF9fOiEwfSk7dmFyIE89amU7ZnVuY3Rpb24gekEoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgcCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFtwLkVSUl9CQURfUkVRVUVTVCxwLkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciBfZT13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixuLGkpe2xldCBvPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO0kuaXNOdW1iZXIodCkmJm8ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLEkuaXNTdHJpbmcocikmJm8ucHVzaCgicGF0aD0iK3IpLEkuaXNTdHJpbmcobikmJm8ucHVzaCgiZG9tYWluPSIrbiksaT09PSEwJiZvLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1vLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBWQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIFpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBpQShBLGUpe3JldHVybiBBJiYhVkEoZSk/WkEoQSxlKTplfXZhciB6ZT13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBuKGkpe2xldCBvPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbyksbz10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9bih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obyl7bGV0IGc9SS5pc1N0cmluZyhvKT9uKG8pOm87cmV0dXJuIGcucHJvdG9jb2w9PT1yLnByb3RvY29sJiZnLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIFhBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBNcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG49MCxpPTAsbztyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKEMpe2xldCBsPURhdGUubm93KCkscz1yW2ldO298fChvPWwpLHRbbl09QyxyW25dPWw7bGV0IGE9aSxFPTA7Zm9yKDthIT09bjspRSs9dFthKytdLGE9YSVBO2lmKG49KG4rMSklQSxuPT09aSYmKGk9KGkrMSklQSksbC1vPGUpcmV0dXJuO2xldCBCPXMmJmwtcztyZXR1cm4gQj9NYXRoLnJvdW5kKEUqMWUzL0IpOnZvaWQgMH19dmFyIFZlPU1yO2Z1bmN0aW9uIFplKEEsZSl7bGV0IHQ9MCxyPVZlKDUwLDI1MCk7cmV0dXJuIG49PntsZXQgaT1uLmxvYWRlZCxvPW4ubGVuZ3RoQ29tcHV0YWJsZT9uLnRvdGFsOnZvaWQgMCxnPWktdCxDPXIoZyksbD1pPD1vO3Q9aTtsZXQgcz17bG9hZGVkOmksdG90YWw6byxwcm9ncmVzczpvP2kvbzp2b2lkIDAsYnl0ZXM6ZyxyYXRlOkN8fHZvaWQgMCxlc3RpbWF0ZWQ6QyYmbyYmbD8oby1pKS9DOnZvaWQgMCxldmVudDpufTtzW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShzKX19dmFyIFlyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsWGU9WXImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUEuZGF0YSxpPUQuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6byx3aXRoWFNSRlRva2VuOmd9PUEsQztmdW5jdGlvbiBsKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShDKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLEMpfWxldCBzO2lmKEkuaXNGb3JtRGF0YShuKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKHM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi5RXT1zP3Muc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uUV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsUT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK1EpKX1sZXQgRT1pQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLEFBKEUsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBCKCl7aWYoIWEpcmV0dXJuO2xldCBjPUQuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLGQ9e2RhdGE6IW98fG89PT0idGV4dCJ8fG89PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczpjLGNvbmZpZzpBLHJlcXVlc3Q6YX07ekEoZnVuY3Rpb24oUyl7dChTKSxsKCl9LGZ1bmN0aW9uKFMpe3IoUyksbCgpfSxkKSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPUI6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KEIpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgcCgiUmVxdWVzdCBhYm9ydGVkIixwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBwKCJOZXR3b3JrIEVycm9yIixwLkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgUT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsZD1BLnRyYW5zaXRpb25hbHx8UUE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoUT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IHAoUSxkLmNsYXJpZnlUaW1lb3V0RXJyb3I/cC5FVElNRURPVVQ6cC5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSx3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKGcmJkkuaXNGdW5jdGlvbihnKSYmKGc9ZyhBKSksZ3x8ZyE9PSExJiZ6ZShFKSkpe2xldCBjPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJl9lLnJlYWQoQS54c3JmQ29va2llTmFtZSk7YyYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSxjKX1uPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJkkuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKFEsZCl7YS5zZXRSZXF1ZXN0SGVhZGVyKGQsUSl9KSxJLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG8mJm8hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixaZShBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsWmUoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKEM9Yz0+e2EmJihyKCFjfHxjLnR5cGU/bmV3IE8obnVsbCxBLGEpOmMpLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShDKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/QygpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixDKSkpO2xldCB1PVhBKEUpO2lmKHUmJncucHJvdG9jb2xzLmluZGV4T2YodSk9PT0tMSl7cihuZXcgcCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIit1KyI6IixwLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChufHxudWxsKX0pfTt2YXIgJEE9e2h0dHA6RUEseGhyOlhlfTtJLmZvckVhY2goJEEsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgJGU9QT0+YC0gJHtBfWAscXI9QT0+SS5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLG1BPXtnZXRBZGFwdGVyOkE9PntBPUkuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG49e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBvO2lmKHI9dCwhcXIodCkmJihyPSRBWyhvPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IHAoYFVua25vd24gYWRhcHRlciAnJHtvfSdgKTtpZihyKWJyZWFrO25bb3x8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG4pLm1hcCgoW2csQ10pPT5gYWRhcHRlciAke2d9IGArKEM9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxvPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKCRlKS5qb2luKGAKYCk6IiAiKyRlKGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHAoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitvLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6JEF9O2Z1bmN0aW9uIEFlKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBPKG51bGwsQSl9ZnVuY3Rpb24gaEEoQSl7cmV0dXJuIEFlKEEpLEEuaGVhZGVycz1ELmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9dEEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLG1BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxXLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIEFlKEEpLHIuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9RC5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIHJBKHIpfHwoQWUoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9RC5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBBdD1BPT5BIGluc3RhbmNlb2YgRD97Li4uQX06QTtmdW5jdGlvbiBHKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKGwscyxhKXtyZXR1cm4gSS5pc1BsYWluT2JqZWN0KGwpJiZJLmlzUGxhaW5PYmplY3Qocyk/SS5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSxsLHMpOkkuaXNQbGFpbk9iamVjdChzKT9JLm1lcmdlKHt9LHMpOkkuaXNBcnJheShzKT9zLnNsaWNlKCk6c31mdW5jdGlvbiBuKGwscyxhKXtpZihJLmlzVW5kZWZpbmVkKHMpKXtpZighSS5pc1VuZGVmaW5lZChsKSlyZXR1cm4gcih2b2lkIDAsbCxhKX1lbHNlIHJldHVybiByKGwscyxhKX1mdW5jdGlvbiBpKGwscyl7aWYoIUkuaXNVbmRlZmluZWQocykpcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIG8obCxzKXtpZihJLmlzVW5kZWZpbmVkKHMpKXtpZighSS5pc1VuZGVmaW5lZChsKSlyZXR1cm4gcih2b2lkIDAsbCl9ZWxzZSByZXR1cm4gcih2b2lkIDAscyl9ZnVuY3Rpb24gZyhsLHMsYSl7aWYoYSBpbiBlKXJldHVybiByKGwscyk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCxsKX1sZXQgQz17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6byx0cmFuc2Zvcm1SZXF1ZXN0Om8sdHJhbnNmb3JtUmVzcG9uc2U6byxwYXJhbXNTZXJpYWxpemVyOm8sdGltZW91dDpvLHRpbWVvdXRNZXNzYWdlOm8sd2l0aENyZWRlbnRpYWxzOm8sd2l0aFhTUkZUb2tlbjpvLGFkYXB0ZXI6byxyZXNwb25zZVR5cGU6byx4c3JmQ29va2llTmFtZTpvLHhzcmZIZWFkZXJOYW1lOm8sb25VcGxvYWRQcm9ncmVzczpvLG9uRG93bmxvYWRQcm9ncmVzczpvLGRlY29tcHJlc3M6byxtYXhDb250ZW50TGVuZ3RoOm8sbWF4Qm9keUxlbmd0aDpvLGJlZm9yZVJlZGlyZWN0Om8sdHJhbnNwb3J0Om8saHR0cEFnZW50Om8saHR0cHNBZ2VudDpvLGNhbmNlbFRva2VuOm8sc29ja2V0UGF0aDpvLHJlc3BvbnNlRW5jb2Rpbmc6byx2YWxpZGF0ZVN0YXR1czpnLGhlYWRlcnM6KGwscyk9Pm4oQXQobCksQXQocyksITApfTtyZXR1cm4gSS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24ocyl7bGV0IGE9Q1tzXXx8bixFPWEoQVtzXSxlW3NdLHMpO0kuaXNVbmRlZmluZWQoRSkmJmEhPT1nfHwodFtzXT1FKX0pLHR9dmFyIHlBPSIxLjYuOCI7dmFyIGVlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e2VlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBldD17fTtlZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4oaSxvKXtyZXR1cm4iW0F4aW9zIHYiK3lBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihpLG8sZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IHAobihvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxwLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIWV0W29dJiYoZXRbb109ITAsY29uc29sZS53YXJuKG4obywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxvLGcpOiEwfX07ZnVuY3Rpb24gS3IoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgcCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIscC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBpPXJbbl0sbz1lW2ldO2lmKG8pe2xldCBnPUFbaV0sQz1nPT09dm9pZCAwfHxvKGcsaSxBKTtpZihDIT09ITApdGhyb3cgbmV3IHAoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrQyxwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IHAoIlVua25vd24gb3B0aW9uICIraSxwLkVSUl9CQURfT1BUSU9OKX19dmFyIHdBPXthc3NlcnRPcHRpb25zOktyLHZhbGlkYXRvcnM6ZWV9O3ZhciBQPXdBLnZhbGlkYXRvcnMsaj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEtBLHJlc3BvbnNlOm5ldyBLQX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IGk9bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9Ryh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczppfT10O3IhPT12b2lkIDAmJndBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6UC50cmFuc2l0aW9uYWwoUC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpQLnRyYW5zaXRpb25hbChQLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6UC50cmFuc2l0aW9uYWwoUC5ib29sZWFuKX0sITEpLG4hPW51bGwmJihJLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06d0EuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6UC5mdW5jdGlvbixzZXJpYWxpemU6UC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbz1pJiZJLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZJLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sdT0+e2RlbGV0ZSBpW3VdfSksdC5oZWFkZXJzPUQuY29uY2F0KG8saSk7bGV0IGc9W10sQz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChDPUMmJmMuc3luY2hyb25vdXMsZy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBsPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7bC5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IHMsYT0wLEU7aWYoIUMpe2xldCB1PVtoQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKHUudW5zaGlmdC5hcHBseSh1LGcpLHUucHVzaC5hcHBseSh1LGwpLEU9dS5sZW5ndGgscz1Qcm9taXNlLnJlc29sdmUodCk7YTxFOylzPXMudGhlbih1W2ErK10sdVthKytdKTtyZXR1cm4gc31FPWcubGVuZ3RoO2xldCBCPXQ7Zm9yKGE9MDthPEU7KXtsZXQgdT1nW2ErK10sYz1nW2ErK107dHJ5e0I9dShCKX1jYXRjaChRKXtjLmNhbGwodGhpcyxRKTticmVha319dHJ5e3M9aEEuY2FsbCh0aGlzLEIpfWNhdGNoKHUpe3JldHVybiBQcm9taXNlLnJlamVjdCh1KX1mb3IoYT0wLEU9bC5sZW5ndGg7YTxFOylzPXMudGhlbihsW2ErK10sbFthKytdKTtyZXR1cm4gc31nZXRVcmkoZSl7ZT1HKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9aUEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gQUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07SS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtqLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoRyhyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7SS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxvLGcpe3JldHVybiB0aGlzLnJlcXVlc3QoRyhnfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6b30pKX19ai5wcm90b3R5cGVbZV09dCgpLGoucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBuQT1qO3ZhciB0ZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBpLG89bmV3IFByb21pc2UoZz0+e3Iuc3Vic2NyaWJlKGcpLGk9Z30pLnRoZW4obik7cmV0dXJuIG8uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sb30sZShmdW5jdGlvbihpLG8sZyl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgTyhpLG8sZyksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0sdHQ9dGU7ZnVuY3Rpb24gcmUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIGllKEEpe3JldHVybiBJLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBuZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMobmUpLmZvckVhY2goKFtBLGVdKT0+e25lW2VdPUF9KTt2YXIgcnQ9bmU7ZnVuY3Rpb24gaXQoQSl7bGV0IGU9bmV3IG5BKEEpLHQ9WihuQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gSS5leHRlbmQodCxuQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLEkuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGl0KEcoQSxuKSl9LHR9dmFyIG09aXQoVyk7bS5BeGlvcz1uQTttLkNhbmNlbGVkRXJyb3I9TzttLkNhbmNlbFRva2VuPXR0O20uaXNDYW5jZWw9ckE7bS5WRVJTSU9OPXlBO20udG9Gb3JtRGF0YT14O20uQXhpb3NFcnJvcj1wO20uQ2FuY2VsPW0uQ2FuY2VsZWRFcnJvcjttLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O20uc3ByZWFkPXJlO20uaXNBeGlvc0Vycm9yPWllO20ubWVyZ2VDb25maWc9RzttLkF4aW9zSGVhZGVycz1EO20uZm9ybVRvSlNPTj1BPT5wQShJLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO20uZ2V0QWRhcHRlcj1tQS5nZXRBZGFwdGVyO20uSHR0cFN0YXR1c0NvZGU9cnQ7bS5kZWZhdWx0PW07dmFyIF89bTt2YXJ7QXhpb3M6VGEsQXhpb3NFcnJvcjpHYSxDYW5jZWxlZEVycm9yOkxhLGlzQ2FuY2VsOnhhLENhbmNlbFRva2VuOk9hLFZFUlNJT046UGEsYWxsOkphLENhbmNlbDpIYSxpc0F4aW9zRXJyb3I6TWEsc3ByZWFkOllhLHRvRm9ybURhdGE6cWEsQXhpb3NIZWFkZXJzOkthLEh0dHBTdGF0dXNDb2RlOldhLGZvcm1Ub0pTT046dmEsZ2V0QWRhcHRlcjpqYSxtZXJnZUNvbmZpZzpfYX09Xzthc3luYyBmdW5jdGlvbiBXcihBLGUpe2xldCB0PUEscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgXy5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBvQT1XcjtmdW5jdGlvbiBudChBKXtsZXQgZT1PQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3hBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIHZyKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgaT1BO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpudChBKX1sZXQgbj1hd2FpdCBvQShlLHQpO3JldHVybiBudChuKX12YXIgb3Q9dnI7YXN5bmMgZnVuY3Rpb24ganIoQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLG89KGF3YWl0IF8uZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om99KX12YXIgYXQ9anI7dmFyIHN0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBsdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixJdD1uZXcgVGV4dEVuY29kZXIsZ3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIF9yKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxpPUEuZnNfc3RhdChlKS5zaXplLG89bnVsbDtsdD9vPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpvPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgZz1uZXcgVWludDhBcnJheShvKTtyZXR1cm4gQS5mc19yZWFkKHIsZywwLGksMCksQS5mc19jbG9zZShyKSxnfWZ1bmN0aW9uIEJ0KEEsZSx0KXtsZXQgcj1udWxsO2x0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KGkpLG59ZnVuY3Rpb24geShBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIHooQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixpLG4pfWZ1bmN0aW9uIFIoQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxvPUJ0KEEsbixpKTtyZXR1cm4gTChyLG8uYnVmZmVyKX1mdW5jdGlvbiBvZShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24genIoQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGwscyl7c3dpdGNoKGwudHlwZSl7Y2FzZSBmLlRleHRTdHJlYW06e2xldCBhPUl0LmVuY29kZShsLmRhdGEuZGF0YSksRT15KEEsYSxzLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gfTt6KEEsQixzKTticmVha31jYXNlIGYuSnNvbkNvbXBhdGlibGU6e2xldCBhPUl0LmVuY29kZShKU09OLnN0cmluZ2lmeShsLmRhdGEpKSxFPXkoQSxhLHMsMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O3ooQSxCLHMpO2JyZWFrfWNhc2UgZi5CaW5hcnlTdHJlYW06e2xldCBhPWwuZGF0YS5kYXRhLEU9eShBLGEscywwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YH07eihBLEIscyk7YnJlYWt9Y2FzZSBmLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShsLmRhdGEucGF0aCxsLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBmLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGwuZGF0YS5wYXRoLGwuZGF0YS5kYXRhKTticmVha31jYXNlIGYuSW1hZ2U6e2xldCBhPWwuZGF0YSxFPXkoQSxhLmRhdGEscywwKSxCPXkoQSxhLmRpcmVjdGlvbixzLDEpLHU9dHlwZW9mIGEubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oYS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTphLmltYWdlVHlwZSxuYW1lOmEubmFtZSxvcmlnaW46YS5vcmlnaW4sc3BhY2luZzphLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6YS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbWV0YWRhdGE6dX07eihBLGMscyk7YnJlYWt9Y2FzZSBmLk1lc2g6e2xldCBhPWwuZGF0YSxFPXkoQSxhLnBvaW50cyxzLDApLEI9eShBLGEuY2VsbHMscywxKSx1PXkoQSxhLnBvaW50RGF0YSxzLDIpLGM9eShBLGEuY2VsbERhdGEscywzKSxRPXttZXNoVHlwZTphLm1lc2hUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbHM6YS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOmEuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07eihBLFEscyk7YnJlYWt9Y2FzZSBmLlBvbHlEYXRhOntsZXQgYT1sLmRhdGEsRT15KEEsYS5wb2ludHMscywwKSxCPXkoQSxhLnZlcnRpY2VzLHMsMSksdT15KEEsYS5saW5lcyxzLDIpLGM9eShBLGEucG9seWdvbnMscywzKSxRPXkoQSxhLnRyaWFuZ2xlU3RyaXBzLHMsNCksZD15KEEsYS5wb2ludERhdGEscyw1KSxGPXkoQSxhLnBvaW50RGF0YSxzLDYpLFM9e3BvbHlEYXRhVHlwZTphLnBvbHlEYXRhVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6YS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOmEubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLHBvbHlnb25zQnVmZmVyU2l6ZTphLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6YS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZQb2ludFBpeGVsczphLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczphLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07eihBLFMscyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxpPTA7dHJ5e2k9QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKGwpe3Rocm93IHR5cGVvZiBsPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGwpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGx9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgbz1BLmdldE1vZHVsZVN0ZG91dCgpLGc9QS5nZXRNb2R1bGVTdGRlcnIoKSxDPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZpPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKGwscyl7bGV0IGE9bnVsbDtzd2l0Y2gobC50eXBlKXtjYXNlIGYuVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLHUpO2E9e2RhdGE6Z3QuZGVjb2RlKGMpfTticmVha31jYXNlIGYuSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQix1KTthPUpTT04ucGFyc2UoZ3QuZGVjb2RlKGMpKTticmVha31jYXNlIGYuQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSx1PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pO2E9e2RhdGE6QnQoQSxCLHUpfTticmVha31jYXNlIGYuVGV4dEZpbGU6e2E9e3BhdGg6bC5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGwuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBmLkJpbmFyeUZpbGU6e2E9e3BhdGg6bC5kYXRhLnBhdGgsZGF0YTpfcihBLGwuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBmLkltYWdlOntsZXQgQj1vZShBLHMpO0IuZGF0YT1SKEEscywwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPVIoQSxzLDEsTS5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSksYT1CO2JyZWFrfWNhc2UgZi5NZXNoOntsZXQgQj1vZShBLHMpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1SKEEscywwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1MKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1SKEEscywxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9TChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9UihBLHMsMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1MKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9UihBLHMsMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9TChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9Y2FzZSBmLlBvbHlEYXRhOntsZXQgQj1vZShBLHMpO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1SKEEscywwLE0uRmxvYXQzMik6Qi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxCLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0IudmVydGljZXM9UihBLHMsMSxoLlVJbnQzMik6Qi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQi5saW5lc0J1ZmZlclNpemU+MD9CLmxpbmVzPVIoQSxzLDIsaC5VSW50MzIpOkIubGluZXM9bmV3IFVpbnQzMkFycmF5LEIucG9seWdvbnNCdWZmZXJTaXplPjA/Qi5wb2x5Z29ucz1SKEEscywzLGguVUludDMyKTpCLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxCLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0IudHJpYW5nbGVTdHJpcHM9UihBLHMsNCxoLlVJbnQzMik6Qi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9UihBLHMsNSxCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9TChCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1SKEEscyw2LEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9TChCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1CO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IEU9e3R5cGU6bC50eXBlLGRhdGE6YX07Qy5wdXNoKEUpfSkse3JldHVyblZhbHVlOmksc3Rkb3V0Om8sc3RkZXJyOmcsb3V0cHV0czpDfX12YXIgQ3Q9enI7dmFyIFZyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBacihBLGUpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCByPTA7cjxBLmxlbmd0aDtyKyspe2xldCBuPVhyKEFbcl0sZSk7biE9PW51bGwmJnQucHVzaChuKX1yZXR1cm4gdH1mdW5jdGlvbiBYcihBLGUpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLFZyJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDplP3Q6dC5zbGljZSgwKX12YXIgY3Q9WnI7ZnVuY3Rpb24gJHIoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIHV0PSRyO2Z1bmN0aW9uIEFpKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBFdD1BaTtmdW5jdGlvbiBlaShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgZnQ9ZWk7dmFyIHRpO2Z1bmN0aW9uIERBKCl7cmV0dXJuIHRpfXZhciByaTtmdW5jdGlvbiBRdCgpe3JldHVybiByaX12YXIgaWk7ZnVuY3Rpb24gU0EoKXtyZXR1cm4gaWl9dmFyIGFlPW5ldyBNYXA7ZnVuY3Rpb24gbmkoKXtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW51bGwpLEF9ZnVuY3Rpb24gcHQoKXtsZXQgQT1EQSgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksQX1mdW5jdGlvbiBrQSgpe2xldCBBPVF0KCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9e30pLEF9YXN5bmMgZnVuY3Rpb24gb2koQSxlLHQpe2xldCByPUEsbj1BO2lmKHR5cGVvZiBBIT0ic3RyaW5nIiYmKHI9bmV3IFVSTChBLmhyZWYpLG49ci5ocmVmKSxhZS5oYXMobikpcmV0dXJuIGFlLmdldChuKTt7bGV0IGk9YXdhaXQgYXQoQSxlPy50b1N0cmluZygpPz9wdCgpLHQ/P2tBKCkpO3JldHVybiBhZS5zZXQobixpKSxpfX1hc3luYyBmdW5jdGlvbiBhaShBLGUsdCxyLG4pe2lmKCFhd2FpdCBzdCgpKXtsZXQgUT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQoUSksbmV3IEVycm9yKFEpfWxldCBpPW4/LndlYldvcmtlcj8/bnVsbDtpZihpPT09ITEpe2xldCBRPWF3YWl0IG9pKEEudG9TdHJpbmcoKSxuPy5waXBlbGluZUJhc2VVcmwsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7cmV0dXJuIEN0KFEsZSx0LHIpfWxldCBvPWksZz1uPy5waXBlbGluZVdvcmtlclVybD8/bmkoKSxDPXR5cGVvZiBnIT0ic3RyaW5nIiYmdHlwZW9mIGc/LmhyZWY8InUiP2cuaHJlZjpnLHt3b3JrZXJQcm94eTpsLHdvcmtlcjpzfT1hd2FpdCBvdChvLEMsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7bz1zO2xldCBhPVtdO3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihRKXtpZihRLnR5cGU9PT1mLkJpbmFyeVN0cmVhbSl7bGV0IGQ9US5kYXRhLmRhdGE7YS5wdXNoKGQpfWVsc2UgaWYoUS50eXBlPT09Zi5CaW5hcnlGaWxlKXtsZXQgZD1RLmRhdGEuZGF0YTthLnB1c2goZCl9ZWxzZSBpZihRLnR5cGU9PT1mLkltYWdlKXtsZXQgZD1RLmRhdGE7ZC5kYXRhIT09bnVsbCYmYS5wdXNoKC4uLnV0KGQpKX1lbHNlIGlmKFEudHlwZT09PWYuTWVzaCl7bGV0IGQ9US5kYXRhO2EucHVzaCguLi5FdChkKSl9ZWxzZSBpZihRLnR5cGU9PT1mLlBvbHlEYXRhKXtsZXQgZD1RLmRhdGE7YS5wdXNoKC4uLmZ0KGQpKX19KTtsZXQgRT1uPy5waXBlbGluZUJhc2VVcmw/P3B0KCksQj10eXBlb2YgRSE9InN0cmluZyImJnR5cGVvZiBFPy5ocmVmPCJ1Ij9FLmhyZWY6RSx1PXIhPW51bGw/UEEocixjdChhLG4/Lm5vQ29weSkpOm51bGwsYz1hd2FpdCBsLnJ1blBpcGVsaW5lKEEudG9TdHJpbmcoKSxCLGUsdCx1LG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P2tBKCkpO3JldHVybntyZXR1cm5WYWx1ZTpjLnJldHVyblZhbHVlLHN0ZG91dDpjLnN0ZG91dCxzdGRlcnI6Yy5zdGRlcnIsb3V0cHV0czpjLm91dHB1dHMsd2ViV29ya2VyOm99fXZhciBiPWFpO3ZhciBzaT1udWxsO2Z1bmN0aW9uIGR0KCl7cmV0dXJuIHNpfXZhciBzZSxJaT1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vZGljb21AJHtGQX0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIFBzKEEpe3NlPUF9ZnVuY3Rpb24gTigpe2lmKHR5cGVvZiBzZTwidSIpcmV0dXJuIHNlO2xldCBBPURBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOklpfXZhciBJZSxnaT1udWxsO2Z1bmN0aW9uIG10KEEpe0llPUF9ZnVuY3Rpb24gaygpe2lmKHR5cGVvZiBJZTwidSIpcmV0dXJuIEllO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOmdpfXZhciBWPW51bGw7YXN5bmMgZnVuY3Rpb24gaHQoKXtsZXQgQT1rKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtWPWF3YWl0IG9BKGUpfWZ1bmN0aW9uIFdzKEEpe1Y9QX1hc3luYyBmdW5jdGlvbiBKKCl7aWYoViE9PW51bGwpcmV0dXJuIFYudGVybWluYXRlZCYmYXdhaXQgaHQoKSxWO2xldCBBPWR0KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IGh0KCksVil9YXN5bmMgZnVuY3Rpb24gbGkoQSxlLHQ9e30pe2xldCByPVt7dHlwZTpmLkpzb25Db21wYXRpYmxlfSx7dHlwZTpmLkltYWdlfV0sbj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUz1hd2FpdCBBLmFycmF5QnVmZmVyKCk7bj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShTKX19bGV0IGk9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFM9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO2k9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUyl9fWxldCBvPVt7dHlwZTpmLkJpbmFyeUZpbGUsZGF0YTpufSx7dHlwZTpmLkJpbmFyeUZpbGUsZGF0YTppfV0sZz1bXSxDPW4ucGF0aDtnLnB1c2goQyk7bGV0IGw9aS5wYXRoO2cucHVzaChsKSxnLnB1c2goIjAiKSxnLnB1c2goIjEiKSxnLnB1c2goIi0tbWVtb3J5LWlvIiksdC5jb2xvck91dHB1dCYmdC5jb2xvck91dHB1dCYmZy5wdXNoKCItLWNvbG9yLW91dHB1dCIpLHQuY29uZmlnRmlsZSYmZy5wdXNoKCItLWNvbmZpZy1maWxlIix0LmNvbmZpZ0ZpbGUudG9TdHJpbmcoKSksdC5mcmFtZSYmZy5wdXNoKCItLWZyYW1lIix0LmZyYW1lLnRvU3RyaW5nKCkpLHQubm9QcmVzZW50YXRpb25TdGF0ZU91dHB1dCYmdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZnLnB1c2goIi0tbm8tcHJlc2VudGF0aW9uLXN0YXRlLW91dHB1dCIpLHQubm9CaXRtYXBPdXRwdXQmJnQubm9CaXRtYXBPdXRwdXQmJmcucHVzaCgiLS1uby1iaXRtYXAtb3V0cHV0Iik7bGV0IEU9ImFwcGx5LXByZXNlbnRhdGlvbi1zdGF0ZS10by1pbWFnZSIsQj10Py53ZWJXb3JrZXI7Qj09PXZvaWQgMCYmKEI9YXdhaXQgSigpKTtsZXR7d2ViV29ya2VyOnUscmV0dXJuVmFsdWU6YyxzdGRlcnI6USxvdXRwdXRzOmR9PWF3YWl0IGIoRSxnLHIsbyx7cGlwZWxpbmVCYXNlVXJsOk4oKSxwaXBlbGluZVdvcmtlclVybDprKCksd2ViV29ya2VyOkIsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGMhPT0wJiZRIT09IiIpdGhyb3cgbmV3IEVycm9yKFEpO3JldHVybnt3ZWJXb3JrZXI6dSxwcmVzZW50YXRpb25TdGF0ZU91dFN0cmVhbTpkWzBdPy5kYXRhLG91dHB1dEltYWdlOmRbMV0/LmRhdGF9fXZhciBCaT1saTthc3luYyBmdW5jdGlvbiBDaShBLGU9e30pe2xldCB0PVt7dHlwZTpmLkJpbmFyeVN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IGM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoYyl9fWxldCBuPVt7dHlwZTpmLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmaS5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmaS5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmaS5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmaS5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZpLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJmkucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJmkucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLmFjY2VwdE9kZExlbmd0aCYmZS5hY2NlcHRPZGRMZW5ndGgmJmkucHVzaCgiLS1hY2NlcHQtb2RkLWxlbmd0aCIpLGUuYXNzdW1lRXZlbkxlbmd0aCYmZS5hc3N1bWVFdmVuTGVuZ3RoJiZpLnB1c2goIi0tYXNzdW1lLWV2ZW4tbGVuZ3RoIiksZS5lbmFibGVDcDI0NiYmZS5lbmFibGVDcDI0NiYmaS5wdXNoKCItLWVuYWJsZS1jcDI0NiIpLGUuZGlzYWJsZUNwMjQ2JiZlLmRpc2FibGVDcDI0NiYmaS5wdXNoKCItLWRpc2FibGUtY3AyNDYiKSxlLnJldGFpblVuJiZlLnJldGFpblVuJiZpLnB1c2goIi0tcmV0YWluLXVuIiksZS5jb252ZXJ0VW4mJmUuY29udmVydFVuJiZpLnB1c2goIi0tY29udmVydC11biIpLGUuZW5hYmxlQ29ycmVjdGlvbiYmZS5lbmFibGVDb3JyZWN0aW9uJiZpLnB1c2goIi0tZW5hYmxlLWNvcnJlY3Rpb24iKSxlLmRpc2FibGVDb3JyZWN0aW9uJiZlLmRpc2FibGVDb3JyZWN0aW9uJiZpLnB1c2goIi0tZGlzYWJsZS1jb3JyZWN0aW9uIik7bGV0IEM9InJlYWQtZGljb20tZW5jYXBzdWxhdGVkLXBkZiIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgSigpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6YSxzdGRlcnI6RSxvdXRwdXRzOkJ9PWF3YWl0IGIoQyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOk4oKSxwaXBlbGluZVdvcmtlclVybDprKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZFIT09IiIpdGhyb3cgbmV3IEVycm9yKEUpO3JldHVybnt3ZWJXb3JrZXI6cyxwZGZCaW5hcnlPdXRwdXQ6KEJbMF0/LmRhdGEpLmRhdGF9fXZhciBjaT1DaTthc3luYyBmdW5jdGlvbiB1aShBLGU9e30pe2xldCB0PVt7dHlwZTpmLlRleHRTdHJlYW19XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBjPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGMpfX1sZXQgbj1be3R5cGU6Zi5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbz1yLnBhdGg7aWYoaS5wdXNoKG8pLGkucHVzaCgiMCIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLnJlYWRGaWxlT25seSYmZS5yZWFkRmlsZU9ubHkmJmkucHVzaCgiLS1yZWFkLWZpbGUtb25seSIpLGUucmVhZERhdGFzZXQmJmUucmVhZERhdGFzZXQmJmkucHVzaCgiLS1yZWFkLWRhdGFzZXQiKSxlLnJlYWRYZmVyQXV0byYmZS5yZWFkWGZlckF1dG8mJmkucHVzaCgiLS1yZWFkLXhmZXItYXV0byIpLGUucmVhZFhmZXJEZXRlY3QmJmUucmVhZFhmZXJEZXRlY3QmJmkucHVzaCgiLS1yZWFkLXhmZXItZGV0ZWN0IiksZS5yZWFkWGZlckxpdHRsZSYmZS5yZWFkWGZlckxpdHRsZSYmaS5wdXNoKCItLXJlYWQteGZlci1saXR0bGUiKSxlLnJlYWRYZmVyQmlnJiZlLnJlYWRYZmVyQmlnJiZpLnB1c2goIi0tcmVhZC14ZmVyLWJpZyIpLGUucmVhZFhmZXJJbXBsaWNpdCYmZS5yZWFkWGZlckltcGxpY2l0JiZpLnB1c2goIi0tcmVhZC14ZmVyLWltcGxpY2l0IiksZS5wcm9jZXNzaW5nRGV0YWlscyYmZS5wcm9jZXNzaW5nRGV0YWlscyYmaS5wdXNoKCItLXByb2Nlc3NpbmctZGV0YWlscyIpLGUudW5rbm93blJlbGF0aW9uc2hpcCYmZS51bmtub3duUmVsYXRpb25zaGlwJiZpLnB1c2goIi0tdW5rbm93bi1yZWxhdGlvbnNoaXAiKSxlLmludmFsaWRJdGVtVmFsdWUmJmUuaW52YWxpZEl0ZW1WYWx1ZSYmaS5wdXNoKCItLWludmFsaWQtaXRlbS12YWx1ZSIpLGUuaWdub3JlQ29uc3RyYWludHMmJmUuaWdub3JlQ29uc3RyYWludHMmJmkucHVzaCgiLS1pZ25vcmUtY29uc3RyYWludHMiKSxlLmlnbm9yZUl0ZW1FcnJvcnMmJmUuaWdub3JlSXRlbUVycm9ycyYmaS5wdXNoKCItLWlnbm9yZS1pdGVtLWVycm9ycyIpLGUuc2tpcEludmFsaWRJdGVtcyYmZS5za2lwSW52YWxpZEl0ZW1zJiZpLnB1c2goIi0tc2tpcC1pbnZhbGlkLWl0ZW1zIiksZS5kaXNhYmxlVnJDaGVja2VyJiZlLmRpc2FibGVWckNoZWNrZXImJmkucHVzaCgiLS1kaXNhYmxlLXZyLWNoZWNrZXIiKSxlLmNoYXJzZXRSZXF1aXJlJiZlLmNoYXJzZXRSZXF1aXJlJiZpLnB1c2goIi0tY2hhcnNldC1yZXF1aXJlIiksZS5jaGFyc2V0QXNzdW1lJiZpLnB1c2goIi0tY2hhcnNldC1hc3N1bWUiLGUuY2hhcnNldEFzc3VtZS50b1N0cmluZygpKSxlLmNoYXJzZXRDaGVja0FsbCYmZS5jaGFyc2V0Q2hlY2tBbGwmJmkucHVzaCgiLS1jaGFyc2V0LWNoZWNrLWFsbCIpLGUuY29udmVydFRvVXRmOCYmZS5jb252ZXJ0VG9VdGY4JiZpLnB1c2goIi0tY29udmVydC10by11dGY4IiksZS51cmxQcmVmaXgmJmkucHVzaCgiLS11cmwtcHJlZml4IixlLnVybFByZWZpeC50b1N0cmluZygpKSxlLmh0bWwzMiYmZS5odG1sMzImJmkucHVzaCgiLS1odG1sLTMyIiksZS5odG1sNDAmJmUuaHRtbDQwJiZpLnB1c2goIi0taHRtbC00MCIpLGUueGh0bWwxMSYmZS54aHRtbDExJiZpLnB1c2goIi0teGh0bWwtMTEiKSxlLmFkZERvY3VtZW50VHlwZSYmZS5hZGREb2N1bWVudFR5cGUmJmkucHVzaCgiLS1hZGQtZG9jdW1lbnQtdHlwZSIpLGUuY3NzUmVmZXJlbmNlKXtsZXQgYz1uLmxlbmd0aC50b1N0cmluZygpO24ucHVzaCh7dHlwZTpmLlRleHRTdHJlYW0sZGF0YTp7ZGF0YTplLmNzc1JlZmVyZW5jZX19KSxpLnB1c2goIi0tY3NzLXJlZmVyZW5jZSIsYyl9aWYoZS5jc3NGaWxlKXtsZXQgYz1lLmNzc0ZpbGUsUT1jO2lmKGMgaW5zdGFuY2VvZiBGaWxlKXtsZXQgRj1hd2FpdCBjLmFycmF5QnVmZmVyKCk7UT17cGF0aDpjLm5hbWUsZGF0YTpuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoRil9fWkucHVzaCgiLS1jc3MtZmlsZSIpLG4ucHVzaCh7dHlwZTpmLlRleHRGaWxlLGRhdGE6UX0pO2xldCBkPWMgaW5zdGFuY2VvZiBGaWxlP2MubmFtZTpjLnBhdGg7aS5wdXNoKGQpfWUuZXhwYW5kSW5saW5lJiZlLmV4cGFuZElubGluZSYmaS5wdXNoKCItLWV4cGFuZC1pbmxpbmUiKSxlLm5ldmVyRXhwYW5kSW5saW5lJiZlLm5ldmVyRXhwYW5kSW5saW5lJiZpLnB1c2goIi0tbmV2ZXItZXhwYW5kLWlubGluZSIpLGUuYWx3YXlzRXhwYW5kSW5saW5lJiZlLmFsd2F5c0V4cGFuZElubGluZSYmaS5wdXNoKCItLWFsd2F5cy1leHBhbmQtaW5saW5lIiksZS5yZW5kZXJGdWxsRGF0YSYmZS5yZW5kZXJGdWxsRGF0YSYmaS5wdXNoKCItLXJlbmRlci1mdWxsLWRhdGEiKSxlLnNlY3Rpb25UaXRsZUlubGluZSYmZS5zZWN0aW9uVGl0bGVJbmxpbmUmJmkucHVzaCgiLS1zZWN0aW9uLXRpdGxlLWlubGluZSIpLGUuZG9jdW1lbnRUeXBlVGl0bGUmJmUuZG9jdW1lbnRUeXBlVGl0bGUmJmkucHVzaCgiLS1kb2N1bWVudC10eXBlLXRpdGxlIiksZS5wYXRpZW50SW5mb1RpdGxlJiZlLnBhdGllbnRJbmZvVGl0bGUmJmkucHVzaCgiLS1wYXRpZW50LWluZm8tdGl0bGUiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmaS5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUucmVuZGVySW5saW5lQ29kZXMmJmUucmVuZGVySW5saW5lQ29kZXMmJmkucHVzaCgiLS1yZW5kZXItaW5saW5lLWNvZGVzIiksZS5jb25jZXB0TmFtZUNvZGVzJiZlLmNvbmNlcHROYW1lQ29kZXMmJmkucHVzaCgiLS1jb25jZXB0LW5hbWUtY29kZXMiKSxlLm51bWVyaWNVbml0Q29kZXMmJmUubnVtZXJpY1VuaXRDb2RlcyYmaS5wdXNoKCItLW51bWVyaWMtdW5pdC1jb2RlcyIpLGUuY29kZVZhbHVlVW5pdCYmZS5jb2RlVmFsdWVVbml0JiZpLnB1c2goIi0tY29kZS12YWx1ZS11bml0IiksZS5jb2RlTWVhbmluZ1VuaXQmJmUuY29kZU1lYW5pbmdVbml0JiZpLnB1c2goIi0tY29kZS1tZWFuaW5nLXVuaXQiKSxlLnJlbmRlckFsbENvZGVzJiZlLnJlbmRlckFsbENvZGVzJiZpLnB1c2goIi0tcmVuZGVyLWFsbC1jb2RlcyIpLGUuY29kZURldGFpbHNUb29sdGlwJiZlLmNvZGVEZXRhaWxzVG9vbHRpcCYmaS5wdXNoKCItLWNvZGUtZGV0YWlscy10b29sdGlwIik7bGV0IEM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLWh0bWwiLGw9ZT8ud2ViV29ya2VyO2w9PT12b2lkIDAmJihsPWF3YWl0IEooKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOmEsc3RkZXJyOkUsb3V0cHV0czpCfT1hd2FpdCBiKEMsaSx0LG4se3BpcGVsaW5lQmFzZVVybDpOKCkscGlwZWxpbmVXb3JrZXJVcmw6aygpLHdlYldvcmtlcjpsLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmRSE9PSIiKXRocm93IG5ldyBFcnJvcihFKTtyZXR1cm57d2ViV29ya2VyOnMsb3V0cHV0VGV4dDooQlswXT8uZGF0YSkuZGF0YX19dmFyIEVpPXVpO2FzeW5jIGZ1bmN0aW9uIGZpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOmYuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IGM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoYyl9fWxldCBuPVt7dHlwZTpmLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxvPXIucGF0aDtpLnB1c2gobyksaS5wdXNoKCIwIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUudW5rbm93blJlbGF0aW9uc2hpcCYmZS51bmtub3duUmVsYXRpb25zaGlwJiZpLnB1c2goIi0tdW5rbm93bi1yZWxhdGlvbnNoaXAiKSxlLmludmFsaWRJdGVtVmFsdWUmJmUuaW52YWxpZEl0ZW1WYWx1ZSYmaS5wdXNoKCItLWludmFsaWQtaXRlbS12YWx1ZSIpLGUuaWdub3JlQ29uc3RyYWludHMmJmUuaWdub3JlQ29uc3RyYWludHMmJmkucHVzaCgiLS1pZ25vcmUtY29uc3RyYWludHMiKSxlLmlnbm9yZUl0ZW1FcnJvcnMmJmUuaWdub3JlSXRlbUVycm9ycyYmaS5wdXNoKCItLWlnbm9yZS1pdGVtLWVycm9ycyIpLGUuc2tpcEludmFsaWRJdGVtcyYmZS5za2lwSW52YWxpZEl0ZW1zJiZpLnB1c2goIi0tc2tpcC1pbnZhbGlkLWl0ZW1zIiksZS5ub0RvY3VtZW50SGVhZGVyJiZlLm5vRG9jdW1lbnRIZWFkZXImJmkucHVzaCgiLS1uby1kb2N1bWVudC1oZWFkZXIiKSxlLm51bWJlck5lc3RlZEl0ZW1zJiZlLm51bWJlck5lc3RlZEl0ZW1zJiZpLnB1c2goIi0tbnVtYmVyLW5lc3RlZC1pdGVtcyIpLGUuc2hvcnRlbkxvbmdWYWx1ZXMmJmUuc2hvcnRlbkxvbmdWYWx1ZXMmJmkucHVzaCgiLS1zaG9ydGVuLWxvbmctdmFsdWVzIiksZS5wcmludEluc3RhbmNlVWlkJiZlLnByaW50SW5zdGFuY2VVaWQmJmkucHVzaCgiLS1wcmludC1pbnN0YW5jZS11aWQiKSxlLnByaW50U29wY2xhc3NTaG9ydCYmZS5wcmludFNvcGNsYXNzU2hvcnQmJmkucHVzaCgiLS1wcmludC1zb3BjbGFzcy1zaG9ydCIpLGUucHJpbnRTb3BjbGFzc0xvbmcmJmUucHJpbnRTb3BjbGFzc0xvbmcmJmkucHVzaCgiLS1wcmludC1zb3BjbGFzcy1sb25nIiksZS5wcmludFNvcGNsYXNzVWlkJiZlLnByaW50U29wY2xhc3NVaWQmJmkucHVzaCgiLS1wcmludC1zb3BjbGFzcy11aWQiKSxlLnByaW50QWxsQ29kZXMmJmUucHJpbnRBbGxDb2RlcyYmaS5wdXNoKCItLXByaW50LWFsbC1jb2RlcyIpLGUucHJpbnRJbnZhbGlkQ29kZXMmJmUucHJpbnRJbnZhbGlkQ29kZXMmJmkucHVzaCgiLS1wcmludC1pbnZhbGlkLWNvZGVzIiksZS5wcmludFRlbXBsYXRlSWQmJmUucHJpbnRUZW1wbGF0ZUlkJiZpLnB1c2goIi0tcHJpbnQtdGVtcGxhdGUtaWQiKSxlLmluZGljYXRlRW5oYW5jZWQmJmUuaW5kaWNhdGVFbmhhbmNlZCYmaS5wdXNoKCItLWluZGljYXRlLWVuaGFuY2VkIiksZS5wcmludENvbG9yJiZlLnByaW50Q29sb3ImJmkucHVzaCgiLS1wcmludC1jb2xvciIpO2xldCBDPSJzdHJ1Y3R1cmVkLXJlcG9ydC10by10ZXh0IixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBKKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTphLHN0ZGVycjpFLG91dHB1dHM6Qn09YXdhaXQgYihDLGksdCxuLHtwaXBlbGluZUJhc2VVcmw6TigpLHBpcGVsaW5lV29ya2VyVXJsOmsoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJkUhPT0iIil0aHJvdyBuZXcgRXJyb3IoRSk7cmV0dXJue3dlYldvcmtlcjpzLG91dHB1dFRleHQ6KEJbMF0/LmRhdGEpLmRhdGF9fXZhciBRaT1maTthc3luYyBmdW5jdGlvbiBwaShBLGU9e30pe2xldCB0PVt7dHlwZTpmLkpzb25Db21wYXRpYmxlfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheSh1KX19bGV0IG49W3t0eXBlOmYuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG89ci5wYXRoO2lmKGkucHVzaChvKSxpLnB1c2goIjAiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIGUudGFnc1RvUmVhZDwidSIpe2xldCB1PW4ubGVuZ3RoLnRvU3RyaW5nKCk7bi5wdXNoKHt0eXBlOmYuSnNvbkNvbXBhdGlibGUsZGF0YTplLnRhZ3NUb1JlYWR9KSxpLnB1c2goIi0tdGFncy10by1yZWFkIix1KX1sZXQgQz0icmVhZC1kaWNvbS10YWdzIix7d2ViV29ya2VyOmwscmV0dXJuVmFsdWU6cyxzdGRlcnI6YSxvdXRwdXRzOkV9PWF3YWl0IGIoQyxpLHQsbix7cGlwZWxpbmVCYXNlVXJsOk4oKSxwaXBlbGluZVdvcmtlclVybDprKCksd2ViV29ya2VyOmU/LndlYldvcmtlcj8/bnVsbH0pO2lmKHMhPT0wKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOmwsdGFnczpFWzBdLmRhdGF9fXZhciBkaT1waTthc3luYyBmdW5jdGlvbiBtaShBLGU9ITEsdD17fSl7bGV0IHI9W3t0eXBlOmYuSW1hZ2V9LHt0eXBlOmYuSnNvbkNvbXBhdGlibGV9XSxuPVtdLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGkucHVzaCgiLS1pbnB1dC1pbWFnZXMiKSxBLmZvckVhY2godT0+e24ucHVzaCh7dHlwZTpmLkJpbmFyeUZpbGUsZGF0YTp1fSksaS5wdXNoKHUucGF0aCl9KSx0eXBlb2YgZTwidSImJmUmJmkucHVzaCgiLS1zaW5nbGUtc29ydGVkLXNlcmllcyIpO2xldCBDPSJyZWFkLWltYWdlLWRpY29tLWZpbGUtc2VyaWVzIix7d2ViV29ya2VyOmwscmV0dXJuVmFsdWU6cyxzdGRlcnI6YSxvdXRwdXRzOkV9PWF3YWl0IGIoQyxpLHIsbix7cGlwZWxpbmVCYXNlVXJsOk4oKSxwaXBlbGluZVdvcmtlclVybDprKCksd2ViV29ya2VyOnQ/LndlYldvcmtlcj8/bnVsbH0pO2lmKHMhPT0wKXRocm93IG5ldyBFcnJvcihhKTtyZXR1cm57d2ViV29ya2VyOmwsb3V0cHV0SW1hZ2U6RVswXS5kYXRhLHNvcnRlZEZpbGVuYW1lczpFWzFdLmRhdGF9fXZhciBnZT1taTt2YXIgaGk9dHlwZW9mIGdsb2JhbFRoaXMubmF2aWdhdG9yPy5oYXJkd2FyZUNvbmN1cnJlbmN5PT0ibnVtYmVyIj9nbG9iYWxUaGlzLm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5OjQseXQ9ODthc3luYyBmdW5jdGlvbiB5aShBPXtpbnB1dEltYWdlczpbXX0pe2xldCBlPUEud2ViV29ya2VyUG9vbD8/bnVsbDtlPT09bnVsbCYmKGU9bmV3IFRBKGhpLGdlKSk7bGV0IHQ9W107aWYoQS5pbnB1dEltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJpbnB1dC1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7aWYoYXdhaXQgUHJvbWlzZS5hbGwoQS5pbnB1dEltYWdlcy5tYXAoYXN5bmMgcj0+e2xldCBuPXI7aWYociBpbnN0YW5jZW9mIEZpbGUpe2xldCBpPWF3YWl0IHIuYXJyYXlCdWZmZXIoKTtuPXtwYXRoOnIubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGkpfX10LnB1c2gobil9KSksQS5zaW5nbGVTb3J0ZWRTZXJpZXMpe2xldCByPVtdO2ZvcihsZXQgQz0wO0M8dC5sZW5ndGg7Qys9eXQpe2xldCBsPXQuc2xpY2UoQyxDK3l0KTtyLnB1c2goW2wsQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dKX1sZXQgbj1hd2FpdCBlLnJ1blRhc2tzKHIpLnByb21pc2UsaT1uLm1hcChDPT5DLm91dHB1dEltYWdlKSxvPW4ucmVkdWNlKChDLGwpPT5DLmNvbmNhdChsLnNvcnRlZEZpbGVuYW1lcyksW10pO3JldHVybntvdXRwdXRJbWFnZTpVQShpKSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm99fWVsc2V7bGV0IHI9W1t0LEEuc2luZ2xlU29ydGVkU2VyaWVzLHt9XV0sbj1hd2FpdCBlLnJ1blRhc2tzKHIpLnByb21pc2U7cmV0dXJue291dHB1dEltYWdlOm5bMF0ub3V0cHV0SW1hZ2Usd2ViV29ya2VyUG9vbDplLHNvcnRlZEZpbGVuYW1lczpuWzBdLnNvcnRlZEZpbGVuYW1lc319fXZhciB3aT15aTt2YXIgd3Q9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZXQ9KEEsSSk9Pntmb3IodmFyIHQgaW4gSSl0dChBLHQse2dldDpJW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGd0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxtQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGl0PXtjYW5IYW5kbGU6QT0+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+MD9uLnRyaWFuZ2xlU3RyaXBzPUYoQSxDLDQscC5VSW50MzIpOm4udHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LG4ubnVtYmVyT2ZQb2ludFBpeGVscz4wP24ucG9pbnREYXRhPUYoQSxDLDUsbi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsNixuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpuLmNlbGxEYXRhPVkobi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOlEudHlwZSxkYXRhOm99O2EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpyLHN0ZG91dDppLHN0ZGVycjpzLG91dHB1dHM6YX19dmFyIFhJPXllO3ZhciB3ZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gbWUoQSxJKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgZT0wO2U8QS5sZW5ndGg7ZSsrKXtsZXQgZz1wZShBW2VdLEkpO2chPT1udWxsJiZ0LnB1c2goZyl9cmV0dXJuIHR9ZnVuY3Rpb24gcGUoQSxJKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSx3ZSYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ST90OnQuc2xpY2UoMCl9dmFyIHpJPW1lO2Z1bmN0aW9uIEZlKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBfST1GZTtmdW5jdGlvbiBTZShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgdkk9U2U7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyICRJPVJlO2FzeW5jIGZ1bmN0aW9uIE5lKEEsSSx0LGUpe2xldCBnPVhJKEEsSSx0LGUpLHI9W107cmV0dXJuIGcub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGkpe2lmKGkudHlwZT09PUQuQmluYXJ5U3RyZWFtfHxpLnR5cGU9PT1ELkJpbmFyeUZpbGUpe2xldCBzPWkuZGF0YTtyLnB1c2gocyl9ZWxzZSBpZihpLnR5cGU9PT1ELkltYWdlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLl9JKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuTWVzaCl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi52SShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELlBvbHlEYXRhKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLiRJKHMpKX19KSxGQShnLHpJKHIsITApKX12YXIgQXQ9TmU7dmFyIFVlPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLEksdCxlLGcscil7bGV0IGk9YXdhaXQgUEkoQSxJLHIpO3JldHVybiBhd2FpdCBBdChpLHQsZSxnKX19O29BKFVlKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO210KHd0KTtleHBvcnR7QmkgYXMgYXBwbHlQcmVzZW50YXRpb25TdGF0ZVRvSW1hZ2UsSiBhcyBnZXREZWZhdWx0V2ViV29ya2VyLGsgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsTiBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLGNpIGFzIHJlYWREaWNvbUVuY2Fwc3VsYXRlZFBkZixkaSBhcyByZWFkRGljb21UYWdzLHdpIGFzIHJlYWRJbWFnZURpY29tRmlsZVNlcmllcyxnZSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXNXb3JrZXJGdW5jdGlvbixXcyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLG10IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLFBzIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsRWkgYXMgc3RydWN0dXJlZFJlcG9ydFRvSHRtbCxRaSBhcyBzdHJ1Y3R1cmVkUmVwb3J0VG9UZXh0LEZBIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" 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 fb16410aa..54ccb5d27 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.0.1" +__version__ = "7.1.0" diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm index cbc862894..983e7dab1 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm index d286a5cba..defaf34d1 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py b/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py index fb16410aa..54ccb5d27 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.0.1" +__version__ = "7.1.0" diff --git a/packages/dicom/typescript/README.md b/packages/dicom/typescript/README.md index ee8d68111..0412cb49e 100644 --- a/packages/dicom/typescript/README.md +++ b/packages/dicom/typescript/README.md @@ -4,10 +4,10 @@ > Read files and images related to DICOM file format. -[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/itk-wasm/dicom/ts/app/ +[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/ITK-Wasm/dicom/ts/app/ ':include :type=iframe width=100% height=800px') -[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/itk-wasm/dicom/ts/docs/) +[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/ITK-Wasm/dicom/ts/docs/) ## Installation diff --git a/packages/dicom/typescript/package.json b/packages/dicom/typescript/package.json index cebb9a1b0..ab653d241 100644 --- a/packages/dicom/typescript/package.json +++ b/packages/dicom/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/dicom", - "version": "7.0.1", + "version": "7.1.0", "packageManager": "pnpm@9.6.0", "description": "Read files and images related to DICOM file format.", "type": "module", diff --git a/packages/dicom/typescript/src/index-worker-embedded.ts b/packages/dicom/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/dicom/typescript/src/index-worker-embedded.ts +++ b/packages/dicom/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js' 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 67bc602ab..3e8d9f946 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.3.0" +__version__ = "1.4.0" 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 c1aa4ad81..f02e9ec43 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,dmFyIFF0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgY3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlRdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjMuMCIsUkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRD1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBELlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFQ9ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sZj1tdDt2YXIgb2U9U3ltYm9sKCJDb21saW5rLnByb3h5IiksaHQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksVUE9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLEZBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxzQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksYWU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIseXQ9e2NhbkhhbmRsZTpBPT5hZShBKSYmQVtvZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gSWUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLE5BKEEpfX0sd3Q9e2NhbkhhbmRsZTpBPT5hZShBKSYmc0EgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHNlPW5ldyBNYXAoW1sicHJveHkiLHl0XSxbInRocm93Iix3dF1dKTtmdW5jdGlvbiBEdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSWUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG4pe2lmKCFufHwhbi5kYXRhKXJldHVybjtpZighRHQodCxuLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7bi5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm8scGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxuLmRhdGEpLGw9KG4uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSCksQzt0cnl7bGV0IEk9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKFEsQik9PlFbQl0sQSksYT1nLnJlZHVjZSgoUSxCKT0+UVtCXSxBKTtzd2l0Y2gobyl7Y2FzZSJHRVQiOkM9YTticmVhaztjYXNlIlNFVCI6SVtnLnNsaWNlKC0xKVswXV09SChuLmRhdGEudmFsdWUpLEM9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6Qz1hLmFwcGx5KEksbCk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgUT1uZXcgYSguLi5sKTtDPWJ0KFEpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6USxwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7SWUoQSxCKSxDPUdBKFEsW1FdKX1icmVhaztjYXNlIlJFTEVBU0UiOkM9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChJKXtDPXt2YWx1ZTpJLFtzQV06MH19UHJvbWlzZS5yZXNvbHZlKEMpLmNhdGNoKEk9Pih7dmFsdWU6SSxbc0FdOjB9KSkudGhlbihJPT57bGV0W2EsUV09QkEoSSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxRKSxvPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxnZShlKSxGQSBpbiBBJiZ0eXBlb2YgQVtGQV09PSJmdW5jdGlvbiImJkFbRkFdKCkpfSkuY2F0Y2goST0+e2xldFthLFFdPUJBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbc0FdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLFEpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gU3QoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gZ2UoQSl7U3QoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBOQShBLGUpe3JldHVybiBiQShBLFtdLGUpfWZ1bmN0aW9uIGFBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBCZShBKXtyZXR1cm4gWShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntnZShBKX0pfXZhciBJQT1uZXcgV2Vha01hcCxnQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oSUEuZ2V0KEEpfHwwKS0xO0lBLnNldChBLGUpLGU9PT0wJiZCZShBKX0pO2Z1bmN0aW9uIGt0KEEsZSl7bGV0IHQ9KElBLmdldChlKXx8MCkrMTtJQS5zZXQoZSx0KSxnQSYmZ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uIFJ0KEEpe2dBJiZnQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIGJBKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbj1uZXcgUHJveHkodCx7Z2V0KGksbyl7aWYoYUEociksbz09PVVBKXJldHVybigpPT57UnQobiksQmUoQSkscj0hMH07aWYobz09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5ufTtsZXQgZz1ZKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChsPT5sLnRvU3RyaW5nKCkpfSkudGhlbihIKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIGJBKEEsWy4uLmUsb10pfSxzZXQoaSxvLGcpe2FBKHIpO2xldFtsLENdPUJBKGcpO3JldHVybiBZKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxvXS5tYXAoST0+SS50b1N0cmluZygpKSx2YWx1ZTpsfSxDKS50aGVuKEgpfSxhcHBseShpLG8sZyl7YUEocik7bGV0IGw9ZVtlLmxlbmd0aC0xXTtpZihsPT09aHQpcmV0dXJuIFkoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihIKTtpZihsPT09ImJpbmQiKXJldHVybiBiQShBLGUuc2xpY2UoMCwtMSkpO2xldFtDLEldPWllKGcpO3JldHVybiBZKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LEkpLnRoZW4oSCl9LGNvbnN0cnVjdChpLG8pe2FBKHIpO2xldFtnLGxdPWllKG8pO3JldHVybiBZKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcChDPT5DLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxsKS50aGVuKEgpfX0pO3JldHVybiBrdChuLEEpLG59ZnVuY3Rpb24gRnQoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gaWUoQSl7bGV0IGU9QS5tYXAoQkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxGdChlLm1hcCh0PT50WzFdKSldfXZhciBDZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBHQShBLGUpe3JldHVybiBDZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIGJ0KEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tvZV06ITB9KX1mdW5jdGlvbiBCQShBKXtmb3IobGV0W2UsdF1vZiBzZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isbl09dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sbl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LENlLmdldChBKXx8W11dfWZ1bmN0aW9uIEgoQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gc2UuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBZKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBuPVV0KCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG8peyFvLmRhdGF8fCFvLmRhdGEuaWR8fG8uZGF0YS5pZCE9PW58fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIoby5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpufSxlKSx0KX0pfWZ1bmN0aW9uIFV0KCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBaKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6TnR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOlRBfT1PYmplY3QsbEE9KEE9PmU9PntsZXQgdD1OdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTj1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+bEEoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6cX09QXJyYXksWD1FQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gR3QoQSl7cmV0dXJuIEEhPT1udWxsJiYhWChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiFYKEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBjZT1OKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIEx0KEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmY2UoQS5idWZmZXIpLGV9dmFyIE90PUVBKCJzdHJpbmciKSxrPUVBKCJmdW5jdGlvbiIpLHVlPUVBKCJudW1iZXIiKSxRQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLFR0PUE9PkE9PT0hMHx8QT09PSExLENBPUE9PntpZihsQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPVRBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LFB0PU4oIkRhdGUiKSx4dD1OKCJGaWxlIiksSnQ9TigiQmxvYiIpLEh0PU4oIkZpbGVMaXN0IiksTXQ9QT0+UUEoQSkmJmsoQS5waXBlKSxZdD1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1sQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scXQ9TigiVVJMU2VhcmNoUGFyYW1zIiksS3Q9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uICQoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxxKEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBpPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1pLmxlbmd0aCxnO2ZvcihyPTA7cjxvO3IrKylnPWlbcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBmZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIHBlPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsZGU9QT0+IVgoQSkmJkEhPT1wZTtmdW5jdGlvbiBPQSgpe2xldHtjYXNlbGVzczpBfT1kZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG4pPT57bGV0IGk9QSYmZmUoZSxuKXx8bjtDQShlW2ldKSYmQ0Eocik/ZVtpXT1PQShlW2ldLHIpOkNBKHIpP2VbaV09T0Eoe30scik6cShyKT9lW2ldPXIuc2xpY2UoKTplW2ldPXJ9O2ZvcihsZXQgcj0wLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWFyZ3VtZW50c1tyXSYmJChhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFd0PShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PigkKGUsKG4saSk9Pnt0JiZrKG4pP0FbaV09WihuLHQpOkFbaV09bn0se2FsbE93bktleXM6cn0pLEEpLGp0PUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksdnQ9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sX3Q9KEEsZSx0LHIpPT57bGV0IG4saSxvLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9bi5sZW5ndGg7aS0tID4wOylvPW5baV0sKCFyfHxyKG8sQSxlKSkmJiFnW29dJiYoZVtvXT1BW29dLGdbb109ITApO0E9dCE9PSExJiZUQShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0senQ9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxWdD1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighdWUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LFp0PShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZUQShVaW50OEFycmF5KSksWHQ9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG47Zm9yKDsobj1yLm5leHQoKSkmJiFuLmRvbmU7KXtsZXQgaT1uLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSwkdD0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxBcj1OKCJIVE1MRm9ybUVsZW1lbnQiKSxlcj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbil7cmV0dXJuIHIudG9VcHBlckNhc2UoKStufSksRWU9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLHRyPU4oIlJlZ0V4cCIpLG1lPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTskKHQsKG4saSk9PntsZXQgbzsobz1lKG4saSxBKSkhPT0hMSYmKHJbaV09b3x8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxycj1BPT57bWUoQSwoZSx0KT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoayhyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxucj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChpPT57dFtpXT0hMH0pfTtyZXR1cm4gcShBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxpcj0oKT0+e30sb3I9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLExBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsUWU9IjAxMjM0NTY3ODkiLGhlPXtESUdJVDpRZSxBTFBIQTpMQSxBTFBIQV9ESUdJVDpMQStMQS50b1VwcGVyQ2FzZSgpK1FlfSxhcj0oQT0xNixlPWhlLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIHNyKEEpe3JldHVybiEhKEEmJmsoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBJcj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG4pPT57aWYoUUEocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW25dPXI7bGV0IGk9cShyKT9bXTp7fTtyZXR1cm4gJChyLChvLGcpPT57bGV0IGw9dChvLG4rMSk7IVgobCkmJihpW2ddPWwpfSksZVtuXT12b2lkIDAsaX19cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LGdyPU4oIkFzeW5jRnVuY3Rpb24iKSxCcj1BPT5BJiYoUUEoQSl8fGsoQSkpJiZrKEEudGhlbikmJmsoQS5jYXRjaCkscz17aXNBcnJheTpxLGlzQXJyYXlCdWZmZXI6Y2UsaXNCdWZmZXI6R3QsaXNGb3JtRGF0YTpZdCxpc0FycmF5QnVmZmVyVmlldzpMdCxpc1N0cmluZzpPdCxpc051bWJlcjp1ZSxpc0Jvb2xlYW46VHQsaXNPYmplY3Q6UUEsaXNQbGFpbk9iamVjdDpDQSxpc1VuZGVmaW5lZDpYLGlzRGF0ZTpQdCxpc0ZpbGU6eHQsaXNCbG9iOkp0LGlzUmVnRXhwOnRyLGlzRnVuY3Rpb246ayxpc1N0cmVhbTpNdCxpc1VSTFNlYXJjaFBhcmFtczpxdCxpc1R5cGVkQXJyYXk6WnQsaXNGaWxlTGlzdDpIdCxmb3JFYWNoOiQsbWVyZ2U6T0EsZXh0ZW5kOld0LHRyaW06S3Qsc3RyaXBCT006anQsaW5oZXJpdHM6dnQsdG9GbGF0T2JqZWN0Ol90LGtpbmRPZjpsQSxraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6enQsdG9BcnJheTpWdCxmb3JFYWNoRW50cnk6WHQsbWF0Y2hBbGw6JHQsaXNIVE1MRm9ybTpBcixoYXNPd25Qcm9wZXJ0eTpFZSxoYXNPd25Qcm9wOkVlLHJlZHVjZURlc2NyaXB0b3JzOm1lLGZyZWV6ZU1ldGhvZHM6cnIsdG9PYmplY3RTZXQ6bnIsdG9DYW1lbENhc2U6ZXIsbm9vcDppcix0b0Zpbml0ZU51bWJlcjpvcixmaW5kS2V5OmZlLGdsb2JhbDpwZSxpc0NvbnRleHREZWZpbmVkOmRlLEFMUEhBQkVUOmhlLGdlbmVyYXRlU3RyaW5nOmFyLGlzU3BlY0NvbXBsaWFudEZvcm06c3IsdG9KU09OT2JqZWN0OklyLGlzQXN5bmNGbjpncixpc1RoZW5hYmxlOkJyfTtmdW5jdGlvbiBLKEEsZSx0LHIsbil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixlJiYodGhpcy5jb2RlPWUpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG4mJih0aGlzLnJlc3BvbnNlPW4pfXMuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOnMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIHllPUsucHJvdG90eXBlLHdlPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e3dlW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssd2UpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5ZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsZSx0LHIsbixpKT0+e2xldCBvPU9iamVjdC5jcmVhdGUoeWUpO3JldHVybiBzLnRvRmxhdE9iamVjdChBLG8sZnVuY3Rpb24obCl7cmV0dXJuIGwhPT1FcnJvci5wcm90b3R5cGV9LGc9PmchPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKG8sQS5tZXNzYWdlLGUsdCxyLG4pLG8uY2F1c2U9QSxvLm5hbWU9QS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obyxpKSxvfTt2YXIgcD1LO3ZhciBjQT1udWxsO2Z1bmN0aW9uIFBBKEEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQSl8fHMuaXNBcnJheShBKX1mdW5jdGlvbiBTZShBKXtyZXR1cm4gcy5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBEZShBLGUsdCl7cmV0dXJuIEE/QS5jb25jYXQoZSkubWFwKGZ1bmN0aW9uKG4saSl7cmV0dXJuIG49U2UobiksIXQmJmk/IlsiK24rIl0iOm59KS5qb2luKHQ/Ii4iOiIiKTplfWZ1bmN0aW9uIENyKEEpe3JldHVybiBzLmlzQXJyYXkoQSkmJiFBLnNvbWUoUEEpfXZhciBscj1zLnRvRmxhdE9iamVjdChzLHt9LG51bGwsZnVuY3Rpb24oZSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KGUpfSk7ZnVuY3Rpb24gRXIoQSxlLHQpe2lmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO2U9ZXx8bmV3KGNBfHxGb3JtRGF0YSksdD1zLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hcy5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCByPXQubWV0YVRva2VucyxuPXQudmlzaXRvcnx8SSxpPXQuZG90cyxvPXQuaW5kZXhlcyxsPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJnMuaXNTcGVjQ29tcGxpYW50Rm9ybShlKTtpZighcy5pc0Z1bmN0aW9uKG4pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gQyhFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihzLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFsJiZzLmlzQmxvYihFKSl0aHJvdyBuZXcgcCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gcy5pc0FycmF5QnVmZmVyKEUpfHxzLmlzVHlwZWRBcnJheShFKT9sJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gSShFLGMsdSl7bGV0IGQ9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihzLmVuZHNXaXRoKGMsInt9IikpYz1yP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYocy5pc0FycmF5KEUpJiZDcihFKXx8KHMuaXNGaWxlTGlzdChFKXx8cy5lbmRzV2l0aChjLCJbXSIpKSYmKGQ9cy50b0FycmF5KEUpKSlyZXR1cm4gYz1TZShjKSxkLmZvckVhY2goZnVuY3Rpb24oVSxFdCl7IShzLmlzVW5kZWZpbmVkKFUpfHxVPT09bnVsbCkmJmUuYXBwZW5kKG89PT0hMD9EZShbY10sRXQsaSk6bz09PW51bGw/YzpjKyJbXSIsQyhVKSl9KSwhMX1yZXR1cm4gUEEoRSk/ITA6KGUuYXBwZW5kKERlKHUsYyxpKSxDKEUpKSwhMSl9bGV0IGE9W10sUT1PYmplY3QuYXNzaWduKGxyLHtkZWZhdWx0VmlzaXRvcjpJLGNvbnZlcnRWYWx1ZTpDLGlzVmlzaXRhYmxlOlBBfSk7ZnVuY3Rpb24gQihFLGMpe2lmKCFzLmlzVW5kZWZpbmVkKEUpKXtpZihhLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO2EucHVzaChFKSxzLmZvckVhY2goRSxmdW5jdGlvbihkLGIpeyghKHMuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmbi5jYWxsKGUsZCxzLmlzU3RyaW5nKGIpP2IudHJpbSgpOmIsYyxRKSk9PT0hMCYmQihkLGM/Yy5jb25jYXQoYik6W2JdKX0pLGEucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSxlfXZhciBQPUVyO2Z1bmN0aW9uIGtlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gUmUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZQKEEsdGhpcyxlKX12YXIgRmU9UmUucHJvdG90eXBlO0ZlLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtGZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLGtlKX06a2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHVBPVJlO2Z1bmN0aW9uIFFyKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIEFBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8UXIsbj10JiZ0LnNlcmlhbGl6ZSxpO2lmKG4/aT1uKGUsdCk6aT1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgdUEoZSx0KS50b1N0cmluZyhyKSxpKXtsZXQgbz1BLmluZGV4T2YoIiMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikraX1yZXR1cm4gQX12YXIgeEE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxKQT14QTt2YXIgZkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBiZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6dUE7dmFyIFVlPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgTmU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgR2U9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6YmUsRm9ybURhdGE6VWUsQmxvYjpOZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBIQT17fTtjdChIQSx7aGFzQnJvd3NlckVudjooKT0+TGUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5jcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnVyfSk7dmFyIExlPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLGNyPShBPT5MZSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLHVyPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgeT17Li4uSEEsLi4uR2V9O2Z1bmN0aW9uIE1BKEEsZSl7cmV0dXJuIFAoQSxuZXcgeS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixuLGkpe3JldHVybiB5LmlzTm9kZSYmcy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmkuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sZSkpfWZ1bmN0aW9uIGZyKEEpe3JldHVybiBzLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxBKS5tYXAoZT0+ZVswXT09PSJbXSI/IiI6ZVsxXXx8ZVswXSl9ZnVuY3Rpb24gcHIoQSl7bGV0IGU9e30sdD1PYmplY3Qua2V5cyhBKSxyLG49dC5sZW5ndGgsaTtmb3Iocj0wO3I8bjtyKyspaT10W3JdLGVbaV09QVtpXTtyZXR1cm4gZX1mdW5jdGlvbiBkcihBKXtmdW5jdGlvbiBlKHQscixuLGkpe2xldCBvPXRbaSsrXTtpZihvPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IGc9TnVtYmVyLmlzRmluaXRlKCtvKSxsPWk+PXQubGVuZ3RoO3JldHVybiBvPSFvJiZzLmlzQXJyYXkobik/bi5sZW5ndGg6byxsPyhzLmhhc093blByb3AobixvKT9uW29dPVtuW29dLHJdOm5bb109ciwhZyk6KCghbltvXXx8IXMuaXNPYmplY3QobltvXSkpJiYobltvXT1bXSksZSh0LHIsbltvXSxpKSYmcy5pc0FycmF5KG5bb10pJiYobltvXT1wcihuW29dKSksIWcpfWlmKHMuaXNGb3JtRGF0YShBKSYmcy5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBzLmZvckVhY2hFbnRyeShBLChyLG4pPT57ZShmcihyKSxuLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBwQT1kcjtmdW5jdGlvbiBtcihBLGUsdCl7aWYocy5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKGV8fEpTT04ucGFyc2UpKEEpLHMudHJpbShBKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgWUE9e3RyYW5zaXRpb25hbDpmQSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9cy5pc09iamVjdChlKTtpZihpJiZzLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSkscy5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KHBBKGUpKTplO2lmKHMuaXNBcnJheUJ1ZmZlcihlKXx8cy5pc0J1ZmZlcihlKXx8cy5pc1N0cmVhbShlKXx8cy5pc0ZpbGUoZSl8fHMuaXNCbG9iKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKGkpe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIE1BKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGw9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBQKGc/eyJmaWxlc1tdIjplfTplLGwmJm5ldyBsLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gaXx8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLG1yKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxZQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBvPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKG8pdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9wLmZyb20oZyxwLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp5LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp5LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e1lBLmhlYWRlcnNbQV09e319KTt2YXIgVz1ZQTt2YXIgaHI9cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxPZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe249by5pbmRleE9mKCI6IiksdD1vLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9by5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmaHJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgVGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGRBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoZEEpOlN0cmluZyhBKX1mdW5jdGlvbiB5cihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgd3I9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gcUEoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIERyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIFNyKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4saSxvKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLGksbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIGo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIGkoZyxsLEMpe2xldCBJPWVBKGwpO2lmKCFJKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgYT1zLmZpbmRLZXkobixJKTsoIWF8fG5bYV09PT12b2lkIDB8fEM9PT0hMHx8Qz09PXZvaWQgMCYmblthXSE9PSExKSYmKG5bYXx8bF09ZEEoZykpfWxldCBvPShnLGwpPT5zLmZvckVhY2goZywoQyxJKT0+aShDLEksbCkpO3JldHVybiBzLmlzUGxhaW5PYmplY3QoZSl8fGUgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP28oZSx0KTpzLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiF3cihlKT9vKE9lKGUpLHQpOmUhPW51bGwmJmkodCxlLHIpLHRoaXN9Z2V0KGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4geXIobik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1lQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHFBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIGkobyl7aWYobz1lQShvKSxvKXtsZXQgZz1zLmZpbmRLZXkocixvKTtnJiYoIXR8fHFBKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChpKTppKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTsoIWV8fHFBKHRoaXMsdGhpc1tpXSxpLGUsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLGkpPT57bGV0IG89cy5maW5kS2V5KHIsaSk7aWYobyl7dFtvXT1kQShuKSxkZWxldGUgdFtpXTtyZXR1cm59bGV0IGc9ZT9EcihpKTpTdHJpbmcoaSkudHJpbSgpO2chPT1pJiZkZWxldGUgdFtpXSx0W2ddPWRBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tUZV09dGhpc1tUZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkobyl7bGV0IGc9ZUEobyk7cltnXXx8KFNyKG4sbykscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSx0aGlzfX07ai5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyhqLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHMoaik7dmFyIHc9ajtmdW5jdGlvbiB0QShBLGUpe2xldCB0PXRoaXN8fFcscj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe2k9Zy5jYWxsKHQsaSxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksaX1mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFBlKEEsZSx0KXtwLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHAuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKFBlLHAse19fQ0FOQ0VMX186ITB9KTt2YXIgeD1QZTtmdW5jdGlvbiBLQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBwKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3AuRVJSX0JBRF9SRVFVRVNULHAuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHhlPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4saSl7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmby5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmby5wdXNoKCJkb21haW49IituKSxpPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIFdBKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gakEoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIG5BKEEsZSl7cmV0dXJuIEEmJiFXQShlKT9qQShBLGUpOmV9dmFyIEplPXkuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4oaSl7bGV0IG89aTtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgZz1zLmlzU3RyaW5nKG8pP24obyk6bztyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gdkEoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGtyKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLGk9MCxvO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24obCl7bGV0IEM9RGF0ZS5ub3coKSxJPXJbaV07b3x8KG89QyksdFtuXT1sLHJbbl09QztsZXQgYT1pLFE9MDtmb3IoO2EhPT1uOylRKz10W2ErK10sYT1hJUE7aWYobj0obisxKSVBLG49PT1pJiYoaT0oaSsxKSVBKSxDLW88ZSlyZXR1cm47bGV0IEI9SSYmQy1JO3JldHVybiBCP01hdGgucm91bmQoUSoxZTMvQik6dm9pZCAwfX12YXIgSGU9a3I7ZnVuY3Rpb24gTWUoQSxlKXtsZXQgdD0wLHI9SGUoNTAsMjUwKTtyZXR1cm4gbj0+e2xldCBpPW4ubG9hZGVkLG89bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGc9aS10LGw9cihnKSxDPWk8PW87dD1pO2xldCBJPXtsb2FkZWQ6aSx0b3RhbDpvLHByb2dyZXNzOm8/aS9vOnZvaWQgMCxieXRlczpnLHJhdGU6bHx8dm9pZCAwLGVzdGltYXRlZDpsJiZvJiZDPyhvLWkpL2w6dm9pZCAwLGV2ZW50Om59O0lbZT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxBKEkpfX12YXIgUnI9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1IixZZT1SciYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG49QS5kYXRhLGk9dy5mcm9tKEEuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpvLHdpdGhYU1JGVG9rZW46Z309QSxsO2Z1bmN0aW9uIEMoKXtBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiZBLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbCl9bGV0IEk7aWYocy5pc0Zvcm1EYXRhKG4pKXtpZih5Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8eS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoST1pLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtjLC4uLnVdPUk/SS5zcGxpdCgiOyIpLm1hcChkPT5kLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2kuc2V0Q29udGVudFR5cGUoW2N8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi51XS5qb2luKCI7ICIpKX19bGV0IGE9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKEEuYXV0aCl7bGV0IGM9QS5hdXRoLnVzZXJuYW1lfHwiIix1PUEuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoYysiOiIrdSkpfWxldCBRPW5BKEEuYmFzZVVSTCxBLnVybCk7YS5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksQUEoUSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxhLnRpbWVvdXQ9QS50aW1lb3V0O2Z1bmN0aW9uIEIoKXtpZighYSlyZXR1cm47bGV0IGM9dy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYSYmYS5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksZD17ZGF0YTohb3x8bz09PSJ0ZXh0Inx8bz09PSJqc29uIj9hLnJlc3BvbnNlVGV4dDphLnJlc3BvbnNlLHN0YXR1czphLnN0YXR1cyxzdGF0dXNUZXh0OmEuc3RhdHVzVGV4dCxoZWFkZXJzOmMsY29uZmlnOkEscmVxdWVzdDphfTtLQShmdW5jdGlvbihVKXt0KFUpLEMoKX0sZnVuY3Rpb24oVSl7cihVKSxDKCl9LGQpLGE9bnVsbH1pZigib25sb2FkZW5kImluIGE/YS5vbmxvYWRlbmQ9QjphLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFhfHxhLnJlYWR5U3RhdGUhPT00fHxhLnN0YXR1cz09PTAmJiEoYS5yZXNwb25zZVVSTCYmYS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoQil9LGEub25hYm9ydD1mdW5jdGlvbigpe2EmJihyKG5ldyBwKCJSZXF1ZXN0IGFib3J0ZWQiLHAuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbCl9LGEub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHAoIk5ldHdvcmsgRXJyb3IiLHAuRVJSX05FVFdPUkssQSxhKSksYT1udWxsfSxhLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB1PUEudGltZW91dD8idGltZW91dCBvZiAiK0EudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixkPUEudHJhbnNpdGlvbmFsfHxmQTtBLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih1PUEudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgcCh1LGQuY2xhcmlmeVRpbWVvdXRFcnJvcj9wLkVUSU1FRE9VVDpwLkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGx9LHkuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoZyYmcy5pc0Z1bmN0aW9uKGcpJiYoZz1nKEEpKSxnfHxnIT09ITEmJkplKFEpKSl7bGV0IGM9QS54c3JmSGVhZGVyTmFtZSYmQS54c3JmQ29va2llTmFtZSYmeGUucmVhZChBLnhzcmZDb29raWVOYW1lKTtjJiZpLnNldChBLnhzcmZIZWFkZXJOYW1lLGMpfW49PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYSYmcy5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24odSxkKXthLnNldFJlcXVlc3RIZWFkZXIoZCx1KX0pLHMuaXNVbmRlZmluZWQoQS53aXRoQ3JlZGVudGlhbHMpfHwoYS53aXRoQ3JlZGVudGlhbHM9ISFBLndpdGhDcmVkZW50aWFscyksbyYmbyE9PSJqc29uIiYmKGEucmVzcG9uc2VUeXBlPUEucmVzcG9uc2VUeXBlKSx0eXBlb2YgQS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLE1lKEEub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIEEub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS51cGxvYWQmJmEudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixNZShBLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoQS5jYW5jZWxUb2tlbnx8QS5zaWduYWwpJiYobD1jPT57YSYmKHIoIWN8fGMudHlwZT9uZXcgeChudWxsLEEsYSk6YyksYS5hYm9ydCgpLGE9bnVsbCl9LEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGwpLEEuc2lnbmFsJiYoQS5zaWduYWwuYWJvcnRlZD9sKCk6QS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGwpKSk7bGV0IEU9dkEoUSk7aWYoRSYmeS5wcm90b2NvbHMuaW5kZXhPZihFKT09PS0xKXtyKG5ldyBwKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0UrIjoiLHAuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59YS5zZW5kKG58fG51bGwpfSl9O3ZhciBfQT17aHR0cDpjQSx4aHI6WWV9O3MuZm9yRWFjaChfQSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBxZT1BPT5gLSAke0F9YCxGcj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsbUE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IGk9MDtpPGU7aSsrKXt0PUFbaV07bGV0IG87aWYocj10LCFGcih0KSYmKHI9X0FbKG89U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgcChgVW5rbm93biBhZGFwdGVyICcke299J2ApO2lmKHIpYnJlYWs7bltvfHwiIyIraV09cn1pZighcil7bGV0IGk9T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxsXSk9PmBhZGFwdGVyICR7Z30gYCsobD09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89ZT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAocWUpLmpvaW4oYApgKToiICIrcWUoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgcCgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpfQX07ZnVuY3Rpb24gekEoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBoQShBKXtyZXR1cm4gekEoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT10QS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbUEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFcuYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gekEoQSksci5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gckEocil8fCh6QShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXRBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEtlPUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIE8oQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQyxJLGEpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQykmJnMuaXNQbGFpbk9iamVjdChJKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOmF9LEMsSSk6cy5pc1BsYWluT2JqZWN0KEkpP3MubWVyZ2Uoe30sSSk6cy5pc0FycmF5KEkpP0kuc2xpY2UoKTpJfWZ1bmN0aW9uIG4oQyxJLGEpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDLGEpfWVsc2UgcmV0dXJuIHIoQyxJLGEpfWZ1bmN0aW9uIGkoQyxJKXtpZighcy5pc1VuZGVmaW5lZChJKSlyZXR1cm4gcih2b2lkIDAsSSl9ZnVuY3Rpb24gbyhDLEkpe2lmKHMuaXNVbmRlZmluZWQoSSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDKX1lbHNlIHJldHVybiByKHZvaWQgMCxJKX1mdW5jdGlvbiBnKEMsSSxhKXtpZihhIGluIGUpcmV0dXJuIHIoQyxJKTtpZihhIGluIEEpcmV0dXJuIHIodm9pZCAwLEMpfWxldCBsPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQyxJKT0+bihLZShDKSxLZShJKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihJKXtsZXQgYT1sW0ldfHxuLFE9YShBW0ldLGVbSV0sSSk7cy5pc1VuZGVmaW5lZChRKSYmYSE9PWd8fCh0W0ldPVEpfSksdH12YXIgeUE9IjEuNi44Ijt2YXIgVkE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57VkFbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIFdlPXt9O1ZBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihpLG8pe3JldHVybiJbQXhpb3MgdiIreUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIitvKyhyPyIuICIrcjoiIil9cmV0dXJuKGksbyxnKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgcChuKG8sIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHAuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhV2Vbb10mJihXZVtvXT0hMCxjb25zb2xlLndhcm4obihvLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShpLG8sZyk6ITB9fTtmdW5jdGlvbiBicihBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBwKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixwLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IGk9cltuXSxvPWVbaV07aWYobyl7bGV0IGc9QVtpXSxsPWc9PT12b2lkIDB8fG8oZyxpLEEpO2lmKGwhPT0hMCl0aHJvdyBuZXcgcCgib3B0aW9uICIraSsiIG11c3QgYmUgIitsLHAuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgcCgiVW5rbm93biBvcHRpb24gIitpLHAuRVJSX0JBRF9PUFRJT04pfX12YXIgd0E9e2Fzc2VydE9wdGlvbnM6YnIsdmFsaWRhdG9yczpWQX07dmFyIEo9d0EudmFsaWRhdG9ycyx2PWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgSkEscmVzcG9uc2U6bmV3IEpBfX1hc3luYyByZXF1ZXN0KGUsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgaT1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfXRocm93IHJ9fV9yZXF1ZXN0KGUsdCl7dHlwZW9mIGU9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPWUpOnQ9ZXx8e30sdD1PKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOml9PXQ7ciE9PXZvaWQgMCYmd0EuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkoudHJhbnNpdGlvbmFsKEouYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpKLnRyYW5zaXRpb25hbChKLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKHMuaXNGdW5jdGlvbihuKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp3QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpKLmZ1bmN0aW9uLHNlcmlhbGl6ZTpKLmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBvPWkmJnMubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJnMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIGlbRV19KSx0LmhlYWRlcnM9dy5jb25jYXQobyxpKTtsZXQgZz1bXSxsPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihjKXt0eXBlb2YgYy5ydW5XaGVuPT0iZnVuY3Rpb24iJiZjLnJ1bldoZW4odCk9PT0hMXx8KGw9bCYmYy5zeW5jaHJvbm91cyxnLnVuc2hpZnQoYy5mdWxmaWxsZWQsYy5yZWplY3RlZCkpfSk7bGV0IEM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihjKXtDLnB1c2goYy5mdWxmaWxsZWQsYy5yZWplY3RlZCl9KTtsZXQgSSxhPTAsUTtpZighbCl7bGV0IEU9W2hBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsZyksRS5wdXNoLmFwcGx5KEUsQyksUT1FLmxlbmd0aCxJPVByb21pc2UucmVzb2x2ZSh0KTthPFE7KUk9SS50aGVuKEVbYSsrXSxFW2ErK10pO3JldHVybiBJfVE9Zy5sZW5ndGg7bGV0IEI9dDtmb3IoYT0wO2E8UTspe2xldCBFPWdbYSsrXSxjPWdbYSsrXTt0cnl7Qj1FKEIpfWNhdGNoKHUpe2MuY2FsbCh0aGlzLHUpO2JyZWFrfX10cnl7ST1oQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihhPTAsUT1DLmxlbmd0aDthPFE7KUk9SS50aGVuKENbYSsrXSxDW2ErK10pO3JldHVybiBJfWdldFVyaShlKXtlPU8odGhpcy5kZWZhdWx0cyxlKTtsZXQgdD1uQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBBQSh0LGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe3YucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChPKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihpLG8sZyl7cmV0dXJuIHRoaXMucmVxdWVzdChPKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpvfSkpfX12LnByb3RvdHlwZVtlXT10KCksdi5wcm90b3R5cGVbZSsiRm9ybSJdPXQoITApfSk7dmFyIGlBPXY7dmFyIFpBPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0PWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IGksbz1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksaT1nfSkudGhlbihuKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxvfSxlKGZ1bmN0aW9uKGksbyxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KGksbyxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxqZT1aQTtmdW5jdGlvbiBYQShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gJEEoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEFlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhBZSkuZm9yRWFjaCgoW0EsZV0pPT57QWVbZV09QX0pO3ZhciB2ZT1BZTtmdW5jdGlvbiBfZShBKXtsZXQgZT1uZXcgaUEoQSksdD1aKGlBLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBzLmV4dGVuZCh0LGlBLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSkscy5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gX2UoTyhBLG4pKX0sdH12YXIgbT1fZShXKTttLkF4aW9zPWlBO20uQ2FuY2VsZWRFcnJvcj14O20uQ2FuY2VsVG9rZW49amU7bS5pc0NhbmNlbD1yQTttLlZFUlNJT049eUE7bS50b0Zvcm1EYXRhPVA7bS5BeGlvc0Vycm9yPXA7bS5DYW5jZWw9bS5DYW5jZWxlZEVycm9yO20uYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07bS5zcHJlYWQ9WEE7bS5pc0F4aW9zRXJyb3I9JEE7bS5tZXJnZUNvbmZpZz1PO20uQXhpb3NIZWFkZXJzPXc7bS5mb3JtVG9KU09OPUE9PnBBKHMuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7bS5nZXRBZGFwdGVyPW1BLmdldEFkYXB0ZXI7bS5IdHRwU3RhdHVzQ29kZT12ZTttLmRlZmF1bHQ9bTt2YXIgXz1tO3ZhcntBeGlvczpabyxBeGlvc0Vycm9yOlhvLENhbmNlbGVkRXJyb3I6JG8saXNDYW5jZWw6QWEsQ2FuY2VsVG9rZW46ZWEsVkVSU0lPTjp0YSxhbGw6cmEsQ2FuY2VsOm5hLGlzQXhpb3NFcnJvcjppYSxzcHJlYWQ6b2EsdG9Gb3JtRGF0YTphYSxBeGlvc0hlYWRlcnM6c2EsSHR0cFN0YXR1c0NvZGU6SWEsZm9ybVRvSlNPTjpnYSxnZXRBZGFwdGVyOkJhLG1lcmdlQ29uZmlnOkNhfT1fO2FzeW5jIGZ1bmN0aW9uIFVyKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCBfLmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksaT1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKGkse3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIG9BPVVyO2Z1bmN0aW9uIHplKEEpe2xldCBlPU5BKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbVUFdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gTnIoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBpPUE7cmV0dXJuIGkud29ya2VyUHJveHkhPT12b2lkIDA/KHI9aS53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6aX0pOnplKEEpfWxldCBuPWF3YWl0IG9BKGUsdCk7cmV0dXJuIHplKG4pfXZhciBWZT1Ocjthc3luYyBmdW5jdGlvbiBHcihBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsbz0oYXdhaXQgXy5nZXQobix7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6b30pfXZhciBaZT1Hcjt2YXIgWGU9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIGV0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLCRlPW5ldyBUZXh0RW5jb2RlcixBdD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gTHIoQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLGk9QS5mc19zdGF0KGUpLnNpemUsbz1udWxsO2V0P289bmV3IFNoYXJlZEFycmF5QnVmZmVyKGkpOm89bmV3IEFycmF5QnVmZmVyKGkpO2xldCBnPW5ldyBVaW50OEFycmF5KG8pO3JldHVybiBBLmZzX3JlYWQocixnLDAsaSwwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gdHQoQSxlLHQpe2xldCByPW51bGw7ZXQ/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG49bmV3IFVpbnQ4QXJyYXkociksaT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gbi5zZXQoaSksbn1mdW5jdGlvbiBoKEEsZSx0LHIpe2xldCBuPTA7cmV0dXJuIGUhPT1udWxsJiYobj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbikpLG59ZnVuY3Rpb24geihBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbj1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLGk9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG5dKTtBLnN0cmluZ1RvVVRGOChyLGksbil9ZnVuY3Rpb24gUyhBLGUsdCxyKXtsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxpPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG89dHQoQSxuLGkpO3JldHVybiBUKHIsby5idWZmZXIpfWZ1bmN0aW9uIGVlKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiBPcihBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQyxJKXtzd2l0Y2goQy50eXBlKXtjYXNlIGYuVGV4dFN0cmVhbTp7bGV0IGE9JGUuZW5jb2RlKEMuZGF0YS5kYXRhKSxRPWgoQSxhLEksMCksQj17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWB9O3ooQSxCLEkpO2JyZWFrfWNhc2UgZi5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9JGUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KEMuZGF0YSkpLFE9aChBLGEsSSwwKSxCPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YH07eihBLEIsSSk7YnJlYWt9Y2FzZSBmLkJpbmFyeVN0cmVhbTp7bGV0IGE9Qy5kYXRhLmRhdGEsUT1oKEEsYSxJLDApLEI9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gfTt6KEEsQixJKTticmVha31jYXNlIGYuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIGYuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoQy5kYXRhLnBhdGgsQy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZi5JbWFnZTp7bGV0IGE9Qy5kYXRhLFE9aChBLGEuZGF0YSxJLDApLEI9aChBLGEuZGlyZWN0aW9uLEksMSksRT10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxtZXRhZGF0YTpFfTt6KEEsYyxJKTticmVha31jYXNlIGYuTWVzaDp7bGV0IGE9Qy5kYXRhLFE9aChBLGEucG9pbnRzLEksMCksQj1oKEEsYS5jZWxscyxJLDEpLEU9aChBLGEucG9pbnREYXRhLEksMiksYz1oKEEsYS5jZWxsRGF0YSxJLDMpLHU9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTt6KEEsdSxJKTticmVha31jYXNlIGYuUG9seURhdGE6e2xldCBhPUMuZGF0YSxRPWgoQSxhLnBvaW50cyxJLDApLEI9aChBLGEudmVydGljZXMsSSwxKSxFPWgoQSxhLmxpbmVzLEksMiksYz1oKEEsYS5wb2x5Z29ucyxJLDMpLHU9aChBLGEudHJpYW5nbGVTdHJpcHMsSSw0KSxkPWgoQSxhLnBvaW50RGF0YSxJLDUpLGI9aChBLGEucG9pbnREYXRhLEksNiksVT17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Yn1gfTt6KEEsVSxJKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbj1BLnN0YWNrU2F2ZSgpLGk9MDt0cnl7aT1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2goQyl7dGhyb3cgdHlwZW9mIEM9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoQykpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksQ31maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG4pfWxldCBvPUEuZ2V0TW9kdWxlU3Rkb3V0KCksZz1BLmdldE1vZHVsZVN0ZGVycigpLGw9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJmk9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oQyxJKXtsZXQgYT1udWxsO3N3aXRjaChDLnR5cGUpe2Nhc2UgZi5UZXh0U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsRSk7YT17ZGF0YTpBdC5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgZi5Kc29uQ29tcGF0aWJsZTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO2E9SlNPTi5wYXJzZShBdC5kZWNvZGUoYykpO2JyZWFrfWNhc2UgZi5CaW5hcnlTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSwwXSk7YT17ZGF0YTp0dChBLEIsRSl9O2JyZWFrfWNhc2UgZi5UZXh0RmlsZTp7YT17cGF0aDpDLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoQy5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGYuQmluYXJ5RmlsZTp7YT17cGF0aDpDLmRhdGEucGF0aCxkYXRhOkxyKEEsQy5kYXRhLnBhdGgpfTticmVha31jYXNlIGYuSW1hZ2U6e2xldCBCPWVlKEEsSSk7Qi5kYXRhPVMoQSxJLDAsQi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQi5kaXJlY3Rpb249UyhBLEksMSxNLkZsb2F0NjQpLEIubWV0YWRhdGE9bmV3IE1hcChCLm1ldGFkYXRhKSxhPUI7YnJlYWt9Y2FzZSBmLk1lc2g6e2xldCBCPWVlKEEsSSk7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPVMoQSxJLDAsQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPVQoQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbHM+MD9CLmNlbGxzPVMoQSxJLDEsQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qi5jZWxscz1UKEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1TKEEsSSwyLEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPVQoQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1TKEEsSSwzLEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1UKEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9QjticmVha31jYXNlIGYuUG9seURhdGE6e2xldCBCPWVlKEEsSSk7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPVMoQSxJLDAsTS5GbG9hdDMyKTpCLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEIudmVydGljZXNCdWZmZXJTaXplPjA/Qi52ZXJ0aWNlcz1TKEEsSSwxLEQuVUludDMyKTpCLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxCLmxpbmVzQnVmZmVyU2l6ZT4wP0IubGluZXM9UyhBLEksMixELlVJbnQzMik6Qi5saW5lcz1uZXcgVWludDMyQXJyYXksQi5wb2x5Z29uc0J1ZmZlclNpemU+MD9CLnBvbHlnb25zPVMoQSxJLDMsRC5VSW50MzIpOkIucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEIudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Qi50cmlhbmdsZVN0cmlwcz1TKEEsSSw0LEQuVUludDMyKTpCLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1TKEEsSSw1LEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1UKEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPVMoQSxJLDYsQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1UKEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUI7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgUT17dHlwZTpDLnR5cGUsZGF0YTphfTtsLnB1c2goUSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6byxzdGRlcnI6ZyxvdXRwdXRzOmx9fXZhciBydD1Pcjt2YXIgVHI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFByKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49eHIoQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIHhyKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVHImJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBudD1QcjtmdW5jdGlvbiBKcihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgaXQ9SnI7ZnVuY3Rpb24gSHIoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIG90PUhyO2Z1bmN0aW9uIE1yKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBhdD1Ncjt2YXIgWXI7ZnVuY3Rpb24gREEoKXtyZXR1cm4gWXJ9dmFyIHFyO2Z1bmN0aW9uIHN0KCl7cmV0dXJuIHFyfXZhciBLcjtmdW5jdGlvbiBTQSgpe3JldHVybiBLcn12YXIgdGU9bmV3IE1hcDtmdW5jdGlvbiBXcigpe2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBJdCgpe2xldCBBPURBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIGtBKCl7bGV0IEE9c3QoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBqcihBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLHRlLmhhcyhuKSlyZXR1cm4gdGUuZ2V0KG4pO3tsZXQgaT1hd2FpdCBaZShBLGU/LnRvU3RyaW5nKCk/P0l0KCksdD8/a0EoKSk7cmV0dXJuIHRlLnNldChuLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIHZyKEEsZSx0LHIsbil7aWYoIWF3YWl0IFhlKCkpe2xldCB1PSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydCh1KSxuZXcgRXJyb3IodSl9bGV0IGk9bj8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IHU9YXdhaXQganIoQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9rQSgpKTtyZXR1cm4gcnQodSxlLHQscil9bGV0IG89aSxnPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9XcigpLGw9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OkMsd29ya2VyOkl9PWF3YWl0IFZlKG8sbCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9rQSgpKTtvPUk7bGV0IGE9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lmKHUudHlwZT09PWYuQmluYXJ5U3RyZWFtKXtsZXQgZD11LmRhdGEuZGF0YTthLnB1c2goZCl9ZWxzZSBpZih1LnR5cGU9PT1mLkJpbmFyeUZpbGUpe2xldCBkPXUuZGF0YS5kYXRhO2EucHVzaChkKX1lbHNlIGlmKHUudHlwZT09PWYuSW1hZ2Upe2xldCBkPXUuZGF0YTtkLmRhdGEhPT1udWxsJiZhLnB1c2goLi4uaXQoZCkpfWVsc2UgaWYodS50eXBlPT09Zi5NZXNoKXtsZXQgZD11LmRhdGE7YS5wdXNoKC4uLm90KGQpKX1lbHNlIGlmKHUudHlwZT09PWYuUG9seURhdGEpe2xldCBkPXUuZGF0YTthLnB1c2goLi4uYXQoZCkpfX0pO2xldCBRPW4/LnBpcGVsaW5lQmFzZVVybD8/SXQoKSxCPXR5cGVvZiBRIT0ic3RyaW5nIiYmdHlwZW9mIFE/LmhyZWY8InUiP1EuaHJlZjpRLEU9ciE9bnVsbD9HQShyLG50KGEsbj8ubm9Db3B5KSk6bnVsbCxjPWF3YWl0IEMucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLEIsZSx0LEUsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/a0EoKSk7cmV0dXJue3JldHVyblZhbHVlOmMucmV0dXJuVmFsdWUsc3Rkb3V0OmMuc3Rkb3V0LHN0ZGVycjpjLnN0ZGVycixvdXRwdXRzOmMub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIEY9dnI7dmFyIF9yPW51bGw7ZnVuY3Rpb24gZ3QoKXtyZXR1cm4gX3J9dmFyIHJlLHpyPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kb3duc2FtcGxlQCR7UkF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiB0cyhBKXtyZT1BfWZ1bmN0aW9uIEcoKXtpZih0eXBlb2YgcmU8InUiKXJldHVybiByZTtsZXQgQT1EQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTp6cn12YXIgbmUsVnI9bnVsbDtmdW5jdGlvbiBCdChBKXtuZT1BfWZ1bmN0aW9uIFIoKXtpZih0eXBlb2YgbmU8InUiKXJldHVybiBuZTtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpWcn12YXIgVj1udWxsO2FzeW5jIGZ1bmN0aW9uIEN0KCl7bGV0IEE9UigpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7Vj1hd2FpdCBvQShlKX1mdW5jdGlvbiBJcyhBKXtWPUF9YXN5bmMgZnVuY3Rpb24gTCgpe2lmKFYhPT1udWxsKXJldHVybiBWLnRlcm1pbmF0ZWQmJmF3YWl0IEN0KCksVjtsZXQgQT1ndCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBDdCgpLFYpfWFzeW5jIGZ1bmN0aW9uIFpyKEEsZT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCB0PVt7dHlwZTpmLkltYWdlfV0scj1be3R5cGU6Zi5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnNocmlua0ZhY3RvcnMpe2lmKGUuc2hyaW5rRmFjdG9ycy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChlLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIEU9PntuLnB1c2goRS50b1N0cmluZygpKX0pKX1lLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJm4ucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGc9ImRvd25zYW1wbGUtYmluLXNocmluayIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgTCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6SSxzdGRlcnI6YSxvdXRwdXRzOlF9PWF3YWl0IEYoZyxuLHQscix7cGlwZWxpbmVCYXNlVXJsOkcoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qyxkb3duc2FtcGxlZDpRWzBdPy5kYXRhfX12YXIgWHI9WnI7YXN5bmMgZnVuY3Rpb24gJHIoQSxlPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IHQ9W3t0eXBlOmYuSW1hZ2V9XSxyPVt7dHlwZTpmLkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc2hyaW5rRmFjdG9ycyl7aWYoZS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKGUuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWlmKGUuY3JvcFJhZGl1cyl7aWYoZS5jcm9wUmFkaXVzLmxlbmd0aDwyKXRocm93IG5ldyBFcnJvcignImNyb3AtcmFkaXVzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMicpO24ucHVzaCgiLS1jcm9wLXJhZGl1cyIpLGF3YWl0IFByb21pc2UuYWxsKGUuY3JvcFJhZGl1cy5tYXAoYXN5bmMgRT0+e24ucHVzaChFLnRvU3RyaW5nKCkpfSkpfWxldCBnPSJkb3duc2FtcGxlLWxhYmVsLWltYWdlIixsPWU/LndlYldvcmtlcjtsPT09dm9pZCAwJiYobD1hd2FpdCBMKCkpO2xldHt3ZWJXb3JrZXI6QyxyZXR1cm5WYWx1ZTpJLHN0ZGVycjphLG91dHB1dHM6UX09YXdhaXQgRihnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6RygpLHBpcGVsaW5lV29ya2VyVXJsOlIoKSx3ZWJXb3JrZXI6bCxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoSSE9PTAmJmEhPT0iIil0aHJvdyBuZXcgRXJyb3IoYSk7cmV0dXJue3dlYldvcmtlcjpDLGRvd25zYW1wbGVkOlFbMF0/LmRhdGF9fXZhciBBbj0kcjthc3luYyBmdW5jdGlvbiBlbihBPXtzaHJpbmtGYWN0b3JzOlsyLDJdfSl7bGV0IGU9W3t0eXBlOmYuSnNvbkNvbXBhdGlibGV9XSx0PVtdLHI9W107aWYoci5wdXNoKCIwIiksci5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBBLnNocmlua0ZhY3RvcnM8InUiKXtpZihBLnNocmlua0ZhY3RvcnMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7ci5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoQS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBRPT57ci5wdXNoKFEudG9TdHJpbmcoKSl9KSl9bGV0IGk9ImRvd25zYW1wbGUtc2lnbWEiLG89QT8ud2ViV29ya2VyO289PT12b2lkIDAmJihvPWF3YWl0IEwoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOmwsc3RkZXJyOkMsb3V0cHV0czpJfT1hd2FpdCBGKGkscixlLHQse3BpcGVsaW5lQmFzZVVybDpHKCkscGlwZWxpbmVXb3JrZXJVcmw6UigpLHdlYldvcmtlcjpvLG5vQ29weTpBPy5ub0NvcHl9KTtpZihsIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmcsc2lnbWE6SVswXT8uZGF0YX19dmFyIHRuPWVuO2FzeW5jIGZ1bmN0aW9uIHJuKEEsZT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCB0PVt7dHlwZTpmLkltYWdlfV0scj1be3R5cGU6Zi5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnNocmlua0ZhY3RvcnMpe2lmKGUuc2hyaW5rRmFjdG9ycy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChlLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIEU9PntuLnB1c2goRS50b1N0cmluZygpKX0pKX1pZihlLmNyb3BSYWRpdXMpe2lmKGUuY3JvcFJhZGl1cy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJjcm9wLXJhZGl1cyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tY3JvcC1yYWRpdXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmNyb3BSYWRpdXMubWFwKGFzeW5jIEU9PntuLnB1c2goRS50b1N0cmluZygpKX0pKX1sZXQgZz0iZG93bnNhbXBsZSIsbD1lPy53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgTCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6SSxzdGRlcnI6YSxvdXRwdXRzOlF9PWF3YWl0IEYoZyxuLHQscix7cGlwZWxpbmVCYXNlVXJsOkcoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOmwsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKEkhPT0wJiZhIT09IiIpdGhyb3cgbmV3IEVycm9yKGEpO3JldHVybnt3ZWJXb3JrZXI6Qyxkb3duc2FtcGxlZDpRWzBdPy5kYXRhfX12YXIgbm49cm47YXN5bmMgZnVuY3Rpb24gb24oQT17c2l6ZTpbMSwxXSxzaWdtYTpbMSwxXX0pe2xldCBlPVt7dHlwZTpmLkpzb25Db21wYXRpYmxlfV0sdD1bXSxyPVtdO2lmKHIucHVzaCgiMCIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgQS5zaXplPCJ1Iil7aWYoQS5zaXplLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNpemUiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7ci5wdXNoKCItLXNpemUiKSxhd2FpdCBQcm9taXNlLmFsbChBLnNpemUubWFwKGFzeW5jIFE9PntyLnB1c2goUS50b1N0cmluZygpKX0pKX1pZih0eXBlb2YgQS5zaWdtYTwidSIpe2lmKEEuc2lnbWEubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2lnbWEiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7ci5wdXNoKCItLXNpZ21hIiksYXdhaXQgUHJvbWlzZS5hbGwoQS5zaWdtYS5tYXAoYXN5bmMgUT0+e3IucHVzaChRLnRvU3RyaW5nKCkpfSkpfXR5cGVvZiBBLm1heEtlcm5lbFdpZHRoPCJ1IiYmci5wdXNoKCItLW1heC1rZXJuZWwtd2lkdGgiLEEubWF4S2VybmVsV2lkdGgudG9TdHJpbmcoKSksdHlwZW9mIEEubWF4S2VybmVsRXJyb3I8InUiJiZyLnB1c2goIi0tbWF4LWtlcm5lbC1lcnJvciIsQS5tYXhLZXJuZWxFcnJvci50b1N0cmluZygpKTtsZXQgaT0iZ2F1c3NpYW4ta2VybmVsLXJhZGl1cyIsbz1BPy53ZWJXb3JrZXI7bz09PXZvaWQgMCYmKG89YXdhaXQgTCgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6bCxzdGRlcnI6QyxvdXRwdXRzOkl9PWF3YWl0IEYoaSxyLGUsdCx7cGlwZWxpbmVCYXNlVXJsOkcoKSxwaXBlbGluZVdvcmtlclVybDpSKCksd2ViV29ya2VyOm8sbm9Db3B5OkE/Lm5vQ29weX0pO2lmKGwhPT0wJiZDIT09IiIpdGhyb3cgbmV3IEVycm9yKEMpO3JldHVybnt3ZWJXb3JrZXI6ZyxyYWRpdXM6SVswXT8uZGF0YX19dmFyIGFuPW9uO3ZhciBsdD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgdHQ9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciBldD0oQSxJKT0+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/cj1hd2FpdCB3QS5nZXQoZyk6KHdBLnNldChnLHhJKGUsSSx0KSkscj1hd2FpdCB3QS5nZXQoZykpLHJ9dmFyIFBJPWZlO3ZhciBsZT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFA9dWU7ZnVuY3Rpb24gaGUoQSxJKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDg6e3Q9bmV3IEludDhBcnJheShJKTticmVha31jYXNlIHAuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShJKTticmVha31jYXNlIHAuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoSSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFk9aGU7dmFyIFpJPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGpJPW5ldyBUZXh0RW5jb2RlcixXST1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSxJKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3BlbihJLHQuZmxhZ3MpLHI9QS5mc19zdGF0KEkpLnNpemUsaT1udWxsO1pJP2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOmk9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBzPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQoZSxzLDAsciwwKSxBLmZzX2Nsb3NlKGUpLHN9ZnVuY3Rpb24gVkkoQSxJLHQpe2xldCBlPW51bGw7Wkk/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6ZT1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSx0KTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiB5KEEsSSx0LGUpe2xldCBnPTA7cmV0dXJuIEkhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGUsSS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShJLmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gaihBLEksdCl7bGV0IGU9SlNPTi5zdHJpbmdpZnkoSSksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gRihBLEksdCxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLGk9VkkoQSxnLHIpO3JldHVybiBZKGUsaS5idWZmZXIpfWZ1bmN0aW9uIHpBKEEsSSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxJXSksZT1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLEksdCxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxDKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG89akkuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG89akkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG89US5kYXRhLmRhdGEsZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG89US5kYXRhLGY9eShBLG8uZGF0YSxDLDApLG49eShBLG8uZGlyZWN0aW9uLEMsMSksRT10eXBlb2Ygby5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShvLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOm8uaW1hZ2VUeXBlLG5hbWU6by5uYW1lLG9yaWdpbjpvLm9yaWdpbixzcGFjaW5nOm8uc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsc2l6ZTpvLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtqKEEsYyxDKTticmVha31jYXNlIEQuTWVzaDp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby5jZWxscyxDLDEpLEU9eShBLG8ucG9pbnREYXRhLEMsMiksYz15KEEsby5jZWxsRGF0YSxDLDMpLHU9e21lc2hUeXBlOm8ubWVzaFR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpvLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsY2VsbEJ1ZmZlclNpemU6by5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtqKEEsdSxDKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8udmVydGljZXMsQywxKSxFPXkoQSxvLmxpbmVzLEMsMiksYz15KEEsby5wb2x5Z29ucyxDLDMpLHU9eShBLG8udHJpYW5nbGVTdHJpcHMsQyw0KSxkPXkoQSxvLnBvaW50RGF0YSxDLDUpLFI9eShBLG8ucG9pbnREYXRhLEMsNiksTj17cG9seURhdGFUeXBlOm8ucG9seURhdGFUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpvLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxsaW5lc0J1ZmZlclNpemU6by5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOm8ucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpvLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtqKEEsTixDKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKEkuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCkscz1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJnI9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oUSxDKXtsZXQgbz1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz17ZGF0YTpXSS5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289SlNPTi5wYXJzZShXSS5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSk7bz17ZGF0YTpWSShBLG4sRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBuPXpBKEEsQyk7bi5kYXRhPUYoQSxDLDAsbi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksbi5kaXJlY3Rpb249RihBLEMsMSxQLkZsb2F0NjQpLG4ubWV0YWRhdGE9bmV3IE1hcChuLm1ldGFkYXRhKSxvPW47YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsbi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOm4ucG9pbnRzPVkobi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbHM+MD9uLmNlbGxzPUYoQSxDLDEsbi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6bi5jZWxscz1ZKG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQywyLG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQywzLG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsUC5GbG9hdDMyKTpuLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LG4udmVydGljZXNCdWZmZXJTaXplPjA/bi52ZXJ0aWNlcz1GKEEsQywxLHAuVUludDMyKTpuLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxuLmxpbmVzQnVmZmVyU2l6ZT4wP24ubGluZXM9RihBLEMsMixwLlVJbnQzMik6bi5saW5lcz1uZXcgVWludDMyQXJyYXksbi5wb2x5Z29uc0J1ZmZlclNpemU+MD9uLnBvbHlnb25zPUYoQSxDLDMscC5VSW50MzIpOm4ucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LG4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bi50cmlhbmdsZVN0cmlwcz1GKEEsQyw0LHAuVUludDMyKTpuLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQyw1LG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDYsbi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTpvfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6aSxzdGRlcnI6cyxvdXRwdXRzOmF9fXZhciBYST15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsSSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSxJKTtnIT09bnVsbCYmdC5wdXNoKGcpfXJldHVybiB0fWZ1bmN0aW9uIHBlKEEsSSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksd2UmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkk/dDp0LnNsaWNlKDApfXZhciB6ST1tZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX0k9RmU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZJPVNlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkST1SZTthc3luYyBmdW5jdGlvbiBOZShBLEksdCxlKXtsZXQgZz1YSShBLEksdCxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8aS50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKHMpfWVsc2UgaWYoaS50eXBlPT09RC5JbWFnZSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi5fSShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELk1lc2gpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4udkkocykpfWVsc2UgaWYoaS50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi4kSShzKSl9fSksRkEoZyx6SShyLCEwKSl9dmFyIEF0PU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSxJLHQsZSxnLHIpe2xldCBpPWF3YWl0IFBJKEEsSSxyKTtyZXR1cm4gYXdhaXQgQXQoaSx0LGUsZyl9fTtvQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztCdChsdCk7ZXhwb3J0e25uIGFzIGRvd25zYW1wbGUsWHIgYXMgZG93bnNhbXBsZUJpblNocmluayxBbiBhcyBkb3duc2FtcGxlTGFiZWxJbWFnZSx0biBhcyBkb3duc2FtcGxlU2lnbWEsYW4gYXMgZ2F1c3NpYW5LZXJuZWxSYWRpdXMsTCBhcyBnZXREZWZhdWx0V2ViV29ya2VyLFIgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRyBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLElzIGFzIHNldERlZmF1bHRXZWJXb3JrZXIsQnQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwsdHMgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxSQSBhcyB2ZXJzaW9ufTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" +default_js_module = """data:text/javascript;base64,dmFyIFF0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgY3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlRdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHV0PSIxLjMuMCIsUkE9dXQ7dmFyIGZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRD1mdDt2YXIgcHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LE09cHQ7ZnVuY3Rpb24gZHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBELlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIE0uRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTS5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFQ9ZHQ7dmFyIG10PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGY9bXQ7dmFyIG9lPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGh0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFVBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxGQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksc0E9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGFlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHl0PXtjYW5IYW5kbGU6QT0+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 67bc602ab..3e8d9f946 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.3.0" +__version__ = "1.4.0" diff --git a/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py b/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py index 67bc602ab..3e8d9f946 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.3.0" +__version__ = "1.4.0" diff --git a/packages/downsample/typescript/README.md b/packages/downsample/typescript/README.md index 3253ac38a..390f59768 100644 --- a/packages/downsample/typescript/README.md +++ b/packages/downsample/typescript/README.md @@ -4,10 +4,10 @@ > Pipelines for downsampling images. -[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/itk-wasm/downsample/ts/docs/ +[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/ITK-Wasm/downsample/ts/docs/ ':include :type=iframe width=100% height=800px') -[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/itk-wasm/downsample/ts/docs/) +[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/ITK-Wasm/downsample/ts/docs/) ## Installation diff --git a/packages/downsample/typescript/package.json b/packages/downsample/typescript/package.json index f76f1be58..ae9af2334 100644 --- a/packages/downsample/typescript/package.json +++ b/packages/downsample/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/downsample", - "version": "1.3.0", + "version": "1.4.0", "packageManager": "pnpm@9.6.0", "description": "Pipelines for downsampling images.", "type": "module", diff --git a/packages/downsample/typescript/src/index-worker-embedded.ts b/packages/downsample/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/downsample/typescript/src/index-worker-embedded.ts +++ b/packages/downsample/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js' diff --git a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py index a955fdae1..67bc602ab 100644 --- a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py +++ b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.2.1" +__version__ = "1.3.0" diff --git a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py index 4220dc7b9..fe181a21d 100644 --- a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py +++ b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_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,dmFyIGhyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd3I9KGUsQSk9Pntmb3IodmFyIHQgaW4gQSlocihlLHQse2dldDpBW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFJyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksWT1Scjt2YXIga3I9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxoPWtyO3ZhciBicj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sYj1icjtmdW5jdGlvbiBEcihlLEEpe2xldCB0PW51bGw7c3dpdGNoKGUpe2Nhc2UgaC5VSW50ODp7dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50ODp7dD1uZXcgSW50OEFycmF5KEEpO2JyZWFrfWNhc2UgaC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEEpO2JyZWFrfWNhc2UgaC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShBKTticmVha31jYXNlIGguVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShBKTticmVha31jYXNlIGguSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBoLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoQSk6dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShBKTp0PW5ldyBVaW50OEFycmF5KEEpO2JyZWFrfWNhc2UgYi5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBiLkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShBKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgTj1Ecjt2YXIgV3I9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxtZT1Xcjt2YXIgUGU9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoQT0yLHQ9aC5VSW50OCxyPW1lLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPUEsdGhpcy5jb21wb25lbnRUeXBlPXQsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LEl0PVBlO2Z1bmN0aW9uIEZyKGUsQSx0LHIsbyl7ZVtyK3QqQV09b312YXIgZ3Q9RnI7dmFyIHhlPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3RvcihBPW5ldyBJdCl7dGhpcy5pbWFnZVR5cGU9QTtsZXQgdD1BLmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkodCksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KHQpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkodCp0KSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8dDtyKyspZ3QodGhpcy5kaXJlY3Rpb24sdCxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheSh0KSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxLPXhlO2Z1bmN0aW9uIFVyKGUpe2xldCBBPW5ldyBLKGUuaW1hZ2VUeXBlKTtpZihBLm5hbWU9ZS5uYW1lLEEub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLEEuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksQS5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSxBLnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCB0PWUuZGF0YS5jb25zdHJ1Y3RvcjtBLmRhdGE9bmV3IHQoZS5kYXRhLmxlbmd0aCksQS5kYXRhIT1udWxsJiZBLmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gQX12YXIgR2U9VXI7ZnVuY3Rpb24gTnIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgQT1lWzBdO2lmKEEuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgSyhBLmltYWdlVHlwZSk7dC5vcmlnaW49QXJyYXkuZnJvbShBLm9yaWdpbiksdC5zcGFjaW5nPUFycmF5LmZyb20oQS5zcGFjaW5nKTtsZXQgcj10LmltYWdlVHlwZS5kaW1lbnNpb247dC5kaXJlY3Rpb249QS5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7dC5zaXplPUFycmF5LmZyb20oQS5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxzKT0+YStzLnNpemVbb10sMCk7dC5zaXplW29dPWk7bGV0IG49dC5zaXplLnJlZHVjZSgoYSxzKT0+YSpzLDEpKnQuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT1BLmRhdGEuY29uc3RydWN0b3I7dC5kYXRhPW5ldyBtKG4pO2xldCBmPXQuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTx0LnNpemUubGVuZ3RoLTE7YSsrKWYqPXQuc2l6ZVthXTtsZXQgcD0wO2lmKHQuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0LmRhdGEuc2V0KGVbYV0uZGF0YSxmKnApLHArPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiB0fXZhciBUZT1OcjtmdW5jdGlvbiBTcihlKXtsZXQgQT1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKEEudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCB0PWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTtBPWUuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoQS50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgdD1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7QT1lLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKEEudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgdD1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihBLnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IHQ9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9cmV0dXJuIEF9dmFyIHRlPVNyO2Z1bmN0aW9uIE9yKGUsQSl7bGV0IHQ9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgQTwidSImJnR5cGVvZiBBLnBpeGVsVHlwZTwidSImJih0LnBpeGVsVHlwZT1BLnBpeGVsVHlwZSxBLnBpeGVsVHlwZT09PW1lLlNjYWxhciYmdC5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgQTwidSImJnR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUiJiZBLmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYodC5jb21wb25lbnRUeXBlPUEuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IEsodCk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIEE8InUiJiZ0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1IiYmQS5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBoLlVJbnQ4OmNhc2UgaC5JbnQ4OmNhc2UgaC5VSW50MTY6Y2FzZSBoLkludDE2OmNhc2UgaC5VSW50MzI6Y2FzZSBoLkludDMyOmNhc2UgYi5GbG9hdDMyOmNhc2UgYi5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGguVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgYi5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBiLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSBoLlVJbnQ2NDpjYXNlIGguSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgaC5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBiLkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBiLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBKPU9yO3ZhciBKZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3RvcihBLHQpe3RoaXMuZmNuPXQsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkoQSksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyhBLHQ9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOnQsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheShBLmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsQS5mb3JFYWNoKChuLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxuKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCBBPTA7QTx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDtBKyspe2xldCB0PXRoaXMud29ya2VyUXVldWVbQV07dD8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVtBXT1udWxsfX1jYW5jZWwoQSl7bGV0IHQ9dGhpcy5ydW5JbmZvW0FdO3QhPW51bGwmJih0LmNhbmNlbGVkPSEwKX1hZGRUYXNrKEEsdCxyKXtsZXQgbz10aGlzLnJ1bkluZm9bQV07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6biwuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gobiksdGhpcy5ydW5JbmZvW0FdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1t0XT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayhBLGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKG49PntvLnJlamVjdChuKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW3Qscl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsdCxyKX0sNTApKX1jbGVhclRhc2soQSl7dGhpcy5ydW5JbmZvW0FdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW0FdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bQV0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1tBXS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1tBXS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1tBXS5yZXNvbHZlPSgpPT57fX19LExlPUplO3ZhciBQcj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGc9UHI7dmFyIHB0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHhyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFllPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxNZT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZmU9U3ltYm9sKCJDb21saW5rLnRocm93biIpLG10PWU9PnR5cGVvZiBlPT0ib2JqZWN0IiYmZSE9PW51bGx8fHR5cGVvZiBlPT0iZnVuY3Rpb24iLEdyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmVbcHRdLHNlcmlhbGl6ZShlKXtsZXR7cG9ydDE6QSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZ0KGUsQSksW3QsW3RdXX0sZGVzZXJpYWxpemUoZSl7cmV0dXJuIGUuc3RhcnQoKSxxZShlKX19LFRyPXtjYW5IYW5kbGU6ZT0+bXQoZSkmJmZlIGluIGUsc2VyaWFsaXplKHt2YWx1ZTplfSl7bGV0IEE7cmV0dXJuIGUgaW5zdGFuY2VvZiBFcnJvcj9BPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOmUubWVzc2FnZSxuYW1lOmUubmFtZSxzdGFjazplLnN0YWNrfX06QT17aXNFcnJvcjohMSx2YWx1ZTplfSxbQSxbXV19LGRlc2VyaWFsaXplKGUpe3Rocm93IGUuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihlLnZhbHVlLm1lc3NhZ2UpLGUudmFsdWUpOmUudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixHcl0sWyJ0aHJvdyIsVHJdXSk7ZnVuY3Rpb24gSnIoZSxBKXtmb3IobGV0IHQgb2YgZSlpZihBPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KEEpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZ0KGUsQT1nbG9iYWxUaGlzLHQ9WyIqIl0pe0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihvKXtpZighb3x8IW8uZGF0YSlyZXR1cm47aWYoIUpyKHQsby5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke28ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOmksdHlwZTpuLHBhdGg6bX09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sby5kYXRhKSxmPShvLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKHEpLHA7dHJ5e2xldCBhPW0uc2xpY2UoMCwtMSkucmVkdWNlKCh1LEkpPT51W0ldLGUpLHM9bS5yZWR1Y2UoKHUsSSk9PnVbSV0sZSk7c3dpdGNoKG4pe2Nhc2UiR0VUIjpwPXM7YnJlYWs7Y2FzZSJTRVQiOmFbbS5zbGljZSgtMSlbMF1dPXEoby5kYXRhLnZhbHVlKSxwPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOnA9cy5hcHBseShhLGYpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IHU9bmV3IHMoLi4uZik7cD1xcih1KX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOnUscG9ydDI6SX09bmV3IE1lc3NhZ2VDaGFubmVsO2Z0KGUsSSkscD1LZSh1LFt1XSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpwPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goYSl7cD17dmFsdWU6YSxbZmVdOjB9fVByb21pc2UucmVzb2x2ZShwKS5jYXRjaChhPT4oe3ZhbHVlOmEsW2ZlXTowfSkpLnRoZW4oYT0+e2xldFtzLHVdPWRlKGEpO0EucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDppfSksdSksbj09PSJSRUxFQVNFIiYmKEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksY3QoQSksTWUgaW4gZSYmdHlwZW9mIGVbTWVdPT0iZnVuY3Rpb24iJiZlW01lXSgpKX0pLmNhdGNoKGE9PntsZXRbcyx1XT1kZSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2ZlXTowfSk7QS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOml9KSx1KX0pfSksQS5zdGFydCYmQS5zdGFydCgpfWZ1bmN0aW9uIExyKGUpe3JldHVybiBlLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIGN0KGUpe0xyKGUpJiZlLmNsb3NlKCl9ZnVuY3Rpb24gcWUoZSxBKXtyZXR1cm4gSGUoZSxbXSxBKX1mdW5jdGlvbiB1ZShlKXtpZihlKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gQnQoZSl7cmV0dXJuIGooZSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57Y3QoZSl9KX12YXIgY2U9bmV3IFdlYWtNYXAsQmU9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShlPT57bGV0IEE9KGNlLmdldChlKXx8MCktMTtjZS5zZXQoZSxBKSxBPT09MCYmQnQoZSl9KTtmdW5jdGlvbiBNcihlLEEpe2xldCB0PShjZS5nZXQoQSl8fDApKzE7Y2Uuc2V0KEEsdCksQmUmJkJlLnJlZ2lzdGVyKGUsQSxlKX1mdW5jdGlvbiBIcihlKXtCZSYmQmUudW5yZWdpc3RlcihlKX1mdW5jdGlvbiBIZShlLEE9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG89bmV3IFByb3h5KHQse2dldChpLG4pe2lmKHVlKHIpLG49PT1ZZSlyZXR1cm4oKT0+e0hyKG8pLEJ0KGUpLHI9ITB9O2lmKG49PT0idGhlbiIpe2lmKEEubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+b307bGV0IG09aihlLHt0eXBlOiJHRVQiLHBhdGg6QS5tYXAoZj0+Zi50b1N0cmluZygpKX0pLnRoZW4ocSk7cmV0dXJuIG0udGhlbi5iaW5kKG0pfXJldHVybiBIZShlLFsuLi5BLG5dKX0sc2V0KGksbixtKXt1ZShyKTtsZXRbZixwXT1kZShtKTtyZXR1cm4gaihlLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkEsbl0ubWFwKGE9PmEudG9TdHJpbmcoKSksdmFsdWU6Zn0scCkudGhlbihxKX0sYXBwbHkoaSxuLG0pe3VlKHIpO2xldCBmPUFbQS5sZW5ndGgtMV07aWYoZj09PXhyKXJldHVybiBqKGUse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4ocSk7aWYoZj09PSJiaW5kIilyZXR1cm4gSGUoZSxBLnNsaWNlKDAsLTEpKTtsZXRbcCxhXT1sdChtKTtyZXR1cm4gaihlLHt0eXBlOiJBUFBMWSIscGF0aDpBLm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpwfSxhKS50aGVuKHEpfSxjb25zdHJ1Y3QoaSxuKXt1ZShyKTtsZXRbbSxmXT1sdChuKTtyZXR1cm4gaihlLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6QS5tYXAocD0+cC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bX0sZikudGhlbihxKX19KTtyZXR1cm4gTXIobyxlKSxvfWZ1bmN0aW9uIFlyKGUpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLGUpfWZ1bmN0aW9uIGx0KGUpe2xldCBBPWUubWFwKGRlKTtyZXR1cm5bQS5tYXAodD0+dFswXSksWXIoQS5tYXAodD0+dFsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gS2UoZSxBKXtyZXR1cm4gZHQuc2V0KGUsQSksZX1mdW5jdGlvbiBxcihlKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLHtbcHRdOiEwfSl9ZnVuY3Rpb24gZGUoZSl7Zm9yKGxldFtBLHRdb2YgdXQpaWYodC5jYW5IYW5kbGUoZSkpe2xldFtyLG9dPXQuc2VyaWFsaXplKGUpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpBLHZhbHVlOnJ9LG9dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTplfSxkdC5nZXQoZSl8fFtdXX1mdW5jdGlvbiBxKGUpe3N3aXRjaChlLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChlLm5hbWUpLmRlc2VyaWFsaXplKGUudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gZS52YWx1ZX19ZnVuY3Rpb24gaihlLEEsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbz1LcigpO2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gaShuKXshbi5kYXRhfHwhbi5kYXRhLmlkfHxuLmRhdGEuaWQhPT1vfHwoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixpKSxyKG4uZGF0YSkpfSksZS5zdGFydCYmZS5zdGFydCgpLGUucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6b30sQSksdCl9KX1mdW5jdGlvbiBLcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gcmUoZSxBKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseShBLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpqcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6emV9PU9iamVjdCxFZT0oZT0+QT0+e2xldCB0PWpyLmNhbGwoQSk7cmV0dXJuIGVbdF18fChlW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSx4PWU9PihlPWUudG9Mb3dlckNhc2UoKSxBPT5FZShBKT09PWUpLHllPWU9PkE9PnR5cGVvZiBBPT09ZSx7aXNBcnJheTp2fT1BcnJheSxpZT15ZSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gdnIoZSl7cmV0dXJuIGUhPT1udWxsJiYhaWUoZSkmJmUuY29uc3RydWN0b3IhPT1udWxsJiYhaWUoZS5jb25zdHJ1Y3RvcikmJlMoZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJmUuY29uc3RydWN0b3IuaXNCdWZmZXIoZSl9dmFyIFF0PXgoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24genIoZSl7bGV0IEE7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9BPUFycmF5QnVmZmVyLmlzVmlldyhlKTpBPWUmJmUuYnVmZmVyJiZRdChlLmJ1ZmZlciksQX12YXIgX3I9eWUoInN0cmluZyIpLFM9eWUoImZ1bmN0aW9uIiksaHQ9eWUoIm51bWJlciIpLFFlPWU9PmUhPT1udWxsJiZ0eXBlb2YgZT09Im9iamVjdCIsVnI9ZT0+ZT09PSEwfHxlPT09ITEsQ2U9ZT0+e2lmKEVlKGUpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IEE9emUoZSk7cmV0dXJuKEE9PT1udWxsfHxBPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKEEpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIGUpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBlKX0sWnI9eCgiRGF0ZSIpLFhyPXgoIkZpbGUiKSwkcj14KCJCbG9iIiksZWk9eCgiRmlsZUxpc3QiKSxBaT1lPT5RZShlKSYmUyhlLnBpcGUpLHRpPWU9PntsZXQgQTtyZXR1cm4gZSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmZSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxTKGUuYXBwZW5kKSYmKChBPUVlKGUpKT09PSJmb3JtZGF0YSJ8fEE9PT0ib2JqZWN0IiYmUyhlLnRvU3RyaW5nKSYmZS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxyaT14KCJVUkxTZWFyY2hQYXJhbXMiKSxpaT1lPT5lLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb2UoZSxBLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihlPT09bnVsbHx8dHlwZW9mIGU+InUiKXJldHVybjtsZXQgcixvO2lmKHR5cGVvZiBlIT0ib2JqZWN0IiYmKGU9W2VdKSx2KGUpKWZvcihyPTAsbz1lLmxlbmd0aDtyPG87cisrKUEuY2FsbChudWxsLGVbcl0scixlKTtlbHNle2xldCBpPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSk6T2JqZWN0LmtleXMoZSksbj1pLmxlbmd0aCxtO2ZvcihyPTA7cjxuO3IrKyltPWlbcl0sQS5jYWxsKG51bGwsZVttXSxtLGUpfX1mdW5jdGlvbiB3dChlLEEpe0E9QS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKGUpLHI9dC5sZW5ndGgsbztmb3IoO3ItLSA+MDspaWYobz10W3JdLEE9PT1vLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG87cmV0dXJuIG51bGx9dmFyIFJ0PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsa3Q9ZT0+IWllKGUpJiZlIT09UnQ7ZnVuY3Rpb24gdmUoKXtsZXR7Y2FzZWxlc3M6ZX09a3QodGhpcykmJnRoaXN8fHt9LEE9e30sdD0ocixvKT0+e2xldCBpPWUmJnd0KEEsbyl8fG87Q2UoQVtpXSkmJkNlKHIpP0FbaV09dmUoQVtpXSxyKTpDZShyKT9BW2ldPXZlKHt9LHIpOnYocik/QVtpXT1yLnNsaWNlKCk6QVtpXT1yfTtmb3IobGV0IHI9MCxvPWFyZ3VtZW50cy5sZW5ndGg7cjxvO3IrKylhcmd1bWVudHNbcl0mJm9lKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gQX12YXIgb2k9KGUsQSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KG9lKEEsKG8saSk9Pnt0JiZTKG8pP2VbaV09cmUobyx0KTplW2ldPW99LHthbGxPd25LZXlzOnJ9KSxlKSxhaT1lPT4oZS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihlPWUuc2xpY2UoMSkpLGUpLG5pPShlLEEsdCxyKT0+e2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoQS5wcm90b3R5cGUsciksZS5wcm90b3R5cGUuY29uc3RydWN0b3I9ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic3VwZXIiLHt2YWx1ZTpBLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oZS5wcm90b3R5cGUsdCl9LHNpPShlLEEsdCxyKT0+e2xldCBvLGksbixtPXt9O2lmKEE9QXx8e30sZT09bnVsbClyZXR1cm4gQTtkb3tmb3Iobz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSxpPW8ubGVuZ3RoO2ktLSA+MDspbj1vW2ldLCghcnx8cihuLGUsQSkpJiYhbVtuXSYmKEFbbl09ZVtuXSxtW25dPSEwKTtlPXQhPT0hMSYmemUoZSl9d2hpbGUoZSYmKCF0fHx0KGUsQSkpJiZlIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEF9LElpPShlLEEsdCk9PntlPVN0cmluZyhlKSwodD09PXZvaWQgMHx8dD5lLmxlbmd0aCkmJih0PWUubGVuZ3RoKSx0LT1BLmxlbmd0aDtsZXQgcj1lLmluZGV4T2YoQSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sZ2k9ZT0+e2lmKCFlKXJldHVybiBudWxsO2lmKHYoZSkpcmV0dXJuIGU7bGV0IEE9ZS5sZW5ndGg7aWYoIWh0KEEpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShBKTtmb3IoO0EtLSA+MDspdFtBXT1lW0FdO3JldHVybiB0fSxsaT0oZT0+QT0+ZSYmQSBpbnN0YW5jZW9mIGUpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmemUoVWludDhBcnJheSkpLHBpPShlLEEpPT57bGV0IHI9KGUmJmVbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChlKSxvO2Zvcig7KG89ci5uZXh0KCkpJiYhby5kb25lOyl7bGV0IGk9by52YWx1ZTtBLmNhbGwoZSxpWzBdLGlbMV0pfX0sbWk9KGUsQSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9ZS5leGVjKEEpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sdWk9eCgiSFRNTEZvcm1FbGVtZW50IiksZmk9ZT0+ZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG8pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrb30pLEV0PSgoe2hhc093blByb3BlcnR5OmV9KT0+KEEsdCk9PmUuY2FsbChBLHQpKShPYmplY3QucHJvdG90eXBlKSxjaT14KCJSZWdFeHAiKSxidD0oZSxBKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGUpLHI9e307b2UodCwobyxpKT0+e2xldCBuOyhuPUEobyxpLGUpKSE9PSExJiYocltpXT1ufHxvKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUscil9LEJpPWU9PntidChlLChBLHQpPT57aWYoUyhlKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9ZVt0XTtpZihTKHIpKXtpZihBLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIEEpe0Eud3JpdGFibGU9ITE7cmV0dXJufUEuc2V0fHwoQS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LGRpPShlLEEpPT57bGV0IHQ9e30scj1vPT57by5mb3JFYWNoKGk9Pnt0W2ldPSEwfSl9O3JldHVybiB2KGUpP3IoZSk6cihTdHJpbmcoZSkuc3BsaXQoQSkpLHR9LENpPSgpPT57fSxFaT0oZSxBKT0+KGU9K2UsTnVtYmVyLmlzRmluaXRlKGUpP2U6QSksamU9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix5dD0iMDEyMzQ1Njc4OSIsRHQ9e0RJR0lUOnl0LEFMUEhBOmplLEFMUEhBX0RJR0lUOmplK2plLnRvVXBwZXJDYXNlKCkreXR9LHlpPShlPTE2LEE9RHQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1BO2Zvcig7ZS0tOyl0Kz1BW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gUWkoZSl7cmV0dXJuISEoZSYmUyhlLmFwcGVuZCkmJmVbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJmVbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIGhpPWU9PntsZXQgQT1uZXcgQXJyYXkoMTApLHQ9KHIsbyk9PntpZihRZShyKSl7aWYoQS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe0Fbb109cjtsZXQgaT12KHIpP1tdOnt9O3JldHVybiBvZShyLChuLG0pPT57bGV0IGY9dChuLG8rMSk7IWllKGYpJiYoaVttXT1mKX0pLEFbb109dm9pZCAwLGl9fXJldHVybiByfTtyZXR1cm4gdChlLDApfSx3aT14KCJBc3luY0Z1bmN0aW9uIiksUmk9ZT0+ZSYmKFFlKGUpfHxTKGUpKSYmUyhlLnRoZW4pJiZTKGUuY2F0Y2gpLGM9e2lzQXJyYXk6dixpc0FycmF5QnVmZmVyOlF0LGlzQnVmZmVyOnZyLGlzRm9ybURhdGE6dGksaXNBcnJheUJ1ZmZlclZpZXc6enIsaXNTdHJpbmc6X3IsaXNOdW1iZXI6aHQsaXNCb29sZWFuOlZyLGlzT2JqZWN0OlFlLGlzUGxhaW5PYmplY3Q6Q2UsaXNVbmRlZmluZWQ6aWUsaXNEYXRlOlpyLGlzRmlsZTpYcixpc0Jsb2I6JHIsaXNSZWdFeHA6Y2ksaXNGdW5jdGlvbjpTLGlzU3RyZWFtOkFpLGlzVVJMU2VhcmNoUGFyYW1zOnJpLGlzVHlwZWRBcnJheTpsaSxpc0ZpbGVMaXN0OmVpLGZvckVhY2g6b2UsbWVyZ2U6dmUsZXh0ZW5kOm9pLHRyaW06aWksc3RyaXBCT006YWksaW5oZXJpdHM6bmksdG9GbGF0T2JqZWN0OnNpLGtpbmRPZjpFZSxraW5kT2ZUZXN0OngsZW5kc1dpdGg6SWksdG9BcnJheTpnaSxmb3JFYWNoRW50cnk6cGksbWF0Y2hBbGw6bWksaXNIVE1MRm9ybTp1aSxoYXNPd25Qcm9wZXJ0eTpFdCxoYXNPd25Qcm9wOkV0LHJlZHVjZURlc2NyaXB0b3JzOmJ0LGZyZWV6ZU1ldGhvZHM6QmksdG9PYmplY3RTZXQ6ZGksdG9DYW1lbENhc2U6Zmksbm9vcDpDaSx0b0Zpbml0ZU51bWJlcjpFaSxmaW5kS2V5Ond0LGdsb2JhbDpSdCxpc0NvbnRleHREZWZpbmVkOmt0LEFMUEhBQkVUOkR0LGdlbmVyYXRlU3RyaW5nOnlpLGlzU3BlY0NvbXBsaWFudEZvcm06UWksdG9KU09OT2JqZWN0OmhpLGlzQXN5bmNGbjp3aSxpc1RoZW5hYmxlOlJpfTtmdW5jdGlvbiB6KGUsQSx0LHIsbyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPWUsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixBJiYodGhpcy5jb2RlPUEpLHQmJih0aGlzLmNvbmZpZz10KSxyJiYodGhpcy5yZXF1ZXN0PXIpLG8mJih0aGlzLnJlc3BvbnNlPW8pfWMuaW5oZXJpdHMoeixFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIFd0PXoucHJvdG90eXBlLEZ0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goZT0+e0Z0W2VdPXt2YWx1ZTplfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHosRnQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShXdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTt6LmZyb209KGUsQSx0LHIsbyxpKT0+e2xldCBuPU9iamVjdC5jcmVhdGUoV3QpO3JldHVybiBjLnRvRmxhdE9iamVjdChlLG4sZnVuY3Rpb24oZil7cmV0dXJuIGYhPT1FcnJvci5wcm90b3R5cGV9LG09Pm0hPT0iaXNBeGlvc0Vycm9yIiksei5jYWxsKG4sZS5tZXNzYWdlLEEsdCxyLG8pLG4uY2F1c2U9ZSxuLm5hbWU9ZS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obixpKSxufTt2YXIgdz16O3ZhciBoZT1udWxsO2Z1bmN0aW9uIF9lKGUpe3JldHVybiBjLmlzUGxhaW5PYmplY3QoZSl8fGMuaXNBcnJheShlKX1mdW5jdGlvbiBOdChlKXtyZXR1cm4gYy5lbmRzV2l0aChlLCJbXSIpP2Uuc2xpY2UoMCwtMik6ZX1mdW5jdGlvbiBVdChlLEEsdCl7cmV0dXJuIGU/ZS5jb25jYXQoQSkubWFwKGZ1bmN0aW9uKG8saSl7cmV0dXJuIG89TnQobyksIXQmJmk/IlsiK28rIl0iOm99KS5qb2luKHQ/Ii4iOiIiKTpBfWZ1bmN0aW9uIGtpKGUpe3JldHVybiBjLmlzQXJyYXkoZSkmJiFlLnNvbWUoX2UpfXZhciBiaT1jLnRvRmxhdE9iamVjdChjLHt9LG51bGwsZnVuY3Rpb24oQSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEEpfSk7ZnVuY3Rpb24gRGkoZSxBLHQpe2lmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0E9QXx8bmV3KGhlfHxGb3JtRGF0YSksdD1jLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oQixRKXtyZXR1cm4hYy5pc1VuZGVmaW5lZChRW0JdKX0pO2xldCByPXQubWV0YVRva2VucyxvPXQudmlzaXRvcnx8YSxpPXQuZG90cyxuPXQuaW5kZXhlcyxmPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmMuaXNTcGVjQ29tcGxpYW50Rm9ybShBKTtpZighYy5pc0Z1bmN0aW9uKG8pKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gcChsKXtpZihsPT09bnVsbClyZXR1cm4iIjtpZihjLmlzRGF0ZShsKSlyZXR1cm4gbC50b0lTT1N0cmluZygpO2lmKCFmJiZjLmlzQmxvYihsKSl0aHJvdyBuZXcgdygiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gYy5pc0FycmF5QnVmZmVyKGwpfHxjLmlzVHlwZWRBcnJheShsKT9mJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbbF0pOkJ1ZmZlci5mcm9tKGwpOmx9ZnVuY3Rpb24gYShsLEIsUSl7bGV0IFI9bDtpZihsJiYhUSYmdHlwZW9mIGw9PSJvYmplY3QiKXtpZihjLmVuZHNXaXRoKEIsInt9IikpQj1yP0I6Qi5zbGljZSgwLC0yKSxsPUpTT04uc3RyaW5naWZ5KGwpO2Vsc2UgaWYoYy5pc0FycmF5KGwpJiZraShsKXx8KGMuaXNGaWxlTGlzdChsKXx8Yy5lbmRzV2l0aChCLCJbXSIpKSYmKFI9Yy50b0FycmF5KGwpKSlyZXR1cm4gQj1OdChCKSxSLmZvckVhY2goZnVuY3Rpb24oUCxRcil7IShjLmlzVW5kZWZpbmVkKFApfHxQPT09bnVsbCkmJkEuYXBwZW5kKG49PT0hMD9VdChbQl0sUXIsaSk6bj09PW51bGw/QjpCKyJbXSIscChQKSl9KSwhMX1yZXR1cm4gX2UobCk/ITA6KEEuYXBwZW5kKFV0KFEsQixpKSxwKGwpKSwhMSl9bGV0IHM9W10sdT1PYmplY3QuYXNzaWduKGJpLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpwLGlzVmlzaXRhYmxlOl9lfSk7ZnVuY3Rpb24gSShsLEIpe2lmKCFjLmlzVW5kZWZpbmVkKGwpKXtpZihzLmluZGV4T2YobCkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQi5qb2luKCIuIikpO3MucHVzaChsKSxjLmZvckVhY2gobCxmdW5jdGlvbihSLE8peyghKGMuaXNVbmRlZmluZWQoUil8fFI9PT1udWxsKSYmby5jYWxsKEEsUixjLmlzU3RyaW5nKE8pP08udHJpbSgpOk8sQix1KSk9PT0hMCYmSShSLEI/Qi5jb25jYXQoTyk6W09dKX0pLHMucG9wKCl9fWlmKCFjLmlzT2JqZWN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gSShlKSxBfXZhciBMPURpO2Z1bmN0aW9uIFN0KGUpe2xldCBBPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBBW3JdfSl9ZnVuY3Rpb24gT3QoZSxBKXt0aGlzLl9wYWlycz1bXSxlJiZMKGUsdGhpcyxBKX12YXIgUHQ9T3QucHJvdG90eXBlO1B0LmFwcGVuZD1mdW5jdGlvbihBLHQpe3RoaXMuX3BhaXJzLnB1c2goW0EsdF0pfTtQdC50b1N0cmluZz1mdW5jdGlvbihBKXtsZXQgdD1BP2Z1bmN0aW9uKHIpe3JldHVybiBBLmNhbGwodGhpcyxyLFN0KX06U3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihvKXtyZXR1cm4gdChvWzBdKSsiPSIrdChvWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHdlPU90O2Z1bmN0aW9uIFdpKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGFlKGUsQSx0KXtpZighQSlyZXR1cm4gZTtsZXQgcj10JiZ0LmVuY29kZXx8V2ksbz10JiZ0LnNlcmlhbGl6ZSxpO2lmKG8/aT1vKEEsdCk6aT1jLmlzVVJMU2VhcmNoUGFyYW1zKEEpP0EudG9TdHJpbmcoKTpuZXcgd2UoQSx0KS50b1N0cmluZyhyKSxpKXtsZXQgbj1lLmluZGV4T2YoIiMiKTtuIT09LTEmJihlPWUuc2xpY2UoMCxuKSksZSs9KGUuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikraX1yZXR1cm4gZX12YXIgVmU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShBLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOkEscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChBKXt0aGlzLmhhbmRsZXJzW0FdJiYodGhpcy5oYW5kbGVyc1tBXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKEEpe2MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZBKHIpfSl9fSxaZT1WZTt2YXIgUmU9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciB4dD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6d2U7dmFyIEd0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgVHQ9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgSnQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6eHQsRm9ybURhdGE6R3QsQmxvYjpUdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBYZT17fTt3cihYZSx7aGFzQnJvd3NlckVudjooKT0+THQsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5GaSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PlVpfSk7dmFyIEx0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLEZpPShlPT5MdCYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihlKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLFVpPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIjt2YXIgVz17Li4uWGUsLi4uSnR9O2Z1bmN0aW9uICRlKGUsQSl7cmV0dXJuIEwoZSxuZXcgVy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKHQscixvLGkpe3JldHVybiBXLmlzTm9kZSYmYy5pc0J1ZmZlcih0KT8odGhpcy5hcHBlbmQocix0LnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOmkuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sQSkpfWZ1bmN0aW9uIE5pKGUpe3JldHVybiBjLm1hdGNoQWxsKC9cdyt8XFsoXHcqKV0vZyxlKS5tYXAoQT0+QVswXT09PSJbXSI/IiI6QVsxXXx8QVswXSl9ZnVuY3Rpb24gU2koZSl7bGV0IEE9e30sdD1PYmplY3Qua2V5cyhlKSxyLG89dC5sZW5ndGgsaTtmb3Iocj0wO3I8bztyKyspaT10W3JdLEFbaV09ZVtpXTtyZXR1cm4gQX1mdW5jdGlvbiBPaShlKXtmdW5jdGlvbiBBKHQscixvLGkpe2xldCBuPXRbaSsrXTtpZihuPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IG09TnVtYmVyLmlzRmluaXRlKCtuKSxmPWk+PXQubGVuZ3RoO3JldHVybiBuPSFuJiZjLmlzQXJyYXkobyk/by5sZW5ndGg6bixmPyhjLmhhc093blByb3AobyxuKT9vW25dPVtvW25dLHJdOm9bbl09ciwhbSk6KCghb1tuXXx8IWMuaXNPYmplY3Qob1tuXSkpJiYob1tuXT1bXSksQSh0LHIsb1tuXSxpKSYmYy5pc0FycmF5KG9bbl0pJiYob1tuXT1TaShvW25dKSksIW0pfWlmKGMuaXNGb3JtRGF0YShlKSYmYy5pc0Z1bmN0aW9uKGUuZW50cmllcykpe2xldCB0PXt9O3JldHVybiBjLmZvckVhY2hFbnRyeShlLChyLG8pPT57QShOaShyKSxvLHQsMCl9KSx0fXJldHVybiBudWxsfXZhciBrZT1PaTtmdW5jdGlvbiBQaShlLEEsdCl7aWYoYy5pc1N0cmluZyhlKSl0cnl7cmV0dXJuKEF8fEpTT04ucGFyc2UpKGUpLGMudHJpbShlKX1jYXRjaChyKXtpZihyLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IHJ9cmV0dXJuKHR8fEpTT04uc3RyaW5naWZ5KShlKX12YXIgZUE9e3RyYW5zaXRpb25hbDpSZSxhZGFwdGVyOlsieGhyIiwiaHR0cCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKEEsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Yy5pc09iamVjdChBKTtpZihpJiZjLmlzSFRNTEZvcm0oQSkmJihBPW5ldyBGb3JtRGF0YShBKSksYy5pc0Zvcm1EYXRhKEEpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KGtlKEEpKTpBO2lmKGMuaXNBcnJheUJ1ZmZlcihBKXx8Yy5pc0J1ZmZlcihBKXx8Yy5pc1N0cmVhbShBKXx8Yy5pc0ZpbGUoQSl8fGMuaXNCbG9iKEEpKXJldHVybiBBO2lmKGMuaXNBcnJheUJ1ZmZlclZpZXcoQSkpcmV0dXJuIEEuYnVmZmVyO2lmKGMuaXNVUkxTZWFyY2hQYXJhbXMoQSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksQS50b1N0cmluZygpO2xldCBtO2lmKGkpe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuICRlKEEsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigobT1jLmlzRmlsZUxpc3QoQSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGY9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBMKG0/eyJmaWxlc1tdIjpBfTpBLGYmJm5ldyBmLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gaXx8bz8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLFBpKEEpKTpBfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKEEpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxlQS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG89dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoQSYmYy5pc1N0cmluZyhBKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bykpe2xldCBuPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm87dHJ5e3JldHVybiBKU09OLnBhcnNlKEEpfWNhdGNoKG0pe2lmKG4pdGhyb3cgbS5uYW1lPT09IlN5bnRheEVycm9yIj93LmZyb20obSx3LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOm19fXJldHVybiBBfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpXLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpXLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oQSl7cmV0dXJuIEE+PTIwMCYmQTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sZT0+e2VBLmhlYWRlcnNbZV09e319KTt2YXIgXz1lQTt2YXIgeGk9Yy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxNdD1lPT57bGV0IEE9e30sdCxyLG87cmV0dXJuIGUmJmUuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe289bi5pbmRleE9mKCI6IiksdD1uLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9bi5zdWJzdHJpbmcobysxKS50cmltKCksISghdHx8QVt0XSYmeGlbdF0pJiYodD09PSJzZXQtY29va2llIj9BW3RdP0FbdF0ucHVzaChyKTpBW3RdPVtyXTpBW3RdPUFbdF0/QVt0XSsiLCAiK3I6cil9KSxBfTt2YXIgSHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBuZShlKXtyZXR1cm4gZSYmU3RyaW5nKGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGJlKGUpe3JldHVybiBlPT09ITF8fGU9PW51bGw/ZTpjLmlzQXJyYXkoZSk/ZS5tYXAoYmUpOlN0cmluZyhlKX1mdW5jdGlvbiBHaShlKXtsZXQgQT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoZSk7KUFbclsxXV09clsyXTtyZXR1cm4gQX12YXIgVGk9ZT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSk7ZnVuY3Rpb24gQUEoZSxBLHQscixvKXtpZihjLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLEEsdCk7aWYobyYmKEE9dCksISFjLmlzU3RyaW5nKEEpKXtpZihjLmlzU3RyaW5nKHIpKXJldHVybiBBLmluZGV4T2YocikhPT0tMTtpZihjLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoQSl9fWZ1bmN0aW9uIEppKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKEEsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIExpKGUsQSl7bGV0IHQ9Yy50b0NhbWVsQ2FzZSgiICIrQSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG8saSxuKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsQSxvLGksbil9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFY9Y2xhc3N7Y29uc3RydWN0b3IoQSl7QSYmdGhpcy5zZXQoQSl9c2V0KEEsdCxyKXtsZXQgbz10aGlzO2Z1bmN0aW9uIGkobSxmLHApe2xldCBhPW5lKGYpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1jLmZpbmRLZXkobyxhKTsoIXN8fG9bc109PT12b2lkIDB8fHA9PT0hMHx8cD09PXZvaWQgMCYmb1tzXSE9PSExKSYmKG9bc3x8Zl09YmUobSkpfWxldCBuPShtLGYpPT5jLmZvckVhY2gobSwocCxhKT0+aShwLGEsZikpO3JldHVybiBjLmlzUGxhaW5PYmplY3QoQSl8fEEgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP24oQSx0KTpjLmlzU3RyaW5nKEEpJiYoQT1BLnRyaW0oKSkmJiFUaShBKT9uKE10KEEpLHQpOkEhPW51bGwmJmkodCxBLHIpLHRoaXN9Z2V0KEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtpZihyKXtsZXQgbz10aGlzW3JdO2lmKCF0KXJldHVybiBvO2lmKHQ9PT0hMClyZXR1cm4gR2kobyk7aWYoYy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxvLHIpO2lmKGMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhvKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKEEsdCl7aWYoQT1uZShBKSxBKXtsZXQgcj1jLmZpbmRLZXkodGhpcyxBKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fEFBKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKEEsdCl7bGV0IHI9dGhpcyxvPSExO2Z1bmN0aW9uIGkobil7aWYobj1uZShuKSxuKXtsZXQgbT1jLmZpbmRLZXkocixuKTttJiYoIXR8fEFBKHIsclttXSxtLHQpKSYmKGRlbGV0ZSByW21dLG89ITApfX1yZXR1cm4gYy5pc0FycmF5KEEpP0EuZm9yRWFjaChpKTppKEEpLG99Y2xlYXIoQSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxvPSExO2Zvcig7ci0tOyl7bGV0IGk9dFtyXTsoIUF8fEFBKHRoaXMsdGhpc1tpXSxpLEEsITApKSYmKGRlbGV0ZSB0aGlzW2ldLG89ITApfXJldHVybiBvfW5vcm1hbGl6ZShBKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChvLGkpPT57bGV0IG49Yy5maW5kS2V5KHIsaSk7aWYobil7dFtuXT1iZShvKSxkZWxldGUgdFtpXTtyZXR1cm59bGV0IG09QT9KaShpKTpTdHJpbmcoaSkudHJpbSgpO20hPT1pJiZkZWxldGUgdFtpXSx0W21dPWJlKG8pLHJbbV09ITB9KSx0aGlzfWNvbmNhdCguLi5BKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5BKX10b0pTT04oQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gYy5mb3JFYWNoKHRoaXMsKHIsbyk9PntyIT1udWxsJiZyIT09ITEmJih0W29dPUEmJmMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtBLHRdKT0+QSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKEEpe3JldHVybiBBIGluc3RhbmNlb2YgdGhpcz9BOm5ldyB0aGlzKEEpfXN0YXRpYyBjb25jYXQoQSwuLi50KXtsZXQgcj1uZXcgdGhpcyhBKTtyZXR1cm4gdC5mb3JFYWNoKG89PnIuc2V0KG8pKSxyfXN0YXRpYyBhY2Nlc3NvcihBKXtsZXQgcj0odGhpc1tIdF09dGhpc1tIdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxvPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIGkobil7bGV0IG09bmUobik7clttXXx8KExpKG8sbiksclttXT0hMCl9cmV0dXJuIGMuaXNBcnJheShBKT9BLmZvckVhY2goaSk6aShBKSx0aGlzfX07Vi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7Yy5yZWR1Y2VEZXNjcmlwdG9ycyhWLnByb3RvdHlwZSwoe3ZhbHVlOmV9LEEpPT57bGV0IHQ9QVswXS50b1VwcGVyQ2FzZSgpK0Euc2xpY2UoMSk7cmV0dXJue2dldDooKT0+ZSxzZXQocil7dGhpc1t0XT1yfX19KTtjLmZyZWV6ZU1ldGhvZHMoVik7dmFyIEY9VjtmdW5jdGlvbiBzZShlLEEpe2xldCB0PXRoaXN8fF8scj1BfHx0LG89Ri5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIGMuZm9yRWFjaChlLGZ1bmN0aW9uKG0pe2k9bS5jYWxsKHQsaSxvLm5vcm1hbGl6ZSgpLEE/QS5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksaX1mdW5jdGlvbiBJZShlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIFl0KGUsQSx0KXt3LmNhbGwodGhpcyxlPz8iY2FuY2VsZWQiLHcuRVJSX0NBTkNFTEVELEEsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1jLmluaGVyaXRzKFl0LHcse19fQ0FOQ0VMX186ITB9KTt2YXIgTT1ZdDtmdW5jdGlvbiB0QShlLEEsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/ZSh0KTpBKG5ldyB3KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW3cuRVJSX0JBRF9SRVFVRVNULHcuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9dmFyIHF0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShlLEEsdCxyLG8saSl7bGV0IG49W2UrIj0iK2VuY29kZVVSSUNvbXBvbmVudChBKV07Yy5pc051bWJlcih0KSYmbi5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksYy5pc1N0cmluZyhyKSYmbi5wdXNoKCJwYXRoPSIrciksYy5pc1N0cmluZyhvKSYmbi5wdXNoKCJkb21haW49IitvKSxpPT09ITAmJm4ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW4uam9pbigiOyAiKX0scmVhZChlKXtsZXQgQT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrZSsiKT0oW147XSopIikpO3JldHVybiBBP2RlY29kZVVSSUNvbXBvbmVudChBWzNdKTpudWxsfSxyZW1vdmUoZSl7dGhpcy53cml0ZShlLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHJBKGUpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoZSl9ZnVuY3Rpb24gaUEoZSxBKXtyZXR1cm4gQT9lLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitBLnJlcGxhY2UoL15cLysvLCIiKTplfWZ1bmN0aW9uIGdlKGUsQSl7cmV0dXJuIGUmJiFyQShBKT9pQShlLEEpOkF9dmFyIEt0PVcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IEE9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG8oaSl7bGV0IG49aTtyZXR1cm4gQSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixuKSxuPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1vKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihuKXtsZXQgbT1jLmlzU3RyaW5nKG4pP28obik6bjtyZXR1cm4gbS5wcm90b2NvbD09PXIucHJvdG9jb2wmJm0uaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7ZnVuY3Rpb24gb0EoZSl7bGV0IEE9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIEEmJkFbMV18fCIifWZ1bmN0aW9uIE1pKGUsQSl7ZT1lfHwxMDtsZXQgdD1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz0wLGk9MCxuO3JldHVybiBBPUEhPT12b2lkIDA/QToxZTMsZnVuY3Rpb24oZil7bGV0IHA9RGF0ZS5ub3coKSxhPXJbaV07bnx8KG49cCksdFtvXT1mLHJbb109cDtsZXQgcz1pLHU9MDtmb3IoO3MhPT1vOyl1Kz10W3MrK10scz1zJWU7aWYobz0obysxKSVlLG89PT1pJiYoaT0oaSsxKSVlKSxwLW48QSlyZXR1cm47bGV0IEk9YSYmcC1hO3JldHVybiBJP01hdGgucm91bmQodSoxZTMvSSk6dm9pZCAwfX12YXIganQ9TWk7ZnVuY3Rpb24gdnQoZSxBKXtsZXQgdD0wLHI9anQoNTAsMjUwKTtyZXR1cm4gbz0+e2xldCBpPW8ubG9hZGVkLG49by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLG09aS10LGY9cihtKSxwPWk8PW47dD1pO2xldCBhPXtsb2FkZWQ6aSx0b3RhbDpuLHByb2dyZXNzOm4/aS9uOnZvaWQgMCxieXRlczptLHJhdGU6Znx8dm9pZCAwLGVzdGltYXRlZDpmJiZuJiZwPyhuLWkpL2Y6dm9pZCAwLGV2ZW50Om99O2FbQT8iZG93bmxvYWQiOiJ1cGxvYWQiXT0hMCxlKGEpfX12YXIgSGk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1IaSYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHQscil7bGV0IG89ZS5kYXRhLGk9Ri5mcm9tKGUuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpuLHdpdGhYU1JGVG9rZW46bX09ZSxmO2Z1bmN0aW9uIHAoKXtlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiZlLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsZil9bGV0IGE7aWYoYy5pc0Zvcm1EYXRhKG8pKXtpZihXLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Vy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSghMSk7ZWxzZSBpZigoYT1pLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtCLC4uLlFdPWE/YS5zcGxpdCgiOyIpLm1hcChSPT5SLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2kuc2V0Q29udGVudFR5cGUoW0J8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5RXS5qb2luKCI7ICIpKX19bGV0IHM9bmV3IFhNTEh0dHBSZXF1ZXN0O2lmKGUuYXV0aCl7bGV0IEI9ZS5hdXRoLnVzZXJuYW1lfHwiIixRPWUuYXV0aC5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZS5hdXRoLnBhc3N3b3JkKSk6IiI7aS5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoQisiOiIrUSkpfWxldCB1PWdlKGUuYmFzZVVSTCxlLnVybCk7cy5vcGVuKGUubWV0aG9kLnRvVXBwZXJDYXNlKCksYWUodSxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpLCEwKSxzLnRpbWVvdXQ9ZS50aW1lb3V0O2Z1bmN0aW9uIEkoKXtpZighcylyZXR1cm47bGV0IEI9Ri5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gcyYmcy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksUj17ZGF0YTohbnx8bj09PSJ0ZXh0Inx8bj09PSJqc29uIj9zLnJlc3BvbnNlVGV4dDpzLnJlc3BvbnNlLHN0YXR1czpzLnN0YXR1cyxzdGF0dXNUZXh0OnMuc3RhdHVzVGV4dCxoZWFkZXJzOkIsY29uZmlnOmUscmVxdWVzdDpzfTt0QShmdW5jdGlvbihQKXt0KFApLHAoKX0sZnVuY3Rpb24oUCl7cihQKSxwKCl9LFIpLHM9bnVsbH1pZigib25sb2FkZW5kImluIHM/cy5vbmxvYWRlbmQ9STpzLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFzfHxzLnJlYWR5U3RhdGUhPT00fHxzLnN0YXR1cz09PTAmJiEocy5yZXNwb25zZVVSTCYmcy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoSSl9LHMub25hYm9ydD1mdW5jdGlvbigpe3MmJihyKG5ldyB3KCJSZXF1ZXN0IGFib3J0ZWQiLHcuRUNPTk5BQk9SVEVELGUscykpLHM9bnVsbCl9LHMub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IHcoIk5ldHdvcmsgRXJyb3IiLHcuRVJSX05FVFdPUkssZSxzKSkscz1udWxsfSxzLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBRPWUudGltZW91dD8idGltZW91dCBvZiAiK2UudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixSPWUudHJhbnNpdGlvbmFsfHxSZTtlLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihRPWUudGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgdyhRLFIuY2xhcmlmeVRpbWVvdXRFcnJvcj93LkVUSU1FRE9VVDp3LkVDT05OQUJPUlRFRCxlLHMpKSxzPW51bGx9LFcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYobSYmYy5pc0Z1bmN0aW9uKG0pJiYobT1tKGUpKSxtfHxtIT09ITEmJkt0KHUpKSl7bGV0IEI9ZS54c3JmSGVhZGVyTmFtZSYmZS54c3JmQ29va2llTmFtZSYmcXQucmVhZChlLnhzcmZDb29raWVOYW1lKTtCJiZpLnNldChlLnhzcmZIZWFkZXJOYW1lLEIpfW89PT12b2lkIDAmJmkuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gcyYmYy5mb3JFYWNoKGkudG9KU09OKCksZnVuY3Rpb24oUSxSKXtzLnNldFJlcXVlc3RIZWFkZXIoUixRKX0pLGMuaXNVbmRlZmluZWQoZS53aXRoQ3JlZGVudGlhbHMpfHwocy53aXRoQ3JlZGVudGlhbHM9ISFlLndpdGhDcmVkZW50aWFscyksbiYmbiE9PSJqc29uIiYmKHMucmVzcG9uc2VUeXBlPWUucmVzcG9uc2VUeXBlKSx0eXBlb2YgZS5vbkRvd25sb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHZ0KGUub25Eb3dubG9hZFByb2dyZXNzLCEwKSksdHlwZW9mIGUub25VcGxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmcy51cGxvYWQmJnMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix2dChlLm9uVXBsb2FkUHJvZ3Jlc3MpKSwoZS5jYW5jZWxUb2tlbnx8ZS5zaWduYWwpJiYoZj1CPT57cyYmKHIoIUJ8fEIudHlwZT9uZXcgTShudWxsLGUscyk6Qikscy5hYm9ydCgpLHM9bnVsbCl9LGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGYpLGUuc2lnbmFsJiYoZS5zaWduYWwuYWJvcnRlZD9mKCk6ZS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpKSk7bGV0IGw9b0EodSk7aWYobCYmVy5wcm90b2NvbHMuaW5kZXhPZihsKT09PS0xKXtyKG5ldyB3KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2wrIjoiLHcuRVJSX0JBRF9SRVFVRVNULGUpKTtyZXR1cm59cy5zZW5kKG98fG51bGwpfSl9O3ZhciBhQT17aHR0cDpoZSx4aHI6enR9O2MuZm9yRWFjaChhQSwoZSxBKT0+e2lmKGUpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibmFtZSIse3ZhbHVlOkF9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImFkYXB0ZXJOYW1lIix7dmFsdWU6QX0pfX0pO3ZhciBfdD1lPT5gLSAke2V9YCxZaT1lPT5jLmlzRnVuY3Rpb24oZSl8fGU9PT1udWxsfHxlPT09ITEsRGU9e2dldEFkYXB0ZXI6ZT0+e2U9Yy5pc0FycmF5KGUpP2U6W2VdO2xldHtsZW5ndGg6QX09ZSx0LHIsbz17fTtmb3IobGV0IGk9MDtpPEE7aSsrKXt0PWVbaV07bGV0IG47aWYocj10LCFZaSh0KSYmKHI9YUFbKG49U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgdyhgVW5rbm93biBhZGFwdGVyICcke259J2ApO2lmKHIpYnJlYWs7b1tufHwiIyIraV09cn1pZighcil7bGV0IGk9T2JqZWN0LmVudHJpZXMobykubWFwKChbbSxmXSk9PmBhZGFwdGVyICR7bX0gYCsoZj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG49QT9pLmxlbmd0aD4xP2BzaW5jZSA6CmAraS5tYXAoX3QpLmpvaW4oYApgKToiICIrX3QoaVswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgdygiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK24sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczphQX07ZnVuY3Rpb24gbkEoZSl7aWYoZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksZS5zaWduYWwmJmUuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IE0obnVsbCxlKX1mdW5jdGlvbiBXZShlKXtyZXR1cm4gbkEoZSksZS5oZWFkZXJzPUYuZnJvbShlLmhlYWRlcnMpLGUuZGF0YT1zZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoZS5tZXRob2QpIT09LTEmJmUuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksRGUuZ2V0QWRhcHRlcihlLmFkYXB0ZXJ8fF8uYWRhcHRlcikoZSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gbkEoZSksci5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1GLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gSWUocil8fChuQShlKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1GLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIFZ0PWU9PmUgaW5zdGFuY2VvZiBGP3suLi5lfTplO2Z1bmN0aW9uIFQoZSxBKXtBPUF8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIocCxhLHMpe3JldHVybiBjLmlzUGxhaW5PYmplY3QocCkmJmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LHAsYSk6Yy5pc1BsYWluT2JqZWN0KGEpP2MubWVyZ2Uoe30sYSk6Yy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG8ocCxhLHMpe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwLHMpfWVsc2UgcmV0dXJuIHIocCxhLHMpfWZ1bmN0aW9uIGkocCxhKXtpZighYy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gbihwLGEpe2lmKGMuaXNVbmRlZmluZWQoYSkpe2lmKCFjLmlzVW5kZWZpbmVkKHApKXJldHVybiByKHZvaWQgMCxwKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBtKHAsYSxzKXtpZihzIGluIEEpcmV0dXJuIHIocCxhKTtpZihzIGluIGUpcmV0dXJuIHIodm9pZCAwLHApfWxldCBmPXt1cmw6aSxtZXRob2Q6aSxkYXRhOmksYmFzZVVSTDpuLHRyYW5zZm9ybVJlcXVlc3Q6bix0cmFuc2Zvcm1SZXNwb25zZTpuLHBhcmFtc1NlcmlhbGl6ZXI6bix0aW1lb3V0Om4sdGltZW91dE1lc3NhZ2U6bix3aXRoQ3JlZGVudGlhbHM6bix3aXRoWFNSRlRva2VuOm4sYWRhcHRlcjpuLHJlc3BvbnNlVHlwZTpuLHhzcmZDb29raWVOYW1lOm4seHNyZkhlYWRlck5hbWU6bixvblVwbG9hZFByb2dyZXNzOm4sb25Eb3dubG9hZFByb2dyZXNzOm4sZGVjb21wcmVzczpuLG1heENvbnRlbnRMZW5ndGg6bixtYXhCb2R5TGVuZ3RoOm4sYmVmb3JlUmVkaXJlY3Q6bix0cmFuc3BvcnQ6bixodHRwQWdlbnQ6bixodHRwc0FnZW50Om4sY2FuY2VsVG9rZW46bixzb2NrZXRQYXRoOm4scmVzcG9uc2VFbmNvZGluZzpuLHZhbGlkYXRlU3RhdHVzOm0saGVhZGVyczoocCxhKT0+byhWdChwKSxWdChhKSwhMCl9O3JldHVybiBjLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxlLEEpKSxmdW5jdGlvbihhKXtsZXQgcz1mW2FdfHxvLHU9cyhlW2FdLEFbYV0sYSk7Yy5pc1VuZGVmaW5lZCh1KSYmcyE9PW18fCh0W2FdPXUpfSksdH12YXIgRmU9IjEuNi44Ijt2YXIgc0E9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChlLEEpPT57c0FbZV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09ZXx8ImEiKyhBPDE/Im4gIjoiICIpK2V9fSk7dmFyIFp0PXt9O3NBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihBLHQscil7ZnVuY3Rpb24gbyhpLG4pe3JldHVybiJbQXhpb3MgdiIrRmUrIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitpKyInIituKyhyPyIuICIrcjoiIil9cmV0dXJuKGksbixtKT0+e2lmKEE9PT0hMSl0aHJvdyBuZXcgdyhvKG4sIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLHcuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYhWnRbbl0mJihadFtuXT0hMCxjb25zb2xlLndhcm4obyhuLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLEE/QShpLG4sbSk6ITB9fTtmdW5jdGlvbiBxaShlLEEsdCl7aWYodHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyB3KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix3LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhlKSxvPXIubGVuZ3RoO2Zvcig7by0tID4wOyl7bGV0IGk9cltvXSxuPUFbaV07aWYobil7bGV0IG09ZVtpXSxmPW09PT12b2lkIDB8fG4obSxpLGUpO2lmKGYhPT0hMCl0aHJvdyBuZXcgdygib3B0aW9uICIraSsiIG11c3QgYmUgIitmLHcuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgdygiVW5rbm93biBvcHRpb24gIitpLHcuRVJSX0JBRF9PUFRJT04pfX12YXIgVWU9e2Fzc2VydE9wdGlvbnM6cWksdmFsaWRhdG9yczpzQX07dmFyIEg9VWUudmFsaWRhdG9ycyxaPWNsYXNze2NvbnN0cnVjdG9yKEEpe3RoaXMuZGVmYXVsdHM9QSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgWmUscmVzcG9uc2U6bmV3IFplfX1hc3luYyByZXF1ZXN0KEEsdCl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KEEsdCl9Y2F0Y2gocil7aWYociBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbztFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvPXt9KTpvPW5ldyBFcnJvcjtsZXQgaT1vLnN0YWNrP28uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfXRocm93IHJ9fV9yZXF1ZXN0KEEsdCl7dHlwZW9mIEE9PSJzdHJpbmciPyh0PXR8fHt9LHQudXJsPUEpOnQ9QXx8e30sdD1UKHRoaXMuZGVmYXVsdHMsdCk7bGV0e3RyYW5zaXRpb25hbDpyLHBhcmFtc1NlcmlhbGl6ZXI6byxoZWFkZXJzOml9PXQ7ciE9PXZvaWQgMCYmVWUuYXNzZXJ0T3B0aW9ucyhyLHtzaWxlbnRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOkgudHJhbnNpdGlvbmFsKEguYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pfSwhMSksbyE9bnVsbCYmKGMuaXNGdW5jdGlvbihvKT90LnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpvfTpVZS5hc3NlcnRPcHRpb25zKG8se2VuY29kZTpILmZ1bmN0aW9uLHNlcmlhbGl6ZTpILmZ1bmN0aW9ufSwhMCkpLHQubWV0aG9kPSh0Lm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBuPWkmJmMubWVyZ2UoaS5jb21tb24saVt0Lm1ldGhvZF0pO2kmJmMuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxsPT57ZGVsZXRlIGlbbF19KSx0LmhlYWRlcnM9Ri5jb25jYXQobixpKTtsZXQgbT1bXSxmPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihCKXt0eXBlb2YgQi5ydW5XaGVuPT0iZnVuY3Rpb24iJiZCLnJ1bldoZW4odCk9PT0hMXx8KGY9ZiYmQi5zeW5jaHJvbm91cyxtLnVuc2hpZnQoQi5mdWxmaWxsZWQsQi5yZWplY3RlZCkpfSk7bGV0IHA9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihCKXtwLnB1c2goQi5mdWxmaWxsZWQsQi5yZWplY3RlZCl9KTtsZXQgYSxzPTAsdTtpZighZil7bGV0IGw9W1dlLmJpbmQodGhpcyksdm9pZCAwXTtmb3IobC51bnNoaWZ0LmFwcGx5KGwsbSksbC5wdXNoLmFwcGx5KGwscCksdT1sLmxlbmd0aCxhPVByb21pc2UucmVzb2x2ZSh0KTtzPHU7KWE9YS50aGVuKGxbcysrXSxsW3MrK10pO3JldHVybiBhfXU9bS5sZW5ndGg7bGV0IEk9dDtmb3Iocz0wO3M8dTspe2xldCBsPW1bcysrXSxCPW1bcysrXTt0cnl7ST1sKEkpfWNhdGNoKFEpe0IuY2FsbCh0aGlzLFEpO2JyZWFrfX10cnl7YT1XZS5jYWxsKHRoaXMsSSl9Y2F0Y2gobCl7cmV0dXJuIFByb21pc2UucmVqZWN0KGwpfWZvcihzPTAsdT1wLmxlbmd0aDtzPHU7KWE9YS50aGVuKHBbcysrXSxwW3MrK10pO3JldHVybiBhfWdldFVyaShBKXtBPVQodGhpcy5kZWZhdWx0cyxBKTtsZXQgdD1nZShBLmJhc2VVUkwsQS51cmwpO3JldHVybiBhZSh0LEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplcil9fTtjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKEEpe1oucHJvdG90eXBlW0FdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChUKHJ8fHt9LHttZXRob2Q6QSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtjLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihBKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihpLG4sbSl7cmV0dXJuIHRoaXMucmVxdWVzdChUKG18fHt9LHttZXRob2Q6QSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpufSkpfX1aLnByb3RvdHlwZVtBXT10KCksWi5wcm90b3R5cGVbQSsiRm9ybSJdPXQoITApfSk7dmFyIGxlPVo7dmFyIElBPWNsYXNzIGV7Y29uc3RydWN0b3IoQSl7aWYodHlwZW9mIEEhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXt0PWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IGksbj1uZXcgUHJvbWlzZShtPT57ci5zdWJzY3JpYmUobSksaT1tfSkudGhlbihvKTtyZXR1cm4gbi5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxufSxBKGZ1bmN0aW9uKGksbixtKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBNKGksbixtKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKEEpe2lmKHRoaXMucmVhc29uKXtBKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKEEpOnRoaXMuX2xpc3RlbmVycz1bQV19dW5zdWJzY3JpYmUoQSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoQSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBBO3JldHVybnt0b2tlbjpuZXcgZShmdW5jdGlvbihvKXtBPW99KSxjYW5jZWw6QX19fSxYdD1JQTtmdW5jdGlvbiBnQShlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gbEEoZSl7cmV0dXJuIGMuaXNPYmplY3QoZSkmJmUuaXNBeGlvc0Vycm9yPT09ITB9dmFyIHBBPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhwQSkuZm9yRWFjaCgoW2UsQV0pPT57cEFbQV09ZX0pO3ZhciAkdD1wQTtmdW5jdGlvbiBlcihlKXtsZXQgQT1uZXcgbGUoZSksdD1yZShsZS5wcm90b3R5cGUucmVxdWVzdCxBKTtyZXR1cm4gYy5leHRlbmQodCxsZS5wcm90b3R5cGUsQSx7YWxsT3duS2V5czohMH0pLGMuZXh0ZW5kKHQsQSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIGVyKFQoZSxvKSl9LHR9dmFyIGs9ZXIoXyk7ay5BeGlvcz1sZTtrLkNhbmNlbGVkRXJyb3I9TTtrLkNhbmNlbFRva2VuPVh0O2suaXNDYW5jZWw9SWU7ay5WRVJTSU9OPUZlO2sudG9Gb3JtRGF0YT1MO2suQXhpb3NFcnJvcj13O2suQ2FuY2VsPWsuQ2FuY2VsZWRFcnJvcjtrLmFsbD1mdW5jdGlvbihBKXtyZXR1cm4gUHJvbWlzZS5hbGwoQSl9O2suc3ByZWFkPWdBO2suaXNBeGlvc0Vycm9yPWxBO2subWVyZ2VDb25maWc9VDtrLkF4aW9zSGVhZGVycz1GO2suZm9ybVRvSlNPTj1lPT5rZShjLmlzSFRNTEZvcm0oZSk/bmV3IEZvcm1EYXRhKGUpOmUpO2suZ2V0QWRhcHRlcj1EZS5nZXRBZGFwdGVyO2suSHR0cFN0YXR1c0NvZGU9JHQ7ay5kZWZhdWx0PWs7dmFyIEc9azt2YXJ7QXhpb3M6eEksQXhpb3NFcnJvcjpHSSxDYW5jZWxlZEVycm9yOlRJLGlzQ2FuY2VsOkpJLENhbmNlbFRva2VuOkxJLFZFUlNJT046TUksYWxsOkhJLENhbmNlbDpZSSxpc0F4aW9zRXJyb3I6cUksc3ByZWFkOktJLHRvRm9ybURhdGE6akksQXhpb3NIZWFkZXJzOnZJLEh0dHBTdGF0dXNDb2RlOnpJLGZvcm1Ub0pTT046X0ksZ2V0QWRhcHRlcjpWSSxtZXJnZUNvbmZpZzpaSX09Rzthc3luYyBmdW5jdGlvbiBLaShlLEEpe2xldCB0PWUscj1udWxsO2lmKHQ9PW51bGwpcj1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZih0LnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG89YXdhaXQgRy5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6QX0pLGk9VVJMLmNyZWF0ZU9iamVjdFVSTChvLmRhdGEpO3I9bmV3IFdvcmtlcihpLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBwZT1LaTtmdW5jdGlvbiBBcihlKXtsZXQgQT1xZShlKSx0PWU7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PUEsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W1llXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OkEsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIGppKGUsQSx0KXtsZXQgcjtpZihlIT1udWxsKXtsZXQgaT1lO3JldHVybiBpLndvcmtlclByb3h5IT09dm9pZCAwPyhyPWkud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOml9KTpBcihlKX1sZXQgbz1hd2FpdCBwZShBLHQpO3JldHVybiBBcihvKX12YXIgdHI9amk7YXN5bmMgZnVuY3Rpb24gdmkoZSxBLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgZSE9InN0cmluZyI/cj1lLmhyZWY6ZS5zdGFydHNXaXRoKCJodHRwIik/cj1lOnI9dHlwZW9mIEE8InUiP2Ake0F9LyR7ZX1gOmUsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBvPWAke3J9Lndhc21gLG49KGF3YWl0IEcuZ2V0KG8se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Om59KX12YXIgcnI9dmk7dmFyIGlyPWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBucj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixvcj1uZXcgVGV4dEVuY29kZXIsYXI9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHppKGUsQSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1lLmZzX29wZW4oQSx0LmZsYWdzKSxpPWUuZnNfc3RhdChBKS5zaXplLG49bnVsbDtucj9uPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihpKTpuPW5ldyBBcnJheUJ1ZmZlcihpKTtsZXQgbT1uZXcgVWludDhBcnJheShuKTtyZXR1cm4gZS5mc19yZWFkKHIsbSwwLGksMCksZS5mc19jbG9zZShyKSxtfWZ1bmN0aW9uIHNyKGUsQSx0KXtsZXQgcj1udWxsO25yP3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBvPW5ldyBVaW50OEFycmF5KHIpLGk9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLEEsdCk7cmV0dXJuIG8uc2V0KGkpLG99ZnVuY3Rpb24gRChlLEEsdCxyKXtsZXQgbz0wO3JldHVybiBBIT09bnVsbCYmKG89ZS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLEEuYnVmZmVyLmJ5dGVMZW5ndGhdKSxlLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoQS5idWZmZXIpLG8pKSxvfWZ1bmN0aW9uIFgoZSxBLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KEEpLG89ZS5sZW5ndGhCeXRlc1VURjgocikrMSxpPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxvXSk7ZS5zdHJpbmdUb1VURjgocixpLG8pfWZ1bmN0aW9uIFUoZSxBLHQscil7bGV0IG89ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQSx0XSksaT1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxBLHRdKSxuPXNyKGUsbyxpKTtyZXR1cm4gTihyLG4uYnVmZmVyKX1mdW5jdGlvbiBtQShlLEEpe2xldCB0PWUuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsQV0pLHI9ZS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gX2koZSxBLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHAsYSl7c3dpdGNoKHAudHlwZSl7Y2FzZSBnLlRleHRTdHJlYW06e2xldCBzPW9yLmVuY29kZShwLmRhdGEuZGF0YSksdT1EKGUscyxhLDApLEk9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtYKGUsSSxhKTticmVha31jYXNlIGcuSnNvbkNvbXBhdGlibGU6e2xldCBzPW9yLmVuY29kZShKU09OLnN0cmluZ2lmeShwLmRhdGEpKSx1PUQoZSxzLGEsMCksST17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O1goZSxJLGEpO2JyZWFrfWNhc2UgZy5CaW5hcnlTdHJlYW06e2xldCBzPXAuZGF0YS5kYXRhLHU9RChlLHMsYSwwKSxJPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07WChlLEksYSk7YnJlYWt9Y2FzZSBnLlRleHRGaWxlOntlLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBnLkJpbmFyeUZpbGU6e2UuZnNfd3JpdGVGaWxlKHAuZGF0YS5wYXRoLHAuZGF0YS5kYXRhKTticmVha31jYXNlIGcuSW1hZ2U6e2xldCBzPXAuZGF0YSx1PUQoZSxzLmRhdGEsYSwwKSxJPUQoZSxzLmRpcmVjdGlvbixhLDEpLGw9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLEI9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbWV0YWRhdGE6bH07WChlLEIsYSk7YnJlYWt9Y2FzZSBnLk1lc2g6e2xldCBzPXAuZGF0YSx1PUQoZSxzLnBvaW50cyxhLDApLEk9RChlLHMuY2VsbHMsYSwxKSxsPUQoZSxzLnBvaW50RGF0YSxhLDIpLEI9RChlLHMuY2VsbERhdGEsYSwzKSxRPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07WChlLFEsYSk7YnJlYWt9Y2FzZSBnLlBvbHlEYXRhOntsZXQgcz1wLmRhdGEsdT1EKGUscy5wb2ludHMsYSwwKSxJPUQoZSxzLnZlcnRpY2VzLGEsMSksbD1EKGUscy5saW5lcyxhLDIpLEI9RChlLHMucG9seWdvbnMsYSwzKSxRPUQoZSxzLnRyaWFuZ2xlU3RyaXBzLGEsNCksUj1EKGUscy5wb2ludERhdGEsYSw1KSxPPUQoZSxzLnBvaW50RGF0YSxhLDYpLFA9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtJfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtRfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke099YH07WChlLFAsYSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLGUucmVzZXRNb2R1bGVTdGRvdXQoKSxlLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG89ZS5zdGFja1NhdmUoKSxpPTA7dHJ5e2k9ZS5jYWxsTWFpbihBLnNsaWNlKCkpfWNhdGNoKHApe3Rocm93IHR5cGVvZiBwPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsZS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsZS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIGUuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsZS5nZXRFeGNlcHRpb25NZXNzYWdlKHApKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLHB9ZmluYWxseXtlLnN0YWNrUmVzdG9yZShvKX1sZXQgbj1lLmdldE1vZHVsZVN0ZG91dCgpLG09ZS5nZXRNb2R1bGVTdGRlcnIoKSxmPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZpPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKHAsYSl7bGV0IHM9bnVsbDtzd2l0Y2gocC50eXBlKXtjYXNlIGcuVGV4dFN0cmVhbTp7bGV0IEk9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksbD1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxCPW5ldyBVaW50OEFycmF5KGUuSEVBUFU4LmJ1ZmZlcixJLGwpO3M9e2RhdGE6YXIuZGVjb2RlKEIpfTticmVha31jYXNlIGcuSnNvbkNvbXBhdGlibGU6e2xldCBJPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGw9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIsSSxsKTtzPUpTT04ucGFyc2UoYXIuZGVjb2RlKEIpKTticmVha31jYXNlIGcuQmluYXJ5U3RyZWFtOntsZXQgST1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxsPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pO3M9e2RhdGE6c3IoZSxJLGwpfTticmVha31jYXNlIGcuVGV4dEZpbGU6e3M9e3BhdGg6cC5kYXRhLnBhdGgsZGF0YTplLmZzX3JlYWRGaWxlKHAuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBnLkJpbmFyeUZpbGU6e3M9e3BhdGg6cC5kYXRhLnBhdGgsZGF0YTp6aShlLHAuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBnLkltYWdlOntsZXQgST1tQShlLGEpO0kuZGF0YT1VKGUsYSwwLEkuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEkuZGlyZWN0aW9uPVUoZSxhLDEsYi5GbG9hdDY0KSxJLm1ldGFkYXRhPW5ldyBNYXAoSS5tZXRhZGF0YSkscz1JO2JyZWFrfWNhc2UgZy5NZXNoOntsZXQgST1tQShlLGEpO0kubnVtYmVyT2ZQb2ludHM+MD9JLnBvaW50cz1VKGUsYSwwLEkubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpJLnBvaW50cz1OKEkubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxzPjA/SS5jZWxscz1VKGUsYSwxLEkubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkkuY2VsbHM9TihJLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZlBvaW50UGl4ZWxzPjA/SS5wb2ludERhdGE9VShlLGEsMixJLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpJLnBvaW50RGF0YT1OKEkubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJLm51bWJlck9mQ2VsbFBpeGVscz4wP0kuY2VsbERhdGE9VShlLGEsMyxJLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkkuY2VsbERhdGE9TihJLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUk7YnJlYWt9Y2FzZSBnLlBvbHlEYXRhOntsZXQgST1tQShlLGEpO0kubnVtYmVyT2ZQb2ludHM+MD9JLnBvaW50cz1VKGUsYSwwLGIuRmxvYXQzMik6SS5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxJLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0kudmVydGljZXM9VShlLGEsMSxoLlVJbnQzMik6SS52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksSS5saW5lc0J1ZmZlclNpemU+MD9JLmxpbmVzPVUoZSxhLDIsaC5VSW50MzIpOkkubGluZXM9bmV3IFVpbnQzMkFycmF5LEkucG9seWdvbnNCdWZmZXJTaXplPjA/SS5wb2x5Z29ucz1VKGUsYSwzLGguVUludDMyKTpJLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxJLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0kudHJpYW5nbGVTdHJpcHM9VShlLGEsNCxoLlVJbnQzMik6SS50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksSS5udW1iZXJPZlBvaW50UGl4ZWxzPjA/SS5wb2ludERhdGE9VShlLGEsNSxJLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6SS5wb2ludERhdGE9TihJLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/SS5jZWxsRGF0YT1VKGUsYSw2LEkucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkkuY2VsbERhdGE9TihJLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1JO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IHU9e3R5cGU6cC50eXBlLGRhdGE6c307Zi5wdXNoKHUpfSkse3JldHVyblZhbHVlOmksc3Rkb3V0Om4sc3RkZXJyOm0sb3V0cHV0czpmfX12YXIgSXI9X2k7dmFyIFZpPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBaaShlLEEpe2lmKGU9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCByPTA7cjxlLmxlbmd0aDtyKyspe2xldCBvPVhpKGVbcl0sQSk7byE9PW51bGwmJnQucHVzaChvKX1yZXR1cm4gdH1mdW5jdGlvbiBYaShlLEEpe2lmKGU9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gZS5idWZmZXIhPT12b2lkIDA/dD1lLmJ1ZmZlcjplLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PWUpLFZpJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDpBP3Q6dC5zbGljZSgwKX12YXIgZ3I9Wmk7ZnVuY3Rpb24gJGkoZSl7cmV0dXJuW2UuZGF0YSxlLmRpcmVjdGlvbl19dmFyIGxyPSRpO2Z1bmN0aW9uIGVvKGUpe3JldHVybltlLnBvaW50cyxlLnBvaW50RGF0YSxlLmNlbGxzLGUuY2VsbERhdGFdfXZhciBwcj1lbztmdW5jdGlvbiBBbyhlKXtyZXR1cm5bZS5wb2ludHMsZS52ZXJ0aWNlcyxlLmxpbmVzLGUucG9seWdvbnMsZS50cmlhbmdsZVN0cmlwcyxlLnBvaW50RGF0YSxlLmNlbGxEYXRhXX12YXIgbXI9QW87dmFyIHRvO2Z1bmN0aW9uIE5lKCl7cmV0dXJuIHRvfXZhciBybztmdW5jdGlvbiB1cigpe3JldHVybiByb312YXIgaW87ZnVuY3Rpb24gU2UoKXtyZXR1cm4gaW99dmFyIHVBPW5ldyBNYXA7ZnVuY3Rpb24gb28oKXtsZXQgZT1TZSgpO3JldHVybiB0eXBlb2YgZT4idSImJihlPW51bGwpLGV9ZnVuY3Rpb24gZnIoKXtsZXQgZT1OZSgpO3JldHVybiB0eXBlb2YgZT4idSImJihlPW5ldyBVUkwoIi9waXBlbGluZXMiLGRvY3VtZW50LmxvY2F0aW9uLm9yaWdpbikuaHJlZiksZX1mdW5jdGlvbiBPZSgpe2xldCBlPXVyKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9e30pLGV9YXN5bmMgZnVuY3Rpb24gYW8oZSxBLHQpe2xldCByPWUsbz1lO2lmKHR5cGVvZiBlIT0ic3RyaW5nIiYmKHI9bmV3IFVSTChlLmhyZWYpLG89ci5ocmVmKSx1QS5oYXMobykpcmV0dXJuIHVBLmdldChvKTt7bGV0IGk9YXdhaXQgcnIoZSxBPy50b1N0cmluZygpPz9mcigpLHQ/P09lKCkpO3JldHVybiB1QS5zZXQobyxpKSxpfX1hc3luYyBmdW5jdGlvbiBubyhlLEEsdCxyLG8pe2lmKCFhd2FpdCBpcigpKXtsZXQgUT0iV2ViQXNzZW1ibHkgU0lNRCBzdXBwb3J0IGlzIHJlcXVpcmVkIC0tIHBsZWFzZSB1cGRhdGUgeW91ciBicm93c2VyLiI7dGhyb3cgYWxlcnQoUSksbmV3IEVycm9yKFEpfWxldCBpPW8/LndlYldvcmtlcj8/bnVsbDtpZihpPT09ITEpe2xldCBRPWF3YWl0IGFvKGUudG9TdHJpbmcoKSxvPy5waXBlbGluZUJhc2VVcmwsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/T2UoKSk7cmV0dXJuIElyKFEsQSx0LHIpfWxldCBuPWksbT1vPy5waXBlbGluZVdvcmtlclVybD8/b28oKSxmPXR5cGVvZiBtIT0ic3RyaW5nIiYmdHlwZW9mIG0/LmhyZWY8InUiP20uaHJlZjptLHt3b3JrZXJQcm94eTpwLHdvcmtlcjphfT1hd2FpdCB0cihuLGYsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/T2UoKSk7bj1hO2xldCBzPVtdO3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihRKXtpZihRLnR5cGU9PT1nLkJpbmFyeVN0cmVhbSl7bGV0IFI9US5kYXRhLmRhdGE7cy5wdXNoKFIpfWVsc2UgaWYoUS50eXBlPT09Zy5CaW5hcnlGaWxlKXtsZXQgUj1RLmRhdGEuZGF0YTtzLnB1c2goUil9ZWxzZSBpZihRLnR5cGU9PT1nLkltYWdlKXtsZXQgUj1RLmRhdGE7Ui5kYXRhIT09bnVsbCYmcy5wdXNoKC4uLmxyKFIpKX1lbHNlIGlmKFEudHlwZT09PWcuTWVzaCl7bGV0IFI9US5kYXRhO3MucHVzaCguLi5wcihSKSl9ZWxzZSBpZihRLnR5cGU9PT1nLlBvbHlEYXRhKXtsZXQgUj1RLmRhdGE7cy5wdXNoKC4uLm1yKFIpKX19KTtsZXQgdT1vPy5waXBlbGluZUJhc2VVcmw/P2ZyKCksST10eXBlb2YgdSE9InN0cmluZyImJnR5cGVvZiB1Py5ocmVmPCJ1Ij91LmhyZWY6dSxsPXIhPW51bGw/S2UocixncihzLG8/Lm5vQ29weSkpOm51bGwsQj1hd2FpdCBwLnJ1blBpcGVsaW5lKGUudG9TdHJpbmcoKSxJLEEsdCxsLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P09lKCkpO3JldHVybntyZXR1cm5WYWx1ZTpCLnJldHVyblZhbHVlLHN0ZG91dDpCLnN0ZG91dCxzdGRlcnI6Qi5zdGRlcnIsb3V0cHV0czpCLm91dHB1dHMsd2ViV29ya2VyOm59fXZhciBDPW5vO3ZhciBzbz1udWxsO2Z1bmN0aW9uIGNyKCl7cmV0dXJuIHNvfXZhciBJbz0iMS4yLjEiLEJyPUlvO3ZhciBmQSxnbz1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vaW1hZ2UtaW9AJHtCcn0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIEhnKGUpe2ZBPWV9ZnVuY3Rpb24gRSgpe2lmKHR5cGVvZiBmQTwidSIpcmV0dXJuIGZBO2xldCBlPU5lKCk7cmV0dXJuIHR5cGVvZiBlPCJ1Ij9lOmdvfXZhciBjQSxsbz1udWxsO2Z1bmN0aW9uIGRyKGUpe2NBPWV9ZnVuY3Rpb24gZCgpe2lmKHR5cGVvZiBjQTwidSIpcmV0dXJuIGNBO2xldCBlPVNlKCk7cmV0dXJuIHR5cGVvZiBlPCJ1Ij9lOmxvfXZhciAkPW51bGw7YXN5bmMgZnVuY3Rpb24gQ3IoKXtsZXQgZT1kKCksQT10eXBlb2YgZSE9InN0cmluZyImJnR5cGVvZiBlPy5ocmVmPCJ1Ij9lLmhyZWY6ZTskPWF3YWl0IHBlKEEpfWZ1bmN0aW9uIF9nKGUpeyQ9ZX1hc3luYyBmdW5jdGlvbiB5KCl7aWYoJCE9PW51bGwpcmV0dXJuICQudGVybWluYXRlZCYmYXdhaXQgQ3IoKSwkO2xldCBlPWNyKCk7cmV0dXJuIGUhPT1udWxsP2U6KGF3YWl0IENyKCksJCl9YXN5bmMgZnVuY3Rpb24gcG8oZSl7bGV0IHQ9KGF3YWl0IEcuZ2V0KGAke2V9L2luZGV4Lmpzb25gLHtyZXNwb25zZVR5cGU6Impzb24ifSkpLmRhdGEscj1hd2FpdCBHLmdldChgJHtlfS9kYXRhL2RhdGEucmF3YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KTt0LmRhdGE9Tih0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlLHIuZGF0YSk7bGV0IG89YXdhaXQgRy5nZXQoYCR7ZX0vZGF0YS9kaXJlY3Rpb24ucmF3YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KTtyZXR1cm4gdC5kaXJlY3Rpb249TihiLkZsb2F0NjQsby5kYXRhKSx0fXZhciBtbz1wbzt2YXIgdW89bmV3IE1hcChbWyJpbWFnZS9qcGVnIiwianBlZyJdLFsiaW1hZ2UvcG5nIiwicG5nIl0sWyJpbWFnZS90aWZmIiwidGlmZiJdLFsiaW1hZ2UveC1tcy1ibXAiLCJibXAiXSxbImltYWdlL3gtYm1wIiwiYm1wIl0sWyJpbWFnZS9ibXAiLCJibXAiXSxbImFwcGxpY2F0aW9uL2RpY29tIiwiZ2RjbSJdXSksZWU9dW87YXN5bmMgZnVuY3Rpb24gZm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0icG5nLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIEJBPWZvO2FzeW5jIGZ1bmN0aW9uIGNvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0icG5nLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGRBPWNvO2FzeW5jIGZ1bmN0aW9uIEJvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1ldGEtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgQ0E9Qm87YXN5bmMgZnVuY3Rpb24gQ28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJtZXRhLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIEVBPUNvO2FzeW5jIGZ1bmN0aW9uIEVvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InRpZmYtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgeUE9RW87YXN5bmMgZnVuY3Rpb24geW8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJ0aWZmLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIFFBPXlvO2FzeW5jIGZ1bmN0aW9uIFFvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im5pZnRpLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGhBPVFvO2FzeW5jIGZ1bmN0aW9uIGhvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibmlmdGktd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgd0E9aG87YXN5bmMgZnVuY3Rpb24gd28oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ianBlZy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBSQT13bzthc3luYyBmdW5jdGlvbiBSbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImpwZWctd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIga0E9Um87YXN5bmMgZnVuY3Rpb24ga28oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibnJyZC1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBiQT1rbzthc3luYyBmdW5jdGlvbiBibyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im5ycmQtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgREE9Ym87YXN5bmMgZnVuY3Rpb24gRG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0idnRrLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFdBPURvO2FzeW5jIGZ1bmN0aW9uIFdvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0idnRrLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIEZBPVdvO2FzeW5jIGZ1bmN0aW9uIEZvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImJtcC1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBVQT1Gbzthc3luYyBmdW5jdGlvbiBVbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImJtcC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBOQT1Vbzthc3luYyBmdW5jdGlvbiBObyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJoZGY1LXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFNBPU5vO2FzeW5jIGZ1bmN0aW9uIFNvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iaGRmNS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBPQT1Tbzthc3luYyBmdW5jdGlvbiBPbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJtaW5jLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFBBPU9vO2FzeW5jIGZ1bmN0aW9uIFBvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibWluYy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciB4QT1Qbzthc3luYyBmdW5jdGlvbiB4byhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJtcmMtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgR0E9eG87YXN5bmMgZnVuY3Rpb24gR28oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJtcmMtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgVEE9R287YXN5bmMgZnVuY3Rpb24gVG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibHNtLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIEpBPVRvO2FzeW5jIGZ1bmN0aW9uIEpvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibHNtLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIExBPUpvO2FzeW5jIGZ1bmN0aW9uIExvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im1naC1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBNQT1Mbzthc3luYyBmdW5jdGlvbiBNbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1naC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBIQT1Nbzthc3luYyBmdW5jdGlvbiBIbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJiaW8tcmFkLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIFlBPUhvO2FzeW5jIGZ1bmN0aW9uIFlvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iYmlvLXJhZC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBxQT1Zbzthc3luYyBmdW5jdGlvbiBxbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnaXBsLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIEtBPXFvO2FzeW5jIGZ1bmN0aW9uIEtvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2lwbC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBqQT1Lbzthc3luYyBmdW5jdGlvbiBqbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnZS1hZHctcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgdkE9am87YXN5bmMgZnVuY3Rpb24gdm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZS1hZHctd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgekE9dm87YXN5bmMgZnVuY3Rpb24gem8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2U0LXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIF9BPXpvO2FzeW5jIGZ1bmN0aW9uIF9vKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2U0LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIFZBPV9vO2FzeW5jIGZ1bmN0aW9uIFZvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdlNS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBaQT1Wbzthc3luYyBmdW5jdGlvbiBabyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdlNS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBYQT1abzthc3luYyBmdW5jdGlvbiBYbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnZGNtLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyICRBPVhvO2FzeW5jIGZ1bmN0aW9uICRvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2RjbS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBldD0kbzthc3luYyBmdW5jdGlvbiBlYShlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJzY2FuY28tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgQXQ9ZWE7YXN5bmMgZnVuY3Rpb24gQWEoZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJzY2FuY28td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgdHQ9QWE7YXN5bmMgZnVuY3Rpb24gdGEoZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZmRmLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIHJ0PXRhO2FzeW5jIGZ1bmN0aW9uIHJhKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Indhc20tcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgaXQ9cmE7YXN5bmMgZnVuY3Rpb24gaWEoZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJ3YXNtLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIG90PWlhO2FzeW5jIGZ1bmN0aW9uIG9hKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Indhc20tenN0ZC1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBhdD1vYTthc3luYyBmdW5jdGlvbiBhYShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Indhc20tenN0ZC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBudD1hYTt2YXIgbmE9bmV3IE1hcChbWyJwbmciLFtCQSxkQV1dLFsibWV0YSIsW0NBLEVBXV0sWyJ0aWZmIixbeUEsUUFdXSxbIm5pZnRpIixbaEEsd0FdXSxbImpwZWciLFtSQSxrQV1dLFsibnJyZCIsW2JBLERBXV0sWyJ2dGsiLFtXQSxGQV1dLFsiYm1wIixbVUEsTkFdXSxbImhkZjUiLFtTQSxPQV1dLFsibW5jIixbUEEseEFdXSxbIm1yYyIsW0dBLFRBXV0sWyJsc20iLFtKQSxMQV1dLFsibWdoIixbTUEsSEFdXSxbImJpb1JhZCIsW1lBLHFBXV0sWyJnaXBsIixbS0EsakFdXSxbImdlQWR3IixbdkEsekFdXSxbImdlNCIsW19BLFZBXV0sWyJnZTUiLFtaQSxYQV1dLFsiZ2RjbSIsWyRBLGV0XV0sWyJzY2FuY28iLFtBdCx0dF1dLFsiZmRmIixbcnQsbnVsbF1dLFsid2FzbSIsW2l0LG90XV0sWyJ3YXNtWnN0ZCIsW2F0LG50XV1dKSxBZT1uYTthc3luYyBmdW5jdGlvbiBzYShlLEE9e30pe2xldCB0PWUudHlwZT8/IiIscj1lLm5hbWU/P2UucGF0aD8/ImZpbGVOYW1lIixvPXRlKHIpLnRvTG93ZXJDYXNlKCksaT1BPy53ZWJXb3JrZXIsbj1lO2lmKGUgaW5zdGFuY2VvZiBCbG9iKXtsZXQgST1hd2FpdCBlLmFycmF5QnVmZmVyKCk7bj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShJKX19bGV0IG09bnVsbDtpZih0JiZlZS5oYXModCkpbT1lZS5nZXQodCk7ZWxzZSBpZihZLmhhcyhvKSltPVkuZ2V0KG8pO2Vsc2UgZm9yKGxldCBJIG9mIEFlLnZhbHVlcygpKWlmKElbMF0hPT1udWxsKXtsZXR7d2ViV29ya2VyOmwsY291bGRSZWFkOkIsaW1hZ2U6UX09YXdhaXQgSVswXSh7cGF0aDpuLnBhdGgsZGF0YTpuLmRhdGEuc2xpY2UoKX0se3dlYldvcmtlcjppLGluZm9ybWF0aW9uT25seTpBPy5pbmZvcm1hdGlvbk9ubHksbm9Db3B5OkE/Lm5vQ29weX0pO2lmKGk9bCxCKXJldHVybiB0eXBlb2YgQTwidSImJihRPUooUSxBKSkse3dlYldvcmtlcjppLGltYWdlOlF9fWlmKCFtKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrcik7bGV0IHA9QWUuZ2V0KG0pWzBdLHt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6cyxpbWFnZTp1fT1hd2FpdCBwKG4se3dlYldvcmtlcjppLGluZm9ybWF0aW9uT25seTpBPy5pbmZvcm1hdGlvbk9ubHksbm9Db3B5OkE/Lm5vQ29weX0pO2lmKGk9YSwhcyl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlYWQ6ICIrcik7cmV0dXJuIHR5cGVvZiBBPCJ1IiYmKHU9Sih1LEEpKSx7d2ViV29ya2VyOmksaW1hZ2U6dX19dmFyIHN0PXNhO3ZhciBJYT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NixFcj1uZXcgTGUoSWEsc3QpO2FzeW5jIGZ1bmN0aW9uIGdhKGUsQT17fSl7bGV0IHQ9MSxyPTAsbz0hMTt0eXBlb2YgQT09Im9iamVjdCImJih0eXBlb2YgQS56U3BhY2luZzwidSImJih0PUEuelNwYWNpbmcpLHR5cGVvZiBBLnpPcmlnaW48InUiJiYocj1BLnpPcmlnaW4pLHR5cGVvZiBBLnNvcnRlZFNlcmllczwidSImJihvPUEuc29ydGVkU2VyaWVzKSk7bGV0IGk9QXJyYXkuZnJvbShlLGFzeW5jIGZ1bmN0aW9uKHMpe2lmKHMgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBzLmFycmF5QnVmZmVyKCk7cmV0dXJue3BhdGg6cy5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkodSl9fXJldHVybiBzfSksbj1hd2FpdCBQcm9taXNlLmFsbChpKTtvfHxuLnNvcnQoKHMsdSk9PnMucGF0aDx1LnBhdGg/LTE6cy5wYXRoPnUucGF0aD8xOjApO2xldCBtPVtdO2ZvcihsZXQgcz0wO3M8bi5sZW5ndGg7cysrKW0ucHVzaChbbltzXSx7fV0pO2xldCBwPShhd2FpdCBFci5ydW5UYXNrcyhtKS5wcm9taXNlKS5tYXAocz0+e2xldCB1PXMuaW1hZ2U7cmV0dXJuIHUuaW1hZ2VUeXBlLmRpbWVuc2lvbj0zLHUuc2l6ZS5wdXNoKDEpLHUuc3BhY2luZy5wdXNoKHQpLHUub3JpZ2luLnB1c2gociksdS5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSg5KSx1LmRpcmVjdGlvbi5maWxsKDApLHUuZGlyZWN0aW9uWzBdPTEsdS5kaXJlY3Rpb25bNF09MSx1LmRpcmVjdGlvbls4XT0xLHV9KSxhPVRlKHApO3JldHVybiB0eXBlb2YgQT09Im9iamVjdCImJih0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1Inx8dHlwZW9mIEEucGl4ZWxUeXBlPCJ1IikmJihhPUooYSxBKSkse2ltYWdlOmEsd2ViV29ya2VyUG9vbDpFcn19dmFyIGxhPWdhO2FzeW5jIGZ1bmN0aW9uIHBhKGUsQSx0PXt9KXtsZXQgcj1lOyh0eXBlb2YgdC5jb21wb25lbnRUeXBlPCJ1Inx8dHlwZW9mIHQucGl4ZWxUeXBlPCJ1IikmJihyPUooZSx0KSk7bGV0IG89dC5taW1lVHlwZSxpPXRlKEEpLnRvTG93ZXJDYXNlKCksbj10LndlYldvcmtlcixtPW51bGw7aWYodHlwZW9mIG88InUiJiZlZS5oYXMobykpbT1lZS5nZXQobyk7ZWxzZSBpZihZLmhhcyhpKSltPVkuZ2V0KGkpO2Vsc2UgZm9yKGxldCBsIG9mIEFlLnZhbHVlcygpKWlmKGxbMV0hPT1udWxsKXtsZXR7d2ViV29ya2VyOkIsY291bGRXcml0ZTpRLHNlcmlhbGl6ZWRJbWFnZTpSfT1hd2FpdCBsWzFdKEdlKHIpLEEsdCk7aWYobj1CLFEpcmV0dXJue3dlYldvcmtlcjpuLHNlcmlhbGl6ZWRJbWFnZTpSfX1pZighbSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSU8gZm9yOiAiK0EpO2xldCBwPUFlLmdldChtKVsxXSx7d2ViV29ya2VyOmEsY291bGRXcml0ZTpzLHNlcmlhbGl6ZWRJbWFnZTp1fT1hd2FpdCBwKHIsQSx0KTtpZihuPWEsIXMpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCB3cml0ZTogIitBKTtyZXR1cm57d2ViV29ya2VyOm4sc2VyaWFsaXplZEltYWdlOnV9fXZhciBtYT1wYTthc3luYyBmdW5jdGlvbiB1YShlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImZkZi13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBmYT11YTt2YXIgeXI9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZXQ9KEEsSSk9Pntmb3IodmFyIHQgaW4gSSl0dChBLHQse2dldDpJW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGd0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxtQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGl0PXtjYW5IYW5kbGU6QT0+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+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoSSxWQSkpLnRoZW4odGhpcy5faW5pdCk6SUE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS0ksImJhc2U2NCIpLFZBKS50aGVuKHRoaXMuX2luaXQpLElBKX1faW5pdChJKXtrPUkuaW5zdGFuY2UsVkEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKEksdD0wKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT1JLmJ5dGVMZW5ndGgsZz1rLmV4cG9ydHMubWFsbG9jKGUpO1hBLnNldChJLGcpLHQ9dHx8TnVtYmVyKGsuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPWsuZXhwb3J0cy5tYWxsb2ModCksaT1rLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsdCxnLGUpLHM9WEEuc2xpY2UocixyK2kpO3JldHVybiBrLmV4cG9ydHMuZnJlZShnKSxrLmV4cG9ydHMuZnJlZShyKSxzfX0sS0k9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT0k9bmV3IHlBLFRJPSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsSSx0KXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHtJfS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KTtUSXx8KGF3YWl0IE9JLmluaXQoKSxUST0hMCk7bGV0IHM9T0kuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6c30pfXZhciB4ST1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLEksdCl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyx4SShlLEksdCkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciBQST1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LHA9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxQPXVlO2Z1bmN0aW9uIGhlKEEsSSl7bGV0IHQ9bnVsbDtzd2l0Y2goQSl7Y2FzZSBwLlVJbnQ4Ont0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ4Ont0PW5ldyBJbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQxNjp7dD1uZXcgVWludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDE2Ont0PW5ldyBJbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MzI6e3Q9bmV3IFVpbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQzMjp7dD1uZXcgSW50MzJBcnJheShJKTticmVha31jYXNlIHAuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdVaW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdJbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0MzI6e3Q9bmV3IEZsb2F0MzJBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQ2NDp7dD1uZXcgRmxvYXQ2NEFycmF5KEkpO2JyZWFrfWNhc2UibnVsbCI6e3Q9bnVsbDticmVha31jYXNlIG51bGw6e3Q9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiB0fXZhciBZPWhlO3ZhciBaST10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqST1uZXcgVGV4dEVuY29kZXIsV0k9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsSSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4oSSx0LmZsYWdzKSxyPUEuZnNfc3RhdChJKS5zaXplLGk9bnVsbDtaST9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTppPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgcz1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKGUscywwLHIsMCksQS5mc19jbG9zZShlKSxzfWZ1bmN0aW9uIFZJKEEsSSx0KXtsZXQgZT1udWxsO1pJP2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmU9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksdCk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24geShBLEksdCxlKXtsZXQgZz0wO3JldHVybiBJIT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlLEkuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoSS5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIGooQSxJLHQpe2xldCBlPUpTT04uc3RyaW5naWZ5KEkpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIEYoQSxJLHQsZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxpPVZJKEEsZyxyKTtyZXR1cm4gWShlLGkuYnVmZmVyKX1mdW5jdGlvbiB6QShBLEkpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsSV0pLGU9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSxJLHQsZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBvPWpJLmVuY29kZShRLmRhdGEuZGF0YSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBvPWpJLmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBvPVEuZGF0YS5kYXRhLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBvPVEuZGF0YSxmPXkoQSxvLmRhdGEsQywwKSxuPXkoQSxvLmRpcmVjdGlvbixDLDEpLEU9dHlwZW9mIG8ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oby5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTpvLmltYWdlVHlwZSxuYW1lOm8ubmFtZSxvcmlnaW46by5vcmlnaW4sc3BhY2luZzpvLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLHNpemU6by5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07aihBLGMsQyk7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8uY2VsbHMsQywxKSxFPXkoQSxvLnBvaW50RGF0YSxDLDIpLGM9eShBLG8uY2VsbERhdGEsQywzKSx1PXttZXNoVHlwZTpvLm1lc2hUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6by5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGNlbGxCdWZmZXJTaXplOm8uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07aihBLHUsQyk7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLnZlcnRpY2VzLEMsMSksRT15KEEsby5saW5lcyxDLDIpLGM9eShBLG8ucG9seWdvbnMsQywzKSx1PXkoQSxvLnRyaWFuZ2xlU3RyaXBzLEMsNCksZD15KEEsby5wb2ludERhdGEsQyw1KSxSPXkoQSxvLnBvaW50RGF0YSxDLDYpLE49e3BvbHlEYXRhVHlwZTpvLnBvbHlEYXRhVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6by52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsbGluZXNCdWZmZXJTaXplOm8ubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpvLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6by50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07aihBLE4sQyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbihJLnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLHM9QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZyPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7bGV0IG89bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289e2RhdGE6V0kuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPUpTT04ucGFyc2UoV0kuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pO289e2RhdGE6VkkoQSxuLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbj16QShBLEMpO24uZGF0YT1GKEEsQywwLG4uaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLG4uZGlyZWN0aW9uPUYoQSxDLDEsUC5GbG9hdDY0KSxuLm1ldGFkYXRhPW5ldyBNYXAobi5tZXRhZGF0YSksbz1uO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpuLnBvaW50cz1ZKG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxzPjA/bi5jZWxscz1GKEEsQywxLG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOm4uY2VsbHM9WShuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsMixuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsMyxuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLFAuRmxvYXQzMik6bi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxuLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP24udmVydGljZXM9RihBLEMsMSxwLlVJbnQzMik6bi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksbi5saW5lc0J1ZmZlclNpemU+MD9uLmxpbmVzPUYoQSxDLDIscC5VSW50MzIpOm4ubGluZXM9bmV3IFVpbnQzMkFycmF5LG4ucG9seWdvbnNCdWZmZXJTaXplPjA/bi5wb2x5Z29ucz1GKEEsQywzLHAuVUludDMyKTpuLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxuLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP24udHJpYW5nbGVTdHJpcHM9RihBLEMsNCxwLlVJbnQzMik6bi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsNSxuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQyw2LG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6b307YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Omksc3RkZXJyOnMsb3V0cHV0czphfX12YXIgWEk9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sSSk7ZyE9PW51bGwmJnQucHVzaChnKX1yZXR1cm4gdH1mdW5jdGlvbiBwZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLHdlJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDpJP3Q6dC5zbGljZSgwKX12YXIgekk9bWU7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF9JPUZlO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2ST1TZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJEk9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSxJLHQsZSl7bGV0IGc9WEkoQSxJLHQsZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaS50eXBlPT09RC5CaW5hcnlTdHJlYW18fGkudHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IHM9aS5kYXRhO3IucHVzaChzKX1lbHNlIGlmKGkudHlwZT09PUQuSW1hZ2Upe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uX0kocykpfWVsc2UgaWYoaS50eXBlPT09RC5NZXNoKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLnZJKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuUG9seURhdGEpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uJEkocykpfX0pLEZBKGcsekkociwhMCkpfXZhciBBdD1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsSSx0LGUsZyxyKXtsZXQgaT1hd2FpdCBQSShBLEkscik7cmV0dXJuIGF3YWl0IEF0KGksdCxlLGcpfX07b0EoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7ZHIoeXIpO2V4cG9ydHtZQSBhcyBiaW9SYWRSZWFkSW1hZ2UscUEgYXMgYmlvUmFkV3JpdGVJbWFnZSxVQSBhcyBibXBSZWFkSW1hZ2UsTkEgYXMgYm1wV3JpdGVJbWFnZSxZIGFzIGV4dGVuc2lvblRvSW1hZ2VJbyxydCBhcyBmZGZSZWFkSW1hZ2UsZmEgYXMgZmRmV3JpdGVJbWFnZSwkQSBhcyBnZGNtUmVhZEltYWdlLGV0IGFzIGdkY21Xcml0ZUltYWdlLF9BIGFzIGdlNFJlYWRJbWFnZSxWQSBhcyBnZTRXcml0ZUltYWdlLFpBIGFzIGdlNVJlYWRJbWFnZSxYQSBhcyBnZTVXcml0ZUltYWdlLHZBIGFzIGdlQWR3UmVhZEltYWdlLHpBIGFzIGdlQWR3V3JpdGVJbWFnZSx5IGFzIGdldERlZmF1bHRXZWJXb3JrZXIsZCBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxFIGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsS0EgYXMgZ2lwbFJlYWRJbWFnZSxqQSBhcyBnaXBsV3JpdGVJbWFnZSxTQSBhcyBoZGY1UmVhZEltYWdlLE9BIGFzIGhkZjVXcml0ZUltYWdlLFJBIGFzIGpwZWdSZWFkSW1hZ2Usa0EgYXMganBlZ1dyaXRlSW1hZ2UsSkEgYXMgbHNtUmVhZEltYWdlLExBIGFzIGxzbVdyaXRlSW1hZ2UsQ0EgYXMgbWV0YVJlYWRJbWFnZSxFQSBhcyBtZXRhV3JpdGVJbWFnZSxNQSBhcyBtZ2hSZWFkSW1hZ2UsSEEgYXMgbWdoV3JpdGVJbWFnZSxQQSBhcyBtaW5jUmVhZEltYWdlLHhBIGFzIG1pbmNXcml0ZUltYWdlLEdBIGFzIG1yY1JlYWRJbWFnZSxUQSBhcyBtcmNXcml0ZUltYWdlLGhBIGFzIG5pZnRpUmVhZEltYWdlLHdBIGFzIG5pZnRpV3JpdGVJbWFnZSxiQSBhcyBucnJkUmVhZEltYWdlLERBIGFzIG5ycmRXcml0ZUltYWdlLEJBIGFzIHBuZ1JlYWRJbWFnZSxkQSBhcyBwbmdXcml0ZUltYWdlLHN0IGFzIHJlYWRJbWFnZSxsYSBhcyByZWFkSW1hZ2VGaWxlU2VyaWVzLG1vIGFzIHJlYWRJbWFnZUh0dHAsQXQgYXMgc2NhbmNvUmVhZEltYWdlLHR0IGFzIHNjYW5jb1dyaXRlSW1hZ2UsX2cgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixkciBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxIZyBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLHlBIGFzIHRpZmZSZWFkSW1hZ2UsUUEgYXMgdGlmZldyaXRlSW1hZ2UsV0EgYXMgdnRrUmVhZEltYWdlLEZBIGFzIHZ0a1dyaXRlSW1hZ2UsaXQgYXMgd2FzbVJlYWRJbWFnZSxvdCBhcyB3YXNtV3JpdGVJbWFnZSxhdCBhcyB3YXNtWnN0ZFJlYWRJbWFnZSxudCBhcyB3YXNtWnN0ZFdyaXRlSW1hZ2UsbWEgYXMgd3JpdGVJbWFnZX07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIGhyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd3I9KGUsQSk9Pntmb3IodmFyIHQgaW4gQSlocihlLHQse2dldDpBW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIFJyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksWT1Scjt2YXIga3I9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxoPWtyO3ZhciBicj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sYj1icjtmdW5jdGlvbiBEcihlLEEpe2xldCB0PW51bGw7c3dpdGNoKGUpe2Nhc2UgaC5VSW50ODp7dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50ODp7dD1uZXcgSW50OEFycmF5KEEpO2JyZWFrfWNhc2UgaC5VSW50MTY6e3Q9bmV3IFVpbnQxNkFycmF5KEEpO2JyZWFrfWNhc2UgaC5JbnQxNjp7dD1uZXcgSW50MTZBcnJheShBKTticmVha31jYXNlIGguVUludDMyOnt0PW5ldyBVaW50MzJBcnJheShBKTticmVha31jYXNlIGguSW50MzI6e3Q9bmV3IEludDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBoLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnVWludDY0QXJyYXkoQSk6dD1uZXcgVWludDhBcnJheShBKTticmVha31jYXNlIGguSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/dD1uZXcgQmlnSW50NjRBcnJheShBKTp0PW5ldyBVaW50OEFycmF5KEEpO2JyZWFrfWNhc2UgYi5GbG9hdDMyOnt0PW5ldyBGbG9hdDMyQXJyYXkoQSk7YnJlYWt9Y2FzZSBiLkZsb2F0NjQ6e3Q9bmV3IEZsb2F0NjRBcnJheShBKTticmVha31jYXNlIm51bGwiOnt0PW51bGw7YnJlYWt9Y2FzZSBudWxsOnt0PW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gdH12YXIgTj1Ecjt2YXIgV3I9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxtZT1Xcjt2YXIgUGU9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoQT0yLHQ9aC5VSW50OCxyPW1lLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPUEsdGhpcy5jb21wb25lbnRUeXBlPXQsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LEl0PVBlO2Z1bmN0aW9uIEZyKGUsQSx0LHIsbyl7ZVtyK3QqQV09b312YXIgZ3Q9RnI7dmFyIHhlPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3RvcihBPW5ldyBJdCl7dGhpcy5pbWFnZVR5cGU9QTtsZXQgdD1BLmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkodCksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KHQpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkodCp0KSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8dDtyKyspZ3QodGhpcy5kaXJlY3Rpb24sdCxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheSh0KSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxLPXhlO2Z1bmN0aW9uIFVyKGUpe2xldCBBPW5ldyBLKGUuaW1hZ2VUeXBlKTtpZihBLm5hbWU9ZS5uYW1lLEEub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLEEuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksQS5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSxBLnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCB0PWUuZGF0YS5jb25zdHJ1Y3RvcjtBLmRhdGE9bmV3IHQoZS5kYXRhLmxlbmd0aCksQS5kYXRhIT1udWxsJiZBLmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gQX12YXIgR2U9VXI7ZnVuY3Rpb24gTnIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgQT1lWzBdO2lmKEEuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgSyhBLmltYWdlVHlwZSk7dC5vcmlnaW49QXJyYXkuZnJvbShBLm9yaWdpbiksdC5zcGFjaW5nPUFycmF5LmZyb20oQS5zcGFjaW5nKTtsZXQgcj10LmltYWdlVHlwZS5kaW1lbnNpb247dC5kaXJlY3Rpb249QS5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7dC5zaXplPUFycmF5LmZyb20oQS5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxzKT0+YStzLnNpemVbb10sMCk7dC5zaXplW29dPWk7bGV0IG49dC5zaXplLnJlZHVjZSgoYSxzKT0+YSpzLDEpKnQuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT1BLmRhdGEuY29uc3RydWN0b3I7dC5kYXRhPW5ldyBtKG4pO2xldCBmPXQuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTx0LnNpemUubGVuZ3RoLTE7YSsrKWYqPXQuc2l6ZVthXTtsZXQgcD0wO2lmKHQuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKyl0LmRhdGEuc2V0KGVbYV0uZGF0YSxmKnApLHArPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiB0fXZhciBUZT1OcjtmdW5jdGlvbiBTcihlKXtsZXQgQT1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKEEudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCB0PWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTtBPWUuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoQS50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgdD1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7QT1lLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKEEudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgdD1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihBLnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IHQ9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO0E9ZS5zbGljZSgodC0xPj4+MCkrMil9cmV0dXJuIEF9dmFyIHRlPVNyO2Z1bmN0aW9uIE9yKGUsQSl7bGV0IHQ9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgQTwidSImJnR5cGVvZiBBLnBpeGVsVHlwZTwidSImJih0LnBpeGVsVHlwZT1BLnBpeGVsVHlwZSxBLnBpeGVsVHlwZT09PW1lLlNjYWxhciYmdC5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgQTwidSImJnR5cGVvZiBBLmNvbXBvbmVudFR5cGU8InUiJiZBLmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYodC5jb21wb25lbnRUeXBlPUEuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IEsodCk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIEE8InUiJiZ0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1IiYmQS5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBoLlVJbnQ4OmNhc2UgaC5JbnQ4OmNhc2UgaC5VSW50MTY6Y2FzZSBoLkludDE2OmNhc2UgaC5VSW50MzI6Y2FzZSBoLkludDMyOmNhc2UgYi5GbG9hdDMyOmNhc2UgYi5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIGguVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgYi5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBiLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIGguVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSBoLlVJbnQ2NDpjYXNlIGguSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgaC5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2UgaC5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBiLkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBiLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBoLlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBoLkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBKPU9yO3ZhciBKZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3RvcihBLHQpe3RoaXMuZmNuPXQsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkoQSksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyhBLHQ9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOnQsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheShBLmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsQS5mb3JFYWNoKChuLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxuKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCBBPTA7QTx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDtBKyspe2xldCB0PXRoaXMud29ya2VyUXVldWVbQV07dD8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVtBXT1udWxsfX1jYW5jZWwoQSl7bGV0IHQ9dGhpcy5ydW5JbmZvW0FdO3QhPW51bGwmJih0LmNhbmNlbGVkPSEwKX1hZGRUYXNrKEEsdCxyKXtsZXQgbz10aGlzLnJ1bkluZm9bQV07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6biwuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gobiksdGhpcy5ydW5JbmZvW0FdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1t0XT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayhBLGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKG49PntvLnJlamVjdChuKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW3Qscl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsdCxyKX0sNTApKX1jbGVhclRhc2soQSl7dGhpcy5ydW5JbmZvW0FdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW0FdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bQV0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1tBXS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1tBXS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1tBXS5yZXNvbHZlPSgpPT57fX19LExlPUplO3ZhciBQcj17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybToiVHJhbnNmb3JtIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxnPVByO3ZhciBwdD1TeW1ib2woIkNvbWxpbmsucHJveHkiKSx4cj1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxZZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksTWU9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGZlPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxtdD1lPT50eXBlb2YgZT09Im9iamVjdCImJmUhPT1udWxsfHx0eXBlb2YgZT09ImZ1bmN0aW9uIixHcj17Y2FuSGFuZGxlOmU9Pm10KGUpJiZlW3B0XSxzZXJpYWxpemUoZSl7bGV0e3BvcnQxOkEscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmdChlLEEpLFt0LFt0XV19LGRlc2VyaWFsaXplKGUpe3JldHVybiBlLnN0YXJ0KCkscWUoZSl9fSxUcj17Y2FuSGFuZGxlOmU9Pm10KGUpJiZmZSBpbiBlLHNlcmlhbGl6ZSh7dmFsdWU6ZX0pe2xldCBBO3JldHVybiBlIGluc3RhbmNlb2YgRXJyb3I/QT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTplLm1lc3NhZ2UsbmFtZTplLm5hbWUsc3RhY2s6ZS5zdGFja319OkE9e2lzRXJyb3I6ITEsdmFsdWU6ZX0sW0EsW11dfSxkZXNlcmlhbGl6ZShlKXt0aHJvdyBlLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoZS52YWx1ZS5tZXNzYWdlKSxlLnZhbHVlKTplLnZhbHVlfX0sdXQ9bmV3IE1hcChbWyJwcm94eSIsR3JdLFsidGhyb3ciLFRyXV0pO2Z1bmN0aW9uIEpyKGUsQSl7Zm9yKGxldCB0IG9mIGUpaWYoQT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChBKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmdChlLEE9Z2xvYmFsVGhpcyx0PVsiKiJdKXtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7aWYoIW98fCFvLmRhdGEpcmV0dXJuO2lmKCFKcih0LG8ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtvLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDppLHR5cGU6bixwYXRoOm19PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG8uZGF0YSksZj0oby5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChxKSxwO3RyeXtsZXQgYT1tLnNsaWNlKDAsLTEpLnJlZHVjZSgodSxJKT0+dVtJXSxlKSxzPW0ucmVkdWNlKCh1LEkpPT51W0ldLGUpO3N3aXRjaChuKXtjYXNlIkdFVCI6cD1zO2JyZWFrO2Nhc2UiU0VUIjphW20uc2xpY2UoLTEpWzBdXT1xKG8uZGF0YS52YWx1ZSkscD0hMDticmVhaztjYXNlIkFQUExZIjpwPXMuYXBwbHkoYSxmKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCB1PW5ldyBzKC4uLmYpO3A9cXIodSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTp1LHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtmdChlLEkpLHA9S2UodSxbdV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6cD12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGEpe3A9e3ZhbHVlOmEsW2ZlXTowfX1Qcm9taXNlLnJlc29sdmUocCkuY2F0Y2goYT0+KHt2YWx1ZTphLFtmZV06MH0pKS50aGVuKGE9PntsZXRbcyx1XT1kZShhKTtBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6aX0pLHUpLG49PT0iUkVMRUFTRSImJihBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLGN0KEEpLE1lIGluIGUmJnR5cGVvZiBlW01lXT09ImZ1bmN0aW9uIiYmZVtNZV0oKSl9KS5jYXRjaChhPT57bGV0W3MsdV09ZGUoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtmZV06MH0pO0EucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDppfSksdSl9KX0pLEEuc3RhcnQmJkEuc3RhcnQoKX1mdW5jdGlvbiBMcihlKXtyZXR1cm4gZS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBjdChlKXtMcihlKSYmZS5jbG9zZSgpfWZ1bmN0aW9uIHFlKGUsQSl7cmV0dXJuIEhlKGUsW10sQSl9ZnVuY3Rpb24gdWUoZSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEJ0KGUpe3JldHVybiBqKGUse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e2N0KGUpfSl9dmFyIGNlPW5ldyBXZWFrTWFwLEJlPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoZT0+e2xldCBBPShjZS5nZXQoZSl8fDApLTE7Y2Uuc2V0KGUsQSksQT09PTAmJkJ0KGUpfSk7ZnVuY3Rpb24gTXIoZSxBKXtsZXQgdD0oY2UuZ2V0KEEpfHwwKSsxO2NlLnNldChBLHQpLEJlJiZCZS5yZWdpc3RlcihlLEEsZSl9ZnVuY3Rpb24gSHIoZSl7QmUmJkJlLnVucmVnaXN0ZXIoZSl9ZnVuY3Rpb24gSGUoZSxBPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxvPW5ldyBQcm94eSh0LHtnZXQoaSxuKXtpZih1ZShyKSxuPT09WWUpcmV0dXJuKCk9PntIcihvKSxCdChlKSxyPSEwfTtpZihuPT09InRoZW4iKXtpZihBLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm99O2xldCBtPWooZSx7dHlwZToiR0VUIixwYXRoOkEubWFwKGY9PmYudG9TdHJpbmcoKSl9KS50aGVuKHEpO3JldHVybiBtLnRoZW4uYmluZChtKX1yZXR1cm4gSGUoZSxbLi4uQSxuXSl9LHNldChpLG4sbSl7dWUocik7bGV0W2YscF09ZGUobSk7cmV0dXJuIGooZSx7dHlwZToiU0VUIixwYXRoOlsuLi5BLG5dLm1hcChhPT5hLnRvU3RyaW5nKCkpLHZhbHVlOmZ9LHApLnRoZW4ocSl9LGFwcGx5KGksbixtKXt1ZShyKTtsZXQgZj1BW0EubGVuZ3RoLTFdO2lmKGY9PT14cilyZXR1cm4gaihlLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKHEpO2lmKGY9PT0iYmluZCIpcmV0dXJuIEhlKGUsQS5zbGljZSgwLC0xKSk7bGV0W3AsYV09bHQobSk7cmV0dXJuIGooZSx7dHlwZToiQVBQTFkiLHBhdGg6QS5tYXAocz0+cy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6cH0sYSkudGhlbihxKX0sY29uc3RydWN0KGksbil7dWUocik7bGV0W20sZl09bHQobik7cmV0dXJuIGooZSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOkEubWFwKHA9PnAudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Om19LGYpLnRoZW4ocSl9fSk7cmV0dXJuIE1yKG8sZSksb31mdW5jdGlvbiBZcihlKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxlKX1mdW5jdGlvbiBsdChlKXtsZXQgQT1lLm1hcChkZSk7cmV0dXJuW0EubWFwKHQ9PnRbMF0pLFlyKEEubWFwKHQ9PnRbMV0pKV19dmFyIGR0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIEtlKGUsQSl7cmV0dXJuIGR0LnNldChlLEEpLGV9ZnVuY3Rpb24gcXIoZSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oZSx7W3B0XTohMH0pfWZ1bmN0aW9uIGRlKGUpe2ZvcihsZXRbQSx0XW9mIHV0KWlmKHQuY2FuSGFuZGxlKGUpKXtsZXRbcixvXT10LnNlcmlhbGl6ZShlKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6QSx2YWx1ZTpyfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6ZX0sZHQuZ2V0KGUpfHxbXV19ZnVuY3Rpb24gcShlKXtzd2l0Y2goZS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiB1dC5nZXQoZS5uYW1lKS5kZXNlcmlhbGl6ZShlLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIGUudmFsdWV9fWZ1bmN0aW9uIGooZSxBLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG89S3IoKTtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGkobil7IW4uZGF0YXx8IW4uZGF0YS5pZHx8bi5kYXRhLmlkIT09b3x8KGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaSkscihuLmRhdGEpKX0pLGUuc3RhcnQmJmUuc3RhcnQoKSxlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm99LEEpLHQpfSl9ZnVuY3Rpb24gS3IoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHJlKGUsQSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkoQSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6anJ9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnplfT1PYmplY3QsRWU9KGU9PkE9PntsZXQgdD1qci5jYWxsKEEpO3JldHVybiBlW3RdfHwoZVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSkseD1lPT4oZT1lLnRvTG93ZXJDYXNlKCksQT0+RWUoQSk9PT1lKSx5ZT1lPT5BPT50eXBlb2YgQT09PWUse2lzQXJyYXk6dn09QXJyYXksaWU9eWUoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHZyKGUpe3JldHVybiBlIT09bnVsbCYmIWllKGUpJiZlLmNvbnN0cnVjdG9yIT09bnVsbCYmIWllKGUuY29uc3RydWN0b3IpJiZTKGUuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKGUpfXZhciBRdD14KCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIHpyKGUpe2xldCBBO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/QT1BcnJheUJ1ZmZlci5pc1ZpZXcoZSk6QT1lJiZlLmJ1ZmZlciYmUXQoZS5idWZmZXIpLEF9dmFyIF9yPXllKCJzdHJpbmciKSxTPXllKCJmdW5jdGlvbiIpLGh0PXllKCJudW1iZXIiKSxRZT1lPT5lIT09bnVsbCYmdHlwZW9mIGU9PSJvYmplY3QiLFZyPWU9PmU9PT0hMHx8ZT09PSExLENlPWU9PntpZihFZShlKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBBPXplKGUpO3JldHVybihBPT09bnVsbHx8QT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihBKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBlKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gZSl9LFpyPXgoIkRhdGUiKSxYcj14KCJGaWxlIiksJHI9eCgiQmxvYiIpLGVpPXgoIkZpbGVMaXN0IiksQWk9ZT0+UWUoZSkmJlMoZS5waXBlKSx0aT1lPT57bGV0IEE7cmV0dXJuIGUmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJmUgaW5zdGFuY2VvZiBGb3JtRGF0YXx8UyhlLmFwcGVuZCkmJigoQT1FZShlKSk9PT0iZm9ybWRhdGEifHxBPT09Im9iamVjdCImJlMoZS50b1N0cmluZykmJmUudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0scmk9eCgiVVJMU2VhcmNoUGFyYW1zIiksaWk9ZT0+ZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIG9lKGUsQSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoZT09PW51bGx8fHR5cGVvZiBlPiJ1IilyZXR1cm47bGV0IHIsbztpZih0eXBlb2YgZSE9Im9iamVjdCImJihlPVtlXSksdihlKSlmb3Iocj0wLG89ZS5sZW5ndGg7cjxvO3IrKylBLmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpOk9iamVjdC5rZXlzKGUpLG49aS5sZW5ndGgsbTtmb3Iocj0wO3I8bjtyKyspbT1pW3JdLEEuY2FsbChudWxsLGVbbV0sbSxlKX19ZnVuY3Rpb24gd3QoZSxBKXtBPUEudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhlKSxyPXQubGVuZ3RoLG87Zm9yKDtyLS0gPjA7KWlmKG89dFtyXSxBPT09by50b0xvd2VyQ2FzZSgpKXJldHVybiBvO3JldHVybiBudWxsfXZhciBSdD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLGt0PWU9PiFpZShlKSYmZSE9PVJ0O2Z1bmN0aW9uIHZlKCl7bGV0e2Nhc2VsZXNzOmV9PWt0KHRoaXMpJiZ0aGlzfHx7fSxBPXt9LHQ9KHIsbyk9PntsZXQgaT1lJiZ3dChBLG8pfHxvO0NlKEFbaV0pJiZDZShyKT9BW2ldPXZlKEFbaV0scik6Q2Uocik/QVtpXT12ZSh7fSxyKTp2KHIpP0FbaV09ci5zbGljZSgpOkFbaV09cn07Zm9yKGxldCByPTAsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspYXJndW1lbnRzW3JdJiZvZShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIEF9dmFyIG9pPShlLEEsdCx7YWxsT3duS2V5czpyfT17fSk9PihvZShBLChvLGkpPT57dCYmUyhvKT9lW2ldPXJlKG8sdCk6ZVtpXT1vfSx7YWxsT3duS2V5czpyfSksZSksYWk9ZT0+KGUuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoZT1lLnNsaWNlKDEpKSxlKSxuaT0oZSxBLHQscik9PntlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEEucHJvdG90eXBlLHIpLGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsInN1cGVyIix7dmFsdWU6QS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKGUucHJvdG90eXBlLHQpfSxzaT0oZSxBLHQscik9PntsZXQgbyxpLG4sbT17fTtpZihBPUF8fHt9LGU9PW51bGwpcmV0dXJuIEE7ZG97Zm9yKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZSksaT1vLmxlbmd0aDtpLS0gPjA7KW49b1tpXSwoIXJ8fHIobixlLEEpKSYmIW1bbl0mJihBW25dPWVbbl0sbVtuXT0hMCk7ZT10IT09ITEmJnplKGUpfXdoaWxlKGUmJighdHx8dChlLEEpKSYmZSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBBfSxJaT0oZSxBLHQpPT57ZT1TdHJpbmcoZSksKHQ9PT12b2lkIDB8fHQ+ZS5sZW5ndGgpJiYodD1lLmxlbmd0aCksdC09QS5sZW5ndGg7bGV0IHI9ZS5pbmRleE9mKEEsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LGdpPWU9PntpZighZSlyZXR1cm4gbnVsbDtpZih2KGUpKXJldHVybiBlO2xldCBBPWUubGVuZ3RoO2lmKCFodChBKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoQSk7Zm9yKDtBLS0gPjA7KXRbQV09ZVtBXTtyZXR1cm4gdH0sbGk9KGU9PkE9PmUmJkEgaW5zdGFuY2VvZiBlKSh0eXBlb2YgVWludDhBcnJheTwidSImJnplKFVpbnQ4QXJyYXkpKSxwaT0oZSxBKT0+e2xldCByPShlJiZlW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoZSksbztmb3IoOyhvPXIubmV4dCgpKSYmIW8uZG9uZTspe2xldCBpPW8udmFsdWU7QS5jYWxsKGUsaVswXSxpWzFdKX19LG1pPShlLEEpPT57bGV0IHQscj1bXTtmb3IoOyh0PWUuZXhlYyhBKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LHVpPXgoIkhUTUxGb3JtRWxlbWVudCIpLGZpPWU9PmUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixvKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK299KSxFdD0oKHtoYXNPd25Qcm9wZXJ0eTplfSk9PihBLHQpPT5lLmNhbGwoQSx0KSkoT2JqZWN0LnByb3RvdHlwZSksY2k9eCgiUmVnRXhwIiksYnQ9KGUsQSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlKSxyPXt9O29lKHQsKG8saSk9PntsZXQgbjsobj1BKG8saSxlKSkhPT0hMSYmKHJbaV09bnx8byl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLHIpfSxCaT1lPT57YnQoZSwoQSx0KT0+e2lmKFMoZSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPWVbdF07aWYoUyhyKSl7aWYoQS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBBKXtBLndyaXRhYmxlPSExO3JldHVybn1BLnNldHx8KEEuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxkaT0oZSxBKT0+e2xldCB0PXt9LHI9bz0+e28uZm9yRWFjaChpPT57dFtpXT0hMH0pfTtyZXR1cm4gdihlKT9yKGUpOnIoU3RyaW5nKGUpLnNwbGl0KEEpKSx0fSxDaT0oKT0+e30sRWk9KGUsQSk9PihlPStlLE51bWJlci5pc0Zpbml0ZShlKT9lOkEpLGplPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIseXQ9IjAxMjM0NTY3ODkiLER0PXtESUdJVDp5dCxBTFBIQTpqZSxBTFBIQV9ESUdJVDpqZStqZS50b1VwcGVyQ2FzZSgpK3l0fSx5aT0oZT0xNixBPUR0LkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09QTtmb3IoO2UtLTspdCs9QVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFFpKGUpe3JldHVybiEhKGUmJlMoZS5hcHBlbmQpJiZlW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZlW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBoaT1lPT57bGV0IEE9bmV3IEFycmF5KDEwKSx0PShyLG8pPT57aWYoUWUocikpe2lmKEEuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtBW29dPXI7bGV0IGk9dihyKT9bXTp7fTtyZXR1cm4gb2UociwobixtKT0+e2xldCBmPXQobixvKzEpOyFpZShmKSYmKGlbbV09Zil9KSxBW29dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIHQoZSwwKX0sd2k9eCgiQXN5bmNGdW5jdGlvbiIpLFJpPWU9PmUmJihRZShlKXx8UyhlKSkmJlMoZS50aGVuKSYmUyhlLmNhdGNoKSxjPXtpc0FycmF5OnYsaXNBcnJheUJ1ZmZlcjpRdCxpc0J1ZmZlcjp2cixpc0Zvcm1EYXRhOnRpLGlzQXJyYXlCdWZmZXJWaWV3OnpyLGlzU3RyaW5nOl9yLGlzTnVtYmVyOmh0LGlzQm9vbGVhbjpWcixpc09iamVjdDpRZSxpc1BsYWluT2JqZWN0OkNlLGlzVW5kZWZpbmVkOmllLGlzRGF0ZTpacixpc0ZpbGU6WHIsaXNCbG9iOiRyLGlzUmVnRXhwOmNpLGlzRnVuY3Rpb246Uyxpc1N0cmVhbTpBaSxpc1VSTFNlYXJjaFBhcmFtczpyaSxpc1R5cGVkQXJyYXk6bGksaXNGaWxlTGlzdDplaSxmb3JFYWNoOm9lLG1lcmdlOnZlLGV4dGVuZDpvaSx0cmltOmlpLHN0cmlwQk9NOmFpLGluaGVyaXRzOm5pLHRvRmxhdE9iamVjdDpzaSxraW5kT2Y6RWUsa2luZE9mVGVzdDp4LGVuZHNXaXRoOklpLHRvQXJyYXk6Z2ksZm9yRWFjaEVudHJ5OnBpLG1hdGNoQWxsOm1pLGlzSFRNTEZvcm06dWksaGFzT3duUHJvcGVydHk6RXQsaGFzT3duUHJvcDpFdCxyZWR1Y2VEZXNjcmlwdG9yczpidCxmcmVlemVNZXRob2RzOkJpLHRvT2JqZWN0U2V0OmRpLHRvQ2FtZWxDYXNlOmZpLG5vb3A6Q2ksdG9GaW5pdGVOdW1iZXI6RWksZmluZEtleTp3dCxnbG9iYWw6UnQsaXNDb250ZXh0RGVmaW5lZDprdCxBTFBIQUJFVDpEdCxnZW5lcmF0ZVN0cmluZzp5aSxpc1NwZWNDb21wbGlhbnRGb3JtOlFpLHRvSlNPTk9iamVjdDpoaSxpc0FzeW5jRm46d2ksaXNUaGVuYWJsZTpSaX07ZnVuY3Rpb24geihlLEEsdCxyLG8pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1lLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsQSYmKHRoaXMuY29kZT1BKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxvJiYodGhpcy5yZXNwb25zZT1vKX1jLmluaGVyaXRzKHosRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpjLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBXdD16LnByb3RvdHlwZSxGdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKGU9PntGdFtlXT17dmFsdWU6ZX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh6LEZ0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoV3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7ei5mcm9tPShlLEEsdCxyLG8saSk9PntsZXQgbj1PYmplY3QuY3JlYXRlKFd0KTtyZXR1cm4gYy50b0ZsYXRPYmplY3QoZSxuLGZ1bmN0aW9uKGYpe3JldHVybiBmIT09RXJyb3IucHJvdG90eXBlfSxtPT5tIT09ImlzQXhpb3NFcnJvciIpLHouY2FsbChuLGUubWVzc2FnZSxBLHQscixvKSxuLmNhdXNlPWUsbi5uYW1lPWUubmFtZSxpJiZPYmplY3QuYXNzaWduKG4saSksbn07dmFyIHc9ejt2YXIgaGU9bnVsbDtmdW5jdGlvbiBfZShlKXtyZXR1cm4gYy5pc1BsYWluT2JqZWN0KGUpfHxjLmlzQXJyYXkoZSl9ZnVuY3Rpb24gTnQoZSl7cmV0dXJuIGMuZW5kc1dpdGgoZSwiW10iKT9lLnNsaWNlKDAsLTIpOmV9ZnVuY3Rpb24gVXQoZSxBLHQpe3JldHVybiBlP2UuY29uY2F0KEEpLm1hcChmdW5jdGlvbihvLGkpe3JldHVybiBvPU50KG8pLCF0JiZpPyJbIitvKyJdIjpvfSkuam9pbih0PyIuIjoiIik6QX1mdW5jdGlvbiBraShlKXtyZXR1cm4gYy5pc0FycmF5KGUpJiYhZS5zb21lKF9lKX12YXIgYmk9Yy50b0ZsYXRPYmplY3QoYyx7fSxudWxsLGZ1bmN0aW9uKEEpe3JldHVybi9eaXNbQS1aXS8udGVzdChBKX0pO2Z1bmN0aW9uIERpKGUsQSx0KXtpZighYy5pc09iamVjdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtBPUF8fG5ldyhoZXx8Rm9ybURhdGEpLHQ9Yy50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKEIsUSl7cmV0dXJuIWMuaXNVbmRlZmluZWQoUVtCXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbz10LnZpc2l0b3J8fGEsaT10LmRvdHMsbj10LmluZGV4ZXMsZj0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZjLmlzU3BlY0NvbXBsaWFudEZvcm0oQSk7aWYoIWMuaXNGdW5jdGlvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIHAobCl7aWYobD09PW51bGwpcmV0dXJuIiI7aWYoYy5pc0RhdGUobCkpcmV0dXJuIGwudG9JU09TdHJpbmcoKTtpZighZiYmYy5pc0Jsb2IobCkpdGhyb3cgbmV3IHcoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGMuaXNBcnJheUJ1ZmZlcihsKXx8Yy5pc1R5cGVkQXJyYXkobCk/ZiYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW2xdKTpCdWZmZXIuZnJvbShsKTpsfWZ1bmN0aW9uIGEobCxCLFEpe2xldCBSPWw7aWYobCYmIVEmJnR5cGVvZiBsPT0ib2JqZWN0Iil7aWYoYy5lbmRzV2l0aChCLCJ7fSIpKUI9cj9COkIuc2xpY2UoMCwtMiksbD1KU09OLnN0cmluZ2lmeShsKTtlbHNlIGlmKGMuaXNBcnJheShsKSYma2kobCl8fChjLmlzRmlsZUxpc3QobCl8fGMuZW5kc1dpdGgoQiwiW10iKSkmJihSPWMudG9BcnJheShsKSkpcmV0dXJuIEI9TnQoQiksUi5mb3JFYWNoKGZ1bmN0aW9uKFAsUXIpeyEoYy5pc1VuZGVmaW5lZChQKXx8UD09PW51bGwpJiZBLmFwcGVuZChuPT09ITA/VXQoW0JdLFFyLGkpOm49PT1udWxsP0I6QisiW10iLHAoUCkpfSksITF9cmV0dXJuIF9lKGwpPyEwOihBLmFwcGVuZChVdChRLEIsaSkscChsKSksITEpfWxldCBzPVtdLHU9T2JqZWN0LmFzc2lnbihiaSx7ZGVmYXVsdFZpc2l0b3I6YSxjb252ZXJ0VmFsdWU6cCxpc1Zpc2l0YWJsZTpfZX0pO2Z1bmN0aW9uIEkobCxCKXtpZighYy5pc1VuZGVmaW5lZChsKSl7aWYocy5pbmRleE9mKGwpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK0Iuam9pbigiLiIpKTtzLnB1c2gobCksYy5mb3JFYWNoKGwsZnVuY3Rpb24oUixPKXsoIShjLmlzVW5kZWZpbmVkKFIpfHxSPT09bnVsbCkmJm8uY2FsbChBLFIsYy5pc1N0cmluZyhPKT9PLnRyaW0oKTpPLEIsdSkpPT09ITAmJkkoUixCP0IuY29uY2F0KE8pOltPXSl9KSxzLnBvcCgpfX1pZighYy5pc09iamVjdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEkoZSksQX12YXIgTD1EaTtmdW5jdGlvbiBTdChlKXtsZXQgQT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gQVtyXX0pfWZ1bmN0aW9uIE90KGUsQSl7dGhpcy5fcGFpcnM9W10sZSYmTChlLHRoaXMsQSl9dmFyIFB0PU90LnByb3RvdHlwZTtQdC5hcHBlbmQ9ZnVuY3Rpb24oQSx0KXt0aGlzLl9wYWlycy5wdXNoKFtBLHRdKX07UHQudG9TdHJpbmc9ZnVuY3Rpb24oQSl7bGV0IHQ9QT9mdW5jdGlvbihyKXtyZXR1cm4gQS5jYWxsKHRoaXMscixTdCl9OlN0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIHQob1swXSkrIj0iK3Qob1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciB3ZT1PdDtmdW5jdGlvbiBXaShlKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KGUpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBhZShlLEEsdCl7aWYoIUEpcmV0dXJuIGU7bGV0IHI9dCYmdC5lbmNvZGV8fFdpLG89dCYmdC5zZXJpYWxpemUsaTtpZihvP2k9byhBLHQpOmk9Yy5pc1VSTFNlYXJjaFBhcmFtcyhBKT9BLnRvU3RyaW5nKCk6bmV3IHdlKEEsdCkudG9TdHJpbmcociksaSl7bGV0IG49ZS5pbmRleE9mKCIjIik7biE9PS0xJiYoZT1lLnNsaWNlKDAsbikpLGUrPShlLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIGV9dmFyIFZlPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoQSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpBLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoQSl7dGhpcy5oYW5kbGVyc1tBXSYmKHRoaXMuaGFuZGxlcnNbQV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChBKXtjLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmQShyKX0pfX0sWmU9VmU7dmFyIFJlPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgeHQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOndlO3ZhciBHdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIFR0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIEp0PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOnh0LEZvcm1EYXRhOkd0LEJsb2I6VHR9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWGU9e307d3IoWGUse2hhc0Jyb3dzZXJFbnY6KCk9Pkx0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+RmksaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5VaX0pO3ZhciBMdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixGaT0oZT0+THQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoZSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxVaT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIFc9ey4uLlhlLC4uLkp0fTtmdW5jdGlvbiAkZShlLEEpe3JldHVybiBMKGUsbmV3IFcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbyxpKXtyZXR1cm4gVy5pc05vZGUmJmMuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEEpKX1mdW5jdGlvbiBOaShlKXtyZXR1cm4gYy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csZSkubWFwKEE9PkFbMF09PT0iW10iPyIiOkFbMV18fEFbMF0pfWZ1bmN0aW9uIFNpKGUpe2xldCBBPXt9LHQ9T2JqZWN0LmtleXMoZSkscixvPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG87cisrKWk9dFtyXSxBW2ldPWVbaV07cmV0dXJuIEF9ZnVuY3Rpb24gT2koZSl7ZnVuY3Rpb24gQSh0LHIsbyxpKXtsZXQgbj10W2krK107aWYobj09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBtPU51bWJlci5pc0Zpbml0ZSgrbiksZj1pPj10Lmxlbmd0aDtyZXR1cm4gbj0hbiYmYy5pc0FycmF5KG8pP28ubGVuZ3RoOm4sZj8oYy5oYXNPd25Qcm9wKG8sbik/b1tuXT1bb1tuXSxyXTpvW25dPXIsIW0pOigoIW9bbl18fCFjLmlzT2JqZWN0KG9bbl0pKSYmKG9bbl09W10pLEEodCxyLG9bbl0saSkmJmMuaXNBcnJheShvW25dKSYmKG9bbl09U2kob1tuXSkpLCFtKX1pZihjLmlzRm9ybURhdGEoZSkmJmMuaXNGdW5jdGlvbihlLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gYy5mb3JFYWNoRW50cnkoZSwocixvKT0+e0EoTmkociksbyx0LDApfSksdH1yZXR1cm4gbnVsbH12YXIga2U9T2k7ZnVuY3Rpb24gUGkoZSxBLHQpe2lmKGMuaXNTdHJpbmcoZSkpdHJ5e3JldHVybihBfHxKU09OLnBhcnNlKShlKSxjLnRyaW0oZSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoZSl9dmFyIGVBPXt0cmFuc2l0aW9uYWw6UmUsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihBLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbz1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPWMuaXNPYmplY3QoQSk7aWYoaSYmYy5pc0hUTUxGb3JtKEEpJiYoQT1uZXcgRm9ybURhdGEoQSkpLGMuaXNGb3JtRGF0YShBKSlyZXR1cm4gbz9KU09OLnN0cmluZ2lmeShrZShBKSk6QTtpZihjLmlzQXJyYXlCdWZmZXIoQSl8fGMuaXNCdWZmZXIoQSl8fGMuaXNTdHJlYW0oQSl8fGMuaXNGaWxlKEEpfHxjLmlzQmxvYihBKSlyZXR1cm4gQTtpZihjLmlzQXJyYXlCdWZmZXJWaWV3KEEpKXJldHVybiBBLmJ1ZmZlcjtpZihjLmlzVVJMU2VhcmNoUGFyYW1zKEEpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLEEudG9TdHJpbmcoKTtsZXQgbTtpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiAkZShBLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKG09Yy5pc0ZpbGVMaXN0KEEpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBmPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gTChtP3siZmlsZXNbXSI6QX06QSxmJiZuZXcgZix0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG8/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxQaShBKSk6QX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihBKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8ZUEudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxvPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKEEmJmMuaXNTdHJpbmcoQSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG8pKXtsZXQgbj0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZvO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShBKX1jYXRjaChtKXtpZihuKXRocm93IG0ubmFtZT09PSJTeW50YXhFcnJvciI/dy5mcm9tKG0sdy5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTptfX1yZXR1cm4gQX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6Vy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6Vy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKEEpe3JldHVybiBBPj0yMDAmJkE8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Yy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLGU9PntlQS5oZWFkZXJzW2VdPXt9fSk7dmFyIF89ZUE7dmFyIHhpPWMudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksTXQ9ZT0+e2xldCBBPXt9LHQscixvO3JldHVybiBlJiZlLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihuKXtvPW4uaW5kZXhPZigiOiIpLHQ9bi5zdWJzdHJpbmcoMCxvKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW4uc3Vic3RyaW5nKG8rMSkudHJpbSgpLCEoIXR8fEFbdF0mJnhpW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/QVt0XT9BW3RdLnB1c2gocik6QVt0XT1bcl06QVt0XT1BW3RdP0FbdF0rIiwgIityOnIpfSksQX07dmFyIEh0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gbmUoZSl7cmV0dXJuIGUmJlN0cmluZyhlKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBiZShlKXtyZXR1cm4gZT09PSExfHxlPT1udWxsP2U6Yy5pc0FycmF5KGUpP2UubWFwKGJlKTpTdHJpbmcoZSl9ZnVuY3Rpb24gR2koZSl7bGV0IEE9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKGUpOylBW3JbMV1dPXJbMl07cmV0dXJuIEF9dmFyIFRpPWU9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoZS50cmltKCkpO2Z1bmN0aW9uIEFBKGUsQSx0LHIsbyl7aWYoYy5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxBLHQpO2lmKG8mJihBPXQpLCEhYy5pc1N0cmluZyhBKSl7aWYoYy5pc1N0cmluZyhyKSlyZXR1cm4gQS5pbmRleE9mKHIpIT09LTE7aWYoYy5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KEEpfX1mdW5jdGlvbiBKaShlKXtyZXR1cm4gZS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChBLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBMaShlLEEpe2xldCB0PWMudG9DYW1lbENhc2UoIiAiK0EpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KGUscit0LHt2YWx1ZTpmdW5jdGlvbihvLGksbil7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLEEsbyxpLG4pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBWPWNsYXNze2NvbnN0cnVjdG9yKEEpe0EmJnRoaXMuc2V0KEEpfXNldChBLHQscil7bGV0IG89dGhpcztmdW5jdGlvbiBpKG0sZixwKXtsZXQgYT1uZShmKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IHM9Yy5maW5kS2V5KG8sYSk7KCFzfHxvW3NdPT09dm9pZCAwfHxwPT09ITB8fHA9PT12b2lkIDAmJm9bc10hPT0hMSkmJihvW3N8fGZdPWJlKG0pKX1sZXQgbj0obSxmKT0+Yy5mb3JFYWNoKG0sKHAsYSk9PmkocCxhLGYpKTtyZXR1cm4gYy5pc1BsYWluT2JqZWN0KEEpfHxBIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9uKEEsdCk6Yy5pc1N0cmluZyhBKSYmKEE9QS50cmltKCkpJiYhVGkoQSk/bihNdChBKSx0KTpBIT1udWxsJiZpKHQsQSxyKSx0aGlzfWdldChBLHQpe2lmKEE9bmUoQSksQSl7bGV0IHI9Yy5maW5kS2V5KHRoaXMsQSk7aWYocil7bGV0IG89dGhpc1tyXTtpZighdClyZXR1cm4gbztpZih0PT09ITApcmV0dXJuIEdpKG8pO2lmKGMuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbyxyKTtpZihjLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhBLHQpe2lmKEE9bmUoQSksQSl7bGV0IHI9Yy5maW5kS2V5KHRoaXMsQSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxBQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShBLHQpe2xldCByPXRoaXMsbz0hMTtmdW5jdGlvbiBpKG4pe2lmKG49bmUobiksbil7bGV0IG09Yy5maW5kS2V5KHIsbik7bSYmKCF0fHxBQShyLHJbbV0sbSx0KSkmJihkZWxldGUgclttXSxvPSEwKX19cmV0dXJuIGMuaXNBcnJheShBKT9BLmZvckVhY2goaSk6aShBKSxvfWNsZWFyKEEpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbz0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFBfHxBQSh0aGlzLHRoaXNbaV0saSxBLCEwKSkmJihkZWxldGUgdGhpc1tpXSxvPSEwKX1yZXR1cm4gb31ub3JtYWxpemUoQSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBjLmZvckVhY2godGhpcywobyxpKT0+e2xldCBuPWMuZmluZEtleShyLGkpO2lmKG4pe3Rbbl09YmUobyksZGVsZXRlIHRbaV07cmV0dXJufWxldCBtPUE/SmkoaSk6U3RyaW5nKGkpLnRyaW0oKTttIT09aSYmZGVsZXRlIHRbaV0sdFttXT1iZShvKSxyW21dPSEwfSksdGhpc31jb25jYXQoLi4uQSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uQSl9dG9KU09OKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChyLG8pPT57ciE9bnVsbCYmciE9PSExJiYodFtvXT1BJiZjLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbQSx0XSk9PkErIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShBKXtyZXR1cm4gQSBpbnN0YW5jZW9mIHRoaXM/QTpuZXcgdGhpcyhBKX1zdGF0aWMgY29uY2F0KEEsLi4udCl7bGV0IHI9bmV3IHRoaXMoQSk7cmV0dXJuIHQuZm9yRWFjaChvPT5yLnNldChvKSkscn1zdGF0aWMgYWNjZXNzb3IoQSl7bGV0IHI9KHRoaXNbSHRdPXRoaXNbSHRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG4pe2xldCBtPW5lKG4pO3JbbV18fChMaShvLG4pLHJbbV09ITApfXJldHVybiBjLmlzQXJyYXkoQSk/QS5mb3JFYWNoKGkpOmkoQSksdGhpc319O1YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2MucmVkdWNlRGVzY3JpcHRvcnMoVi5wcm90b3R5cGUsKHt2YWx1ZTplfSxBKT0+e2xldCB0PUFbMF0udG9VcHBlckNhc2UoKStBLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PmUsc2V0KHIpe3RoaXNbdF09cn19fSk7Yy5mcmVlemVNZXRob2RzKFYpO3ZhciBGPVY7ZnVuY3Rpb24gc2UoZSxBKXtsZXQgdD10aGlzfHxfLHI9QXx8dCxvPUYuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBjLmZvckVhY2goZSxmdW5jdGlvbihtKXtpPW0uY2FsbCh0LGksby5ub3JtYWxpemUoKSxBP0Euc3RhdHVzOnZvaWQgMCl9KSxvLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gSWUoZSl7cmV0dXJuISEoZSYmZS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBZdChlLEEsdCl7dy5jYWxsKHRoaXMsZT8/ImNhbmNlbGVkIix3LkVSUl9DQU5DRUxFRCxBLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9Yy5pbmhlcml0cyhZdCx3LHtfX0NBTkNFTF9fOiEwfSk7dmFyIE09WXQ7ZnVuY3Rpb24gdEEoZSxBLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP2UodCk6QShuZXcgdygiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFt3LkVSUl9CQURfUkVRVUVTVCx3LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciBxdD1XLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoZSxBLHQscixvLGkpe2xldCBuPVtlKyI9IitlbmNvZGVVUklDb21wb25lbnQoQSldO2MuaXNOdW1iZXIodCkmJm4ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLGMuaXNTdHJpbmcocikmJm4ucHVzaCgicGF0aD0iK3IpLGMuaXNTdHJpbmcobykmJm4ucHVzaCgiZG9tYWluPSIrbyksaT09PSEwJiZuLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1uLmpvaW4oIjsgIil9LHJlYWQoZSl7bGV0IEE9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gQT9kZWNvZGVVUklDb21wb25lbnQoQVszXSk6bnVsbH0scmVtb3ZlKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiByQShlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfWZ1bmN0aW9uIGlBKGUsQSl7cmV0dXJuIEE/ZS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrQS5yZXBsYWNlKC9eXC8rLywiIik6ZX1mdW5jdGlvbiBnZShlLEEpe3JldHVybiBlJiYhckEoQSk/aUEoZSxBKTpBfXZhciBLdD1XLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBBPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBvKGkpe2xldCBuPWk7cmV0dXJuIEEmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbiksbj10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixuKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9byh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obil7bGV0IG09Yy5pc1N0cmluZyhuKT9vKG4pOm47cmV0dXJuIG0ucHJvdG9jb2w9PT1yLnByb3RvY29sJiZtLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIG9BKGUpe2xldCBBPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKGUpO3JldHVybiBBJiZBWzFdfHwiIn1mdW5jdGlvbiBNaShlLEEpe2U9ZXx8MTA7bGV0IHQ9bmV3IEFycmF5KGUpLHI9bmV3IEFycmF5KGUpLG89MCxpPTAsbjtyZXR1cm4gQT1BIT09dm9pZCAwP0E6MWUzLGZ1bmN0aW9uKGYpe2xldCBwPURhdGUubm93KCksYT1yW2ldO258fChuPXApLHRbb109ZixyW29dPXA7bGV0IHM9aSx1PTA7Zm9yKDtzIT09bzspdSs9dFtzKytdLHM9cyVlO2lmKG89KG8rMSklZSxvPT09aSYmKGk9KGkrMSklZSkscC1uPEEpcmV0dXJuO2xldCBJPWEmJnAtYTtyZXR1cm4gST9NYXRoLnJvdW5kKHUqMWUzL0kpOnZvaWQgMH19dmFyIGp0PU1pO2Z1bmN0aW9uIHZ0KGUsQSl7bGV0IHQ9MCxyPWp0KDUwLDI1MCk7cmV0dXJuIG89PntsZXQgaT1vLmxvYWRlZCxuPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxtPWktdCxmPXIobSkscD1pPD1uO3Q9aTtsZXQgYT17bG9hZGVkOmksdG90YWw6bixwcm9ncmVzczpuP2kvbjp2b2lkIDAsYnl0ZXM6bSxyYXRlOmZ8fHZvaWQgMCxlc3RpbWF0ZWQ6ZiYmbiYmcD8obi1pKS9mOnZvaWQgMCxldmVudDpvfTthW0E/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsZShhKX19dmFyIEhpPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsenQ9SGkmJmZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBvPWUuZGF0YSxpPUYuZnJvbShlLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6bix3aXRoWFNSRlRva2VuOm19PWUsZjtmdW5jdGlvbiBwKCl7ZS5jYW5jZWxUb2tlbiYmZS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShmKSxlLnNpZ25hbCYmZS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpfWxldCBhO2lmKGMuaXNGb3JtRGF0YShvKSl7aWYoVy5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKGE9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbQiwuLi5RXT1hP2Euc3BsaXQoIjsiKS5tYXAoUj0+Ui50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtCfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uUV0uam9pbigiOyAiKSl9fWxldCBzPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihlLmF1dGgpe2xldCBCPWUuYXV0aC51c2VybmFtZXx8IiIsUT1lLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGUuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKEIrIjoiK1EpKX1sZXQgdT1nZShlLmJhc2VVUkwsZS51cmwpO3Mub3BlbihlLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGFlKHUsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKSwhMCkscy50aW1lb3V0PWUudGltZW91dDtmdW5jdGlvbiBJKCl7aWYoIXMpcmV0dXJuO2xldCBCPUYuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIHMmJnMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFI9e2RhdGE6IW58fG49PT0idGV4dCJ8fG49PT0ianNvbiI/cy5yZXNwb25zZVRleHQ6cy5yZXNwb25zZSxzdGF0dXM6cy5zdGF0dXMsc3RhdHVzVGV4dDpzLnN0YXR1c1RleHQsaGVhZGVyczpCLGNvbmZpZzplLHJlcXVlc3Q6c307dEEoZnVuY3Rpb24oUCl7dChQKSxwKCl9LGZ1bmN0aW9uKFApe3IoUCkscCgpfSxSKSxzPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBzP3Mub25sb2FkZW5kPUk6cy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshc3x8cy5yZWFkeVN0YXRlIT09NHx8cy5zdGF0dXM9PT0wJiYhKHMucmVzcG9uc2VVUkwmJnMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KEkpfSxzLm9uYWJvcnQ9ZnVuY3Rpb24oKXtzJiYocihuZXcgdygiUmVxdWVzdCBhYm9ydGVkIix3LkVDT05OQUJPUlRFRCxlLHMpKSxzPW51bGwpfSxzLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyB3KCJOZXR3b3JrIEVycm9yIix3LkVSUl9ORVRXT1JLLGUscykpLHM9bnVsbH0scy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgUT1lLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitlLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsUj1lLnRyYW5zaXRpb25hbHx8UmU7ZS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoUT1lLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IHcoUSxSLmNsYXJpZnlUaW1lb3V0RXJyb3I/dy5FVElNRURPVVQ6dy5FQ09OTkFCT1JURUQsZSxzKSkscz1udWxsfSxXLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKG0mJmMuaXNGdW5jdGlvbihtKSYmKG09bShlKSksbXx8bSE9PSExJiZLdCh1KSkpe2xldCBCPWUueHNyZkhlYWRlck5hbWUmJmUueHNyZkNvb2tpZU5hbWUmJnF0LnJlYWQoZS54c3JmQ29va2llTmFtZSk7QiYmaS5zZXQoZS54c3JmSGVhZGVyTmFtZSxCKX1vPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIHMmJmMuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKFEsUil7cy5zZXRSZXF1ZXN0SGVhZGVyKFIsUSl9KSxjLmlzVW5kZWZpbmVkKGUud2l0aENyZWRlbnRpYWxzKXx8KHMud2l0aENyZWRlbnRpYWxzPSEhZS53aXRoQ3JlZGVudGlhbHMpLG4mJm4hPT0ianNvbiImJihzLnJlc3BvbnNlVHlwZT1lLnJlc3BvbnNlVHlwZSksdHlwZW9mIGUub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZzLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIix2dChlLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBlLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJnMudXBsb2FkJiZzLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdnQoZS5vblVwbG9hZFByb2dyZXNzKSksKGUuY2FuY2VsVG9rZW58fGUuc2lnbmFsKSYmKGY9Qj0+e3MmJihyKCFCfHxCLnR5cGU/bmV3IE0obnVsbCxlLHMpOkIpLHMuYWJvcnQoKSxzPW51bGwpfSxlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnN1YnNjcmliZShmKSxlLnNpZ25hbCYmKGUuc2lnbmFsLmFib3J0ZWQ/ZigpOmUuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmKSkpO2xldCBsPW9BKHUpO2lmKGwmJlcucHJvdG9jb2xzLmluZGV4T2YobCk9PT0tMSl7cihuZXcgdygiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitsKyI6Iix3LkVSUl9CQURfUkVRVUVTVCxlKSk7cmV0dXJufXMuc2VuZChvfHxudWxsKX0pfTt2YXIgYUE9e2h0dHA6aGUseGhyOnp0fTtjLmZvckVhY2goYUEsKGUsQSk9PntpZihlKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIm5hbWUiLHt2YWx1ZTpBfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJhZGFwdGVyTmFtZSIse3ZhbHVlOkF9KX19KTt2YXIgX3Q9ZT0+YC0gJHtlfWAsWWk9ZT0+Yy5pc0Z1bmN0aW9uKGUpfHxlPT09bnVsbHx8ZT09PSExLERlPXtnZXRBZGFwdGVyOmU9PntlPWMuaXNBcnJheShlKT9lOltlXTtsZXR7bGVuZ3RoOkF9PWUsdCxyLG89e307Zm9yKGxldCBpPTA7aTxBO2krKyl7dD1lW2ldO2xldCBuO2lmKHI9dCwhWWkodCkmJihyPWFBWyhuPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IHcoYFVua25vd24gYWRhcHRlciAnJHtufSdgKTtpZihyKWJyZWFrO29bbnx8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG8pLm1hcCgoW20sZl0pPT5gYWRhcHRlciAke219IGArKGY9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxuPUE/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKF90KS5qb2luKGAKYCk6IiAiK190KGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHcoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIituLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6YUF9O2Z1bmN0aW9uIG5BKGUpe2lmKGUuY2FuY2VsVG9rZW4mJmUuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLGUuc2lnbmFsJiZlLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBNKG51bGwsZSl9ZnVuY3Rpb24gV2UoZSl7cmV0dXJuIG5BKGUpLGUuaGVhZGVycz1GLmZyb20oZS5oZWFkZXJzKSxlLmRhdGE9c2UuY2FsbChlLGUudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKGUubWV0aG9kKSE9PS0xJiZlLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLERlLmdldEFkYXB0ZXIoZS5hZGFwdGVyfHxfLmFkYXB0ZXIpKGUpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIG5BKGUpLHIuZGF0YT1zZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9Ri5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIEllKHIpfHwobkEoZSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT1zZS5jYWxsKGUsZS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9Ri5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBWdD1lPT5lIGluc3RhbmNlb2YgRj97Li4uZX06ZTtmdW5jdGlvbiBUKGUsQSl7QT1BfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKHAsYSxzKXtyZXR1cm4gYy5pc1BsYWluT2JqZWN0KHApJiZjLmlzUGxhaW5PYmplY3QoYSk/Yy5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxwLGEpOmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlKHt9LGEpOmMuaXNBcnJheShhKT9hLnNsaWNlKCk6YX1mdW5jdGlvbiBvKHAsYSxzKXtpZihjLmlzVW5kZWZpbmVkKGEpKXtpZighYy5pc1VuZGVmaW5lZChwKSlyZXR1cm4gcih2b2lkIDAscCxzKX1lbHNlIHJldHVybiByKHAsYSxzKX1mdW5jdGlvbiBpKHAsYSl7aWYoIWMuaXNVbmRlZmluZWQoYSkpcmV0dXJuIHIodm9pZCAwLGEpfWZ1bmN0aW9uIG4ocCxhKXtpZihjLmlzVW5kZWZpbmVkKGEpKXtpZighYy5pc1VuZGVmaW5lZChwKSlyZXR1cm4gcih2b2lkIDAscCl9ZWxzZSByZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gbShwLGEscyl7aWYocyBpbiBBKXJldHVybiByKHAsYSk7aWYocyBpbiBlKXJldHVybiByKHZvaWQgMCxwKX1sZXQgZj17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6bix0cmFuc2Zvcm1SZXF1ZXN0Om4sdHJhbnNmb3JtUmVzcG9uc2U6bixwYXJhbXNTZXJpYWxpemVyOm4sdGltZW91dDpuLHRpbWVvdXRNZXNzYWdlOm4sd2l0aENyZWRlbnRpYWxzOm4sd2l0aFhTUkZUb2tlbjpuLGFkYXB0ZXI6bixyZXNwb25zZVR5cGU6bix4c3JmQ29va2llTmFtZTpuLHhzcmZIZWFkZXJOYW1lOm4sb25VcGxvYWRQcm9ncmVzczpuLG9uRG93bmxvYWRQcm9ncmVzczpuLGRlY29tcHJlc3M6bixtYXhDb250ZW50TGVuZ3RoOm4sbWF4Qm9keUxlbmd0aDpuLGJlZm9yZVJlZGlyZWN0Om4sdHJhbnNwb3J0Om4saHR0cEFnZW50Om4saHR0cHNBZ2VudDpuLGNhbmNlbFRva2VuOm4sc29ja2V0UGF0aDpuLHJlc3BvbnNlRW5jb2Rpbmc6bix2YWxpZGF0ZVN0YXR1czptLGhlYWRlcnM6KHAsYSk9Pm8oVnQocCksVnQoYSksITApfTtyZXR1cm4gYy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sZSxBKSksZnVuY3Rpb24oYSl7bGV0IHM9ZlthXXx8byx1PXMoZVthXSxBW2FdLGEpO2MuaXNVbmRlZmluZWQodSkmJnMhPT1tfHwodFthXT11KX0pLHR9dmFyIEZlPSIxLjYuOCI7dmFyIHNBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZSxBKT0+e3NBW2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisoQTwxPyJuICI6IiAiKStlfX0pO3ZhciBadD17fTtzQS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oQSx0LHIpe2Z1bmN0aW9uIG8oaSxuKXtyZXR1cm4iW0F4aW9zIHYiK0ZlKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbisocj8iLiAiK3I6IiIpfXJldHVybihpLG4sbSk9PntpZihBPT09ITEpdGhyb3cgbmV3IHcobyhuLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSx3LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIVp0W25dJiYoWnRbbl09ITAsY29uc29sZS53YXJuKG8obiwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxBP0EoaSxuLG0pOiEwfX07ZnVuY3Rpb24gcWkoZSxBLHQpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgdygib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsdy5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoZSksbz1yLmxlbmd0aDtmb3IoO28tLSA+MDspe2xldCBpPXJbb10sbj1BW2ldO2lmKG4pe2xldCBtPWVbaV0sZj1tPT09dm9pZCAwfHxuKG0saSxlKTtpZihmIT09ITApdGhyb3cgbmV3IHcoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrZix3LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IHcoIlVua25vd24gb3B0aW9uICIraSx3LkVSUl9CQURfT1BUSU9OKX19dmFyIFVlPXthc3NlcnRPcHRpb25zOnFpLHZhbGlkYXRvcnM6c0F9O3ZhciBIPVVlLnZhbGlkYXRvcnMsWj1jbGFzc3tjb25zdHJ1Y3RvcihBKXt0aGlzLmRlZmF1bHRzPUEsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IFplLHJlc3BvbnNlOm5ldyBaZX19YXN5bmMgcmVxdWVzdChBLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChBLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG87RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobz17fSk6bz1uZXcgRXJyb3I7bGV0IGk9by5zdGFjaz9vLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChBLHQpe3R5cGVvZiBBPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1BKTp0PUF8fHt9LHQ9VCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm8saGVhZGVyczppfT10O3IhPT12b2lkIDAmJlVlLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKX0sITEpLG8hPW51bGwmJihjLmlzRnVuY3Rpb24obyk/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6b306VWUuYXNzZXJ0T3B0aW9ucyhvLHtlbmNvZGU6SC5mdW5jdGlvbixzZXJpYWxpemU6SC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbj1pJiZjLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZjLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sbD0+e2RlbGV0ZSBpW2xdfSksdC5oZWFkZXJzPUYuY29uY2F0KG4saSk7bGV0IG09W10sZj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oQil7dHlwZW9mIEIucnVuV2hlbj09ImZ1bmN0aW9uIiYmQi5ydW5XaGVuKHQpPT09ITF8fChmPWYmJkIuc3luY2hyb25vdXMsbS51bnNoaWZ0KEIuZnVsZmlsbGVkLEIucmVqZWN0ZWQpKX0pO2xldCBwPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oQil7cC5wdXNoKEIuZnVsZmlsbGVkLEIucmVqZWN0ZWQpfSk7bGV0IGEscz0wLHU7aWYoIWYpe2xldCBsPVtXZS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKGwudW5zaGlmdC5hcHBseShsLG0pLGwucHVzaC5hcHBseShsLHApLHU9bC5sZW5ndGgsYT1Qcm9taXNlLnJlc29sdmUodCk7czx1OylhPWEudGhlbihsW3MrK10sbFtzKytdKTtyZXR1cm4gYX11PW0ubGVuZ3RoO2xldCBJPXQ7Zm9yKHM9MDtzPHU7KXtsZXQgbD1tW3MrK10sQj1tW3MrK107dHJ5e0k9bChJKX1jYXRjaChRKXtCLmNhbGwodGhpcyxRKTticmVha319dHJ5e2E9V2UuY2FsbCh0aGlzLEkpfWNhdGNoKGwpe3JldHVybiBQcm9taXNlLnJlamVjdChsKX1mb3Iocz0wLHU9cC5sZW5ndGg7czx1OylhPWEudGhlbihwW3MrK10scFtzKytdKTtyZXR1cm4gYX1nZXRVcmkoQSl7QT1UKHRoaXMuZGVmYXVsdHMsQSk7bGV0IHQ9Z2UoQS5iYXNlVVJMLEEudXJsKTtyZXR1cm4gYWUodCxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpfX07Yy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihBKXtaLnByb3RvdHlwZVtBXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoVChyfHx7fSx7bWV0aG9kOkEsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7Yy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oQSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxuLG0pe3JldHVybiB0aGlzLnJlcXVlc3QoVChtfHx7fSx7bWV0aG9kOkEsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6bn0pKX19Wi5wcm90b3R5cGVbQV09dCgpLFoucHJvdG90eXBlW0ErIkZvcm0iXT10KCEwKX0pO3ZhciBsZT1aO3ZhciBJQT1jbGFzcyBle2NvbnN0cnVjdG9yKEEpe2lmKHR5cGVvZiBBIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihvPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG8pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bz0+e2xldCBpLG49bmV3IFByb21pc2UobT0+e3Iuc3Vic2NyaWJlKG0pLGk9bX0pLnRoZW4obyk7cmV0dXJuIG4uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sbn0sQShmdW5jdGlvbihpLG4sbSl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgTShpLG4sbSksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShBKXtpZih0aGlzLnJlYXNvbil7QSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChBKTp0aGlzLl9saXN0ZW5lcnM9W0FdfXVuc3Vic2NyaWJlKEEpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKEEpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgQTtyZXR1cm57dG9rZW46bmV3IGUoZnVuY3Rpb24obyl7QT1vfSksY2FuY2VsOkF9fX0sWHQ9SUE7ZnVuY3Rpb24gZ0EoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIGxBKGUpe3JldHVybiBjLmlzT2JqZWN0KGUpJiZlLmlzQXhpb3NFcnJvcj09PSEwfXZhciBwQT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMocEEpLmZvckVhY2goKFtlLEFdKT0+e3BBW0FdPWV9KTt2YXIgJHQ9cEE7ZnVuY3Rpb24gZXIoZSl7bGV0IEE9bmV3IGxlKGUpLHQ9cmUobGUucHJvdG90eXBlLnJlcXVlc3QsQSk7cmV0dXJuIGMuZXh0ZW5kKHQsbGUucHJvdG90eXBlLEEse2FsbE93bktleXM6ITB9KSxjLmV4dGVuZCh0LEEsbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKG8pe3JldHVybiBlcihUKGUsbykpfSx0fXZhciBrPWVyKF8pO2suQXhpb3M9bGU7ay5DYW5jZWxlZEVycm9yPU07ay5DYW5jZWxUb2tlbj1YdDtrLmlzQ2FuY2VsPUllO2suVkVSU0lPTj1GZTtrLnRvRm9ybURhdGE9TDtrLkF4aW9zRXJyb3I9dztrLkNhbmNlbD1rLkNhbmNlbGVkRXJyb3I7ay5hbGw9ZnVuY3Rpb24oQSl7cmV0dXJuIFByb21pc2UuYWxsKEEpfTtrLnNwcmVhZD1nQTtrLmlzQXhpb3NFcnJvcj1sQTtrLm1lcmdlQ29uZmlnPVQ7ay5BeGlvc0hlYWRlcnM9RjtrLmZvcm1Ub0pTT049ZT0+a2UoYy5pc0hUTUxGb3JtKGUpP25ldyBGb3JtRGF0YShlKTplKTtrLmdldEFkYXB0ZXI9RGUuZ2V0QWRhcHRlcjtrLkh0dHBTdGF0dXNDb2RlPSR0O2suZGVmYXVsdD1rO3ZhciBHPWs7dmFye0F4aW9zOnhJLEF4aW9zRXJyb3I6R0ksQ2FuY2VsZWRFcnJvcjpUSSxpc0NhbmNlbDpKSSxDYW5jZWxUb2tlbjpMSSxWRVJTSU9OOk1JLGFsbDpISSxDYW5jZWw6WUksaXNBeGlvc0Vycm9yOnFJLHNwcmVhZDpLSSx0b0Zvcm1EYXRhOmpJLEF4aW9zSGVhZGVyczp2SSxIdHRwU3RhdHVzQ29kZTp6SSxmb3JtVG9KU09OOl9JLGdldEFkYXB0ZXI6VkksbWVyZ2VDb25maWc6Wkl9PUc7YXN5bmMgZnVuY3Rpb24gS2koZSxBKXtsZXQgdD1lLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBvPWF3YWl0IEcuZ2V0KHQse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOkF9KSxpPVVSTC5jcmVhdGVPYmplY3RVUkwoby5kYXRhKTtyPW5ldyBXb3JrZXIoaSx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKHQse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgcGU9S2k7ZnVuY3Rpb24gQXIoZSl7bGV0IEE9cWUoZSksdD1lO3JldHVybiB0LnRlcm1pbmF0ZWQ9ITEsdC53b3JrZXJQcm94eT1BLHQub3JpZ2luYWxUZXJtaW5hdGU9dC50ZXJtaW5hdGUsdC50ZXJtaW5hdGU9KCk9Pnt0LnRlcm1pbmF0ZWQ9ITAsdC53b3JrZXJQcm94eVtZZV0oKSx0Lm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTpBLHdvcmtlcjp0fX1hc3luYyBmdW5jdGlvbiBqaShlLEEsdCl7bGV0IHI7aWYoZSE9bnVsbCl7bGV0IGk9ZTtyZXR1cm4gaS53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1pLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjppfSk6QXIoZSl9bGV0IG89YXdhaXQgcGUoQSx0KTtyZXR1cm4gQXIobyl9dmFyIHRyPWppO2FzeW5jIGZ1bmN0aW9uIHZpKGUsQSx0KXtsZXQgcj0idW5rbm93biI7dHlwZW9mIGUhPSJzdHJpbmciP3I9ZS5ocmVmOmUuc3RhcnRzV2l0aCgiaHR0cCIpP3I9ZTpyPXR5cGVvZiBBPCJ1Ij9gJHtBfS8ke2V9YDplLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbz1gJHtyfS53YXNtYCxuPShhd2FpdCBHLmdldChvLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIHJyPXZpO3ZhciBpcj1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgbnI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsb3I9bmV3IFRleHRFbmNvZGVyLGFyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB6aShlLEEpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9ZS5mc19vcGVuKEEsdC5mbGFncyksaT1lLmZzX3N0YXQoQSkuc2l6ZSxuPW51bGw7bnI/bj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoaSk6bj1uZXcgQXJyYXlCdWZmZXIoaSk7bGV0IG09bmV3IFVpbnQ4QXJyYXkobik7cmV0dXJuIGUuZnNfcmVhZChyLG0sMCxpLDApLGUuZnNfY2xvc2UociksbX1mdW5jdGlvbiBzcihlLEEsdCl7bGV0IHI9bnVsbDtucj9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbz1uZXcgVWludDhBcnJheShyKSxpPW5ldyBVaW50OEFycmF5KGUuSEVBUFU4LmJ1ZmZlcixBLHQpO3JldHVybiBvLnNldChpKSxvfWZ1bmN0aW9uIEQoZSxBLHQscil7bGV0IG89MDtyZXR1cm4gQSE9PW51bGwmJihvPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixBLmJ1ZmZlci5ieXRlTGVuZ3RoXSksZS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KEEuYnVmZmVyKSxvKSksb31mdW5jdGlvbiBYKGUsQSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShBKSxvPWUubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsaT1lLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsb10pO2Uuc3RyaW5nVG9VVEY4KHIsaSxvKX1mdW5jdGlvbiBVKGUsQSx0LHIpe2xldCBvPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEEsdF0pLGk9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQSx0XSksbj1zcihlLG8saSk7cmV0dXJuIE4ocixuLmJ1ZmZlcil9ZnVuY3Rpb24gbUEoZSxBKXtsZXQgdD1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLEFdKSxyPWUuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIF9pKGUsQSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihwLGEpe3N3aXRjaChwLnR5cGUpe2Nhc2UgZy5UZXh0U3RyZWFtOntsZXQgcz1vci5lbmNvZGUocC5kYXRhLmRhdGEpLHU9RChlLHMsYSwwKSxJPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07WChlLEksYSk7YnJlYWt9Y2FzZSBnLkpzb25Db21wYXRpYmxlOntsZXQgcz1vci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkocC5kYXRhKSksdT1EKGUscyxhLDApLEk9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtYKGUsSSxhKTticmVha31jYXNlIGcuQmluYXJ5U3RyZWFtOntsZXQgcz1wLmRhdGEuZGF0YSx1PUQoZSxzLGEsMCksST17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O1goZSxJLGEpO2JyZWFrfWNhc2UgZy5UZXh0RmlsZTp7ZS5mc193cml0ZUZpbGUocC5kYXRhLnBhdGgscC5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZy5CaW5hcnlGaWxlOntlLmZzX3dyaXRlRmlsZShwLmRhdGEucGF0aCxwLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBnLkltYWdlOntsZXQgcz1wLmRhdGEsdT1EKGUscy5kYXRhLGEsMCksST1EKGUscy5kaXJlY3Rpb24sYSwxKSxsPXR5cGVvZiBzLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKHMubWV0YWRhdGEuZW50cmllcygpKTpbXSxCPXtpbWFnZVR5cGU6cy5pbWFnZVR5cGUsbmFtZTpzLm5hbWUsb3JpZ2luOnMub3JpZ2luLHNwYWNpbmc6cy5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxzaXplOnMuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG1ldGFkYXRhOmx9O1goZSxCLGEpO2JyZWFrfWNhc2UgZy5NZXNoOntsZXQgcz1wLmRhdGEsdT1EKGUscy5wb2ludHMsYSwwKSxJPUQoZSxzLmNlbGxzLGEsMSksbD1EKGUscy5wb2ludERhdGEsYSwyKSxCPUQoZSxzLmNlbGxEYXRhLGEsMyksUT17bWVzaFR5cGU6cy5tZXNoVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZkNlbGxzOnMubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxjZWxsQnVmZmVyU2l6ZTpzLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O1goZSxRLGEpO2JyZWFrfWNhc2UgZy5Qb2x5RGF0YTp7bGV0IHM9cC5kYXRhLHU9RChlLHMucG9pbnRzLGEsMCksST1EKGUscy52ZXJ0aWNlcyxhLDEpLGw9RChlLHMubGluZXMsYSwyKSxCPUQoZSxzLnBvbHlnb25zLGEsMyksUT1EKGUscy50cmlhbmdsZVN0cmlwcyxhLDQpLFI9RChlLHMucG9pbnREYXRhLGEsNSksTz1EKGUscy5wb2ludERhdGEsYSw2KSxQPXtwb2x5RGF0YVR5cGU6cy5wb2x5RGF0YVR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdmVydGljZXNCdWZmZXJTaXplOnMudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLGxpbmVzQnVmZmVyU2l6ZTpzLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxwb2x5Z29uc0J1ZmZlclNpemU6cy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOnMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7UX1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtPfWB9O1goZSxQLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxlLnJlc2V0TW9kdWxlU3Rkb3V0KCksZS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPWUuc3RhY2tTYXZlKCksaT0wO3RyeXtpPWUuY2FsbE1haW4oQS5zbGljZSgpKX1jYXRjaChwKXt0aHJvdyB0eXBlb2YgcD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLGUuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLGUuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBlLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLGUuZ2V0RXhjZXB0aW9uTWVzc2FnZShwKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxwfWZpbmFsbHl7ZS5zdGFja1Jlc3RvcmUobyl9bGV0IG49ZS5nZXRNb2R1bGVTdGRvdXQoKSxtPWUuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihwLGEpe2xldCBzPW51bGw7c3dpdGNoKHAudHlwZSl7Y2FzZSBnLlRleHRTdHJlYW06e2xldCBJPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGw9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIsSSxsKTtzPXtkYXRhOmFyLmRlY29kZShCKX07YnJlYWt9Y2FzZSBnLkpzb25Db21wYXRpYmxlOntsZXQgST1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxsPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLEksbCk7cz1KU09OLnBhcnNlKGFyLmRlY29kZShCKSk7YnJlYWt9Y2FzZSBnLkJpbmFyeVN0cmVhbTp7bGV0IEk9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksbD1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtzPXtkYXRhOnNyKGUsSSxsKX07YnJlYWt9Y2FzZSBnLlRleHRGaWxlOntzPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6ZS5mc19yZWFkRmlsZShwLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgZy5CaW5hcnlGaWxlOntzPXtwYXRoOnAuZGF0YS5wYXRoLGRhdGE6emkoZSxwLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgZy5JbWFnZTp7bGV0IEk9bUEoZSxhKTtJLmRhdGE9VShlLGEsMCxJLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxJLmRpcmVjdGlvbj1VKGUsYSwxLGIuRmxvYXQ2NCksSS5tZXRhZGF0YT1uZXcgTWFwKEkubWV0YWRhdGEpLHM9STticmVha31jYXNlIGcuTWVzaDp7bGV0IEk9bUEoZSxhKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9VShlLGEsMCxJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6SS5wb2ludHM9TihJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZDZWxscz4wP0kuY2VsbHM9VShlLGEsMSxJLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpJLmNlbGxzPU4oSS5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZQb2ludFBpeGVscz4wP0kucG9pbnREYXRhPVUoZSxhLDIsSS5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6SS5wb2ludERhdGE9TihJLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxQaXhlbHM+MD9JLmNlbGxEYXRhPVUoZSxhLDMsSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpJLmNlbGxEYXRhPU4oSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1JO2JyZWFrfWNhc2UgZy5Qb2x5RGF0YTp7bGV0IEk9bUEoZSxhKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9VShlLGEsMCxiLkZsb2F0MzIpOkkucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksSS52ZXJ0aWNlc0J1ZmZlclNpemU+MD9JLnZlcnRpY2VzPVUoZSxhLDEsaC5VSW50MzIpOkkudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEkubGluZXNCdWZmZXJTaXplPjA/SS5saW5lcz1VKGUsYSwyLGguVUludDMyKTpJLmxpbmVzPW5ldyBVaW50MzJBcnJheSxJLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0kucG9seWdvbnM9VShlLGEsMyxoLlVJbnQzMik6SS5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksSS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9JLnRyaWFuZ2xlU3RyaXBzPVUoZSxhLDQsaC5VSW50MzIpOkkudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEkubnVtYmVyT2ZQb2ludFBpeGVscz4wP0kucG9pbnREYXRhPVUoZSxhLDUsSS5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkkucG9pbnREYXRhPU4oSS5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJLm51bWJlck9mQ2VsbFBpeGVscz4wP0kuY2VsbERhdGE9VShlLGEsNixJLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpJLmNlbGxEYXRhPU4oSS5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9STticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCB1PXt0eXBlOnAudHlwZSxkYXRhOnN9O2YucHVzaCh1KX0pLHtyZXR1cm5WYWx1ZTppLHN0ZG91dDpuLHN0ZGVycjptLG91dHB1dHM6Zn19dmFyIElyPV9pO3ZhciBWaT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gWmkoZSxBKXtpZihlPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8ZS5sZW5ndGg7cisrKXtsZXQgbz1YaShlW3JdLEEpO28hPT1udWxsJiZ0LnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gWGkoZSxBKXtpZihlPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIGUuYnVmZmVyIT09dm9pZCAwP3Q9ZS5idWZmZXI6ZS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1lKSxWaSYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6QT90OnQuc2xpY2UoMCl9dmFyIGdyPVppO2Z1bmN0aW9uICRpKGUpe3JldHVybltlLmRhdGEsZS5kaXJlY3Rpb25dfXZhciBscj0kaTtmdW5jdGlvbiBlbyhlKXtyZXR1cm5bZS5wb2ludHMsZS5wb2ludERhdGEsZS5jZWxscyxlLmNlbGxEYXRhXX12YXIgcHI9ZW87ZnVuY3Rpb24gQW8oZSl7cmV0dXJuW2UucG9pbnRzLGUudmVydGljZXMsZS5saW5lcyxlLnBvbHlnb25zLGUudHJpYW5nbGVTdHJpcHMsZS5wb2ludERhdGEsZS5jZWxsRGF0YV19dmFyIG1yPUFvO3ZhciB0bztmdW5jdGlvbiBOZSgpe3JldHVybiB0b312YXIgcm87ZnVuY3Rpb24gdXIoKXtyZXR1cm4gcm99dmFyIGlvO2Z1bmN0aW9uIFNlKCl7cmV0dXJuIGlvfXZhciB1QT1uZXcgTWFwO2Z1bmN0aW9uIG9vKCl7bGV0IGU9U2UoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT1udWxsKSxlfWZ1bmN0aW9uIGZyKCl7bGV0IGU9TmUoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLGV9ZnVuY3Rpb24gT2UoKXtsZXQgZT11cigpO3JldHVybiB0eXBlb2YgZT4idSImJihlPXt9KSxlfWFzeW5jIGZ1bmN0aW9uIGFvKGUsQSx0KXtsZXQgcj1lLG89ZTtpZih0eXBlb2YgZSE9InN0cmluZyImJihyPW5ldyBVUkwoZS5ocmVmKSxvPXIuaHJlZiksdUEuaGFzKG8pKXJldHVybiB1QS5nZXQobyk7e2xldCBpPWF3YWl0IHJyKGUsQT8udG9TdHJpbmcoKT8/ZnIoKSx0Pz9PZSgpKTtyZXR1cm4gdUEuc2V0KG8saSksaX19YXN5bmMgZnVuY3Rpb24gbm8oZSxBLHQscixvKXtpZighYXdhaXQgaXIoKSl7bGV0IFE9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KFEpLG5ldyBFcnJvcihRKX1sZXQgaT1vPy53ZWJXb3JrZXI/P251bGw7aWYoaT09PSExKXtsZXQgUT1hd2FpdCBhbyhlLnRvU3RyaW5nKCksbz8ucGlwZWxpbmVCYXNlVXJsLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P09lKCkpO3JldHVybiBJcihRLEEsdCxyKX1sZXQgbj1pLG09bz8ucGlwZWxpbmVXb3JrZXJVcmw/P29vKCksZj10eXBlb2YgbSE9InN0cmluZyImJnR5cGVvZiBtPy5ocmVmPCJ1Ij9tLmhyZWY6bSx7d29ya2VyUHJveHk6cCx3b3JrZXI6YX09YXdhaXQgdHIobixmLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P09lKCkpO249YTtsZXQgcz1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oUSl7aWYoUS50eXBlPT09Zy5CaW5hcnlTdHJlYW0pe2xldCBSPVEuZGF0YS5kYXRhO3MucHVzaChSKX1lbHNlIGlmKFEudHlwZT09PWcuQmluYXJ5RmlsZSl7bGV0IFI9US5kYXRhLmRhdGE7cy5wdXNoKFIpfWVsc2UgaWYoUS50eXBlPT09Zy5JbWFnZSl7bGV0IFI9US5kYXRhO1IuZGF0YSE9PW51bGwmJnMucHVzaCguLi5scihSKSl9ZWxzZSBpZihRLnR5cGU9PT1nLk1lc2gpe2xldCBSPVEuZGF0YTtzLnB1c2goLi4ucHIoUikpfWVsc2UgaWYoUS50eXBlPT09Zy5Qb2x5RGF0YSl7bGV0IFI9US5kYXRhO3MucHVzaCguLi5tcihSKSl9fSk7bGV0IHU9bz8ucGlwZWxpbmVCYXNlVXJsPz9mcigpLEk9dHlwZW9mIHUhPSJzdHJpbmciJiZ0eXBlb2YgdT8uaHJlZjwidSI/dS5ocmVmOnUsbD1yIT1udWxsP0tlKHIsZ3IocyxvPy5ub0NvcHkpKTpudWxsLEI9YXdhaXQgcC5ydW5QaXBlbGluZShlLnRvU3RyaW5nKCksSSxBLHQsbCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9PZSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6Qi5yZXR1cm5WYWx1ZSxzdGRvdXQ6Qi5zdGRvdXQsc3RkZXJyOkIuc3RkZXJyLG91dHB1dHM6Qi5vdXRwdXRzLHdlYldvcmtlcjpufX12YXIgQz1ubzt2YXIgc289bnVsbDtmdW5jdGlvbiBjcigpe3JldHVybiBzb312YXIgSW89IjEuMi4xIixCcj1Jbzt2YXIgZkEsZ289YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL2ltYWdlLWlvQCR7QnJ9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBIZyhlKXtmQT1lfWZ1bmN0aW9uIEUoKXtpZih0eXBlb2YgZkE8InUiKXJldHVybiBmQTtsZXQgZT1OZSgpO3JldHVybiB0eXBlb2YgZTwidSI/ZTpnb312YXIgY0EsbG89bnVsbDtmdW5jdGlvbiBkcihlKXtjQT1lfWZ1bmN0aW9uIGQoKXtpZih0eXBlb2YgY0E8InUiKXJldHVybiBjQTtsZXQgZT1TZSgpO3JldHVybiB0eXBlb2YgZTwidSI/ZTpsb312YXIgJD1udWxsO2FzeW5jIGZ1bmN0aW9uIENyKCl7bGV0IGU9ZCgpLEE9dHlwZW9mIGUhPSJzdHJpbmciJiZ0eXBlb2YgZT8uaHJlZjwidSI/ZS5ocmVmOmU7JD1hd2FpdCBwZShBKX1mdW5jdGlvbiBfZyhlKXskPWV9YXN5bmMgZnVuY3Rpb24geSgpe2lmKCQhPT1udWxsKXJldHVybiAkLnRlcm1pbmF0ZWQmJmF3YWl0IENyKCksJDtsZXQgZT1jcigpO3JldHVybiBlIT09bnVsbD9lOihhd2FpdCBDcigpLCQpfWFzeW5jIGZ1bmN0aW9uIHBvKGUpe2xldCB0PShhd2FpdCBHLmdldChgJHtlfS9pbmRleC5qc29uYCx7cmVzcG9uc2VUeXBlOiJqc29uIn0pKS5kYXRhLHI9YXdhaXQgRy5nZXQoYCR7ZX0vZGF0YS9kYXRhLnJhd2Ase3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIifSk7dC5kYXRhPU4odC5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSxyLmRhdGEpO2xldCBvPWF3YWl0IEcuZ2V0KGAke2V9L2RhdGEvZGlyZWN0aW9uLnJhd2Ase3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIifSk7cmV0dXJuIHQuZGlyZWN0aW9uPU4oYi5GbG9hdDY0LG8uZGF0YSksdH12YXIgbW89cG87dmFyIHVvPW5ldyBNYXAoW1siaW1hZ2UvanBlZyIsImpwZWciXSxbImltYWdlL3BuZyIsInBuZyJdLFsiaW1hZ2UvdGlmZiIsInRpZmYiXSxbImltYWdlL3gtbXMtYm1wIiwiYm1wIl0sWyJpbWFnZS94LWJtcCIsImJtcCJdLFsiaW1hZ2UvYm1wIiwiYm1wIl0sWyJhcHBsaWNhdGlvbi9kaWNvbSIsImdkY20iXV0pLGVlPXVvO2FzeW5jIGZ1bmN0aW9uIGZvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InBuZy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBCQT1mbzthc3luYyBmdW5jdGlvbiBjbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InBuZy13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBkQT1jbzthc3luYyBmdW5jdGlvbiBCbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJtZXRhLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIENBPUJvO2FzeW5jIGZ1bmN0aW9uIENvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibWV0YS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBFQT1Dbzthc3luYyBmdW5jdGlvbiBFbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ0aWZmLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIHlBPUVvO2FzeW5jIGZ1bmN0aW9uIHlvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0idGlmZi13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBRQT15bzthc3luYyBmdW5jdGlvbiBRbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJuaWZ0aS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBoQT1Rbzthc3luYyBmdW5jdGlvbiBobyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im5pZnRpLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHdBPWhvO2FzeW5jIGZ1bmN0aW9uIHdvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImpwZWctcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgUkE9d287YXN5bmMgZnVuY3Rpb24gUm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJqcGVnLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIGtBPVJvO2FzeW5jIGZ1bmN0aW9uIGtvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9Im5ycmQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgYkE9a287YXN5bmMgZnVuY3Rpb24gYm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJucnJkLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIERBPWJvO2FzeW5jIGZ1bmN0aW9uIERvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9InZ0ay1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBXQT1Ebzthc3luYyBmdW5jdGlvbiBXbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9InZ0ay13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBGQT1Xbzthc3luYyBmdW5jdGlvbiBGbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJibXAtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgVUE9Rm87YXN5bmMgZnVuY3Rpb24gVW8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJibXAtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgTkE9VW87YXN5bmMgZnVuY3Rpb24gTm8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iaGRmNS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBTQT1Obzthc3luYyBmdW5jdGlvbiBTbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImhkZjUtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgT0E9U287YXN5bmMgZnVuY3Rpb24gT28oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibWluYy1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBQQT1Pbzthc3luYyBmdW5jdGlvbiBQbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9Im1pbmMtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgeEE9UG87YXN5bmMgZnVuY3Rpb24geG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ibXJjLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIEdBPXhvO2FzeW5jIGZ1bmN0aW9uIEdvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ibXJjLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIFRBPUdvO2FzeW5jIGZ1bmN0aW9uIFRvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImxzbS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBKQT1Ubzthc3luYyBmdW5jdGlvbiBKbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImxzbS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBMQT1Kbzthc3luYyBmdW5jdGlvbiBMbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJtZ2gtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgTUE9TG87YXN5bmMgZnVuY3Rpb24gTW8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJtZ2gtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgSEE9TW87YXN5bmMgZnVuY3Rpb24gSG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iYmlvLXJhZC1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBZQT1Ibzthc3luYyBmdW5jdGlvbiBZbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImJpby1yYWQtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgcUE9WW87YXN5bmMgZnVuY3Rpb24gcW8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2lwbC1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBLQT1xbzthc3luYyBmdW5jdGlvbiBLbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdpcGwtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgakE9S287YXN5bmMgZnVuY3Rpb24gam8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2UtYWR3LXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIHZBPWpvO2FzeW5jIGZ1bmN0aW9uIHZvKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0iZ2UtYWR3LXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHpBPXZvO2FzeW5jIGZ1bmN0aW9uIHpvKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImdlNC1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBfQT16bzthc3luYyBmdW5jdGlvbiBfbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdlNC13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBWQT1fbzthc3luYyBmdW5jdGlvbiBWbyhlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJnZTUtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgWkE9Vm87YXN5bmMgZnVuY3Rpb24gWm8oZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJnZTUtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgWEE9Wm87YXN5bmMgZnVuY3Rpb24gWG8oZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0iZ2RjbS1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciAkQT1Ybzthc3luYyBmdW5jdGlvbiAkbyhlLEEsdD17fSl7bGV0IHI9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOntwYXRoOkEsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpnLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9QTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IHA9ImdkY20td3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgZXQ9JG87YXN5bmMgZnVuY3Rpb24gZWEoZSxBPXt9KXtsZXQgdD1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IFE9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoUSl9fWxldCBvPVt7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgcD0ic2NhbmNvLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIEF0PWVhO2FzeW5jIGZ1bmN0aW9uIEFhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0ic2NhbmNvLXdyaXRlLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGkscixvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkV3JpdGU6bFswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6bFsxXT8uZGF0YX19dmFyIHR0PUFhO2FzeW5jIGZ1bmN0aW9uIHRhKGUsQT17fSl7bGV0IHQ9W3t0eXBlOmcuSnNvbkNvbXBhdGlibGV9LHt0eXBlOmcuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBRPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KFEpfX1sZXQgbz1be3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHA9ImZkZi1yZWFkLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCB5KCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpJLG91dHB1dHM6bH09YXdhaXQgQyhwLGksdCxvLHtwaXBlbGluZUJhc2VVcmw6RSgpLHBpcGVsaW5lV29ya2VyVXJsOmQoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpzLGNvdWxkUmVhZDpsWzBdPy5kYXRhLGltYWdlOmxbMV0/LmRhdGF9fXZhciBydD10YTthc3luYyBmdW5jdGlvbiByYShlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ3YXNtLXJlYWQtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRSZWFkOmxbMF0/LmRhdGEsaW1hZ2U6bFsxXT8uZGF0YX19dmFyIGl0PXJhO2FzeW5jIGZ1bmN0aW9uIGlhKGUsQSx0PXt9KXtsZXQgcj1be3R5cGU6Zy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Zy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6QSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOmcuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1BO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgcD0id2FzbS13cml0ZS1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmxbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOmxbMV0/LmRhdGF9fXZhciBvdD1pYTthc3luYyBmdW5jdGlvbiBvYShlLEE9e30pe2xldCB0PVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgUT1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShRKX19bGV0IG89W3t0eXBlOmcuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBwPSJ3YXNtLXpzdGQtcmVhZC1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgeSgpKTtsZXR7d2ViV29ya2VyOnMscmV0dXJuVmFsdWU6dSxzdGRlcnI6SSxvdXRwdXRzOmx9PWF3YWl0IEMocCxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOkUoKSxwaXBlbGluZVdvcmtlclVybDpkKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6bFswXT8uZGF0YSxpbWFnZTpsWzFdPy5kYXRhfX12YXIgYXQ9b2E7YXN5bmMgZnVuY3Rpb24gYWEoZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJ3YXNtLXpzdGQtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgbnQ9YWE7dmFyIG5hPW5ldyBNYXAoW1sicG5nIixbQkEsZEFdXSxbIm1ldGEiLFtDQSxFQV1dLFsidGlmZiIsW3lBLFFBXV0sWyJuaWZ0aSIsW2hBLHdBXV0sWyJqcGVnIixbUkEsa0FdXSxbIm5ycmQiLFtiQSxEQV1dLFsidnRrIixbV0EsRkFdXSxbImJtcCIsW1VBLE5BXV0sWyJoZGY1IixbU0EsT0FdXSxbIm1uYyIsW1BBLHhBXV0sWyJtcmMiLFtHQSxUQV1dLFsibHNtIixbSkEsTEFdXSxbIm1naCIsW01BLEhBXV0sWyJiaW9SYWQiLFtZQSxxQV1dLFsiZ2lwbCIsW0tBLGpBXV0sWyJnZUFkdyIsW3ZBLHpBXV0sWyJnZTQiLFtfQSxWQV1dLFsiZ2U1IixbWkEsWEFdXSxbImdkY20iLFskQSxldF1dLFsic2NhbmNvIixbQXQsdHRdXSxbImZkZiIsW3J0LG51bGxdXSxbIndhc20iLFtpdCxvdF1dLFsid2FzbVpzdGQiLFthdCxudF1dXSksQWU9bmE7YXN5bmMgZnVuY3Rpb24gc2EoZSxBPXt9KXtsZXQgdD1lLnR5cGU/PyIiLHI9ZS5uYW1lPz9lLnBhdGg/PyJmaWxlTmFtZSIsbz10ZShyKS50b0xvd2VyQ2FzZSgpLGk9QT8ud2ViV29ya2VyLG49ZTtpZihlIGluc3RhbmNlb2YgQmxvYil7bGV0IEk9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO249e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoSSl9fWxldCBtPW51bGw7aWYodCYmZWUuaGFzKHQpKW09ZWUuZ2V0KHQpO2Vsc2UgaWYoWS5oYXMobykpbT1ZLmdldChvKTtlbHNlIGZvcihsZXQgSSBvZiBBZS52YWx1ZXMoKSlpZihJWzBdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpsLGNvdWxkUmVhZDpCLGltYWdlOlF9PWF3YWl0IElbMF0oe3BhdGg6bi5wYXRoLGRhdGE6bi5kYXRhLnNsaWNlKCl9LHt3ZWJXb3JrZXI6aSxpbmZvcm1hdGlvbk9ubHk6QT8uaW5mb3JtYXRpb25Pbmx5LG5vQ29weTpBPy5ub0NvcHl9KTtpZihpPWwsQilyZXR1cm4gdHlwZW9mIEE8InUiJiYoUT1KKFEsQSkpLHt3ZWJXb3JrZXI6aSxpbWFnZTpRfX1pZighbSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSU8gZm9yOiAiK3IpO2xldCBwPUFlLmdldChtKVswXSx7d2ViV29ya2VyOmEsY291bGRSZWFkOnMsaW1hZ2U6dX09YXdhaXQgcChuLHt3ZWJXb3JrZXI6aSxpbmZvcm1hdGlvbk9ubHk6QT8uaW5mb3JtYXRpb25Pbmx5LG5vQ29weTpBPy5ub0NvcHl9KTtpZihpPWEsIXMpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCByZWFkOiAiK3IpO3JldHVybiB0eXBlb2YgQTwidSImJih1PUoodSxBKSkse3dlYldvcmtlcjppLGltYWdlOnV9fXZhciBzdD1zYTt2YXIgSWE9dHlwZW9mIGdsb2JhbFRoaXMubmF2aWdhdG9yPy5oYXJkd2FyZUNvbmN1cnJlbmN5PT0ibnVtYmVyIj9nbG9iYWxUaGlzLm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5OjYsRXI9bmV3IExlKElhLHN0KTthc3luYyBmdW5jdGlvbiBnYShlLEE9e30pe2xldCB0PTEscj0wLG89ITE7dHlwZW9mIEE9PSJvYmplY3QiJiYodHlwZW9mIEEuelNwYWNpbmc8InUiJiYodD1BLnpTcGFjaW5nKSx0eXBlb2YgQS56T3JpZ2luPCJ1IiYmKHI9QS56T3JpZ2luKSx0eXBlb2YgQS5zb3J0ZWRTZXJpZXM8InUiJiYobz1BLnNvcnRlZFNlcmllcykpO2xldCBpPUFycmF5LmZyb20oZSxhc3luYyBmdW5jdGlvbihzKXtpZihzIGluc3RhbmNlb2YgRmlsZSl7bGV0IHU9YXdhaXQgcy5hcnJheUJ1ZmZlcigpO3JldHVybntwYXRoOnMubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHUpfX1yZXR1cm4gc30pLG49YXdhaXQgUHJvbWlzZS5hbGwoaSk7b3x8bi5zb3J0KChzLHUpPT5zLnBhdGg8dS5wYXRoPy0xOnMucGF0aD51LnBhdGg/MTowKTtsZXQgbT1bXTtmb3IobGV0IHM9MDtzPG4ubGVuZ3RoO3MrKyltLnB1c2goW25bc10se31dKTtsZXQgcD0oYXdhaXQgRXIucnVuVGFza3MobSkucHJvbWlzZSkubWFwKHM9PntsZXQgdT1zLmltYWdlO3JldHVybiB1LmltYWdlVHlwZS5kaW1lbnNpb249Myx1LnNpemUucHVzaCgxKSx1LnNwYWNpbmcucHVzaCh0KSx1Lm9yaWdpbi5wdXNoKHIpLHUuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkoOSksdS5kaXJlY3Rpb24uZmlsbCgwKSx1LmRpcmVjdGlvblswXT0xLHUuZGlyZWN0aW9uWzRdPTEsdS5kaXJlY3Rpb25bOF09MSx1fSksYT1UZShwKTtyZXR1cm4gdHlwZW9mIEE9PSJvYmplY3QiJiYodHlwZW9mIEEuY29tcG9uZW50VHlwZTwidSJ8fHR5cGVvZiBBLnBpeGVsVHlwZTwidSIpJiYoYT1KKGEsQSkpLHtpbWFnZTphLHdlYldvcmtlclBvb2w6RXJ9fXZhciBsYT1nYTthc3luYyBmdW5jdGlvbiBwYShlLEEsdD17fSl7bGV0IHI9ZTsodHlwZW9mIHQuY29tcG9uZW50VHlwZTwidSJ8fHR5cGVvZiB0LnBpeGVsVHlwZTwidSIpJiYocj1KKGUsdCkpO2xldCBvPXQubWltZVR5cGUsaT10ZShBKS50b0xvd2VyQ2FzZSgpLG49dC53ZWJXb3JrZXIsbT1udWxsO2lmKHR5cGVvZiBvPCJ1IiYmZWUuaGFzKG8pKW09ZWUuZ2V0KG8pO2Vsc2UgaWYoWS5oYXMoaSkpbT1ZLmdldChpKTtlbHNlIGZvcihsZXQgbCBvZiBBZS52YWx1ZXMoKSlpZihsWzFdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpCLGNvdWxkV3JpdGU6USxzZXJpYWxpemVkSW1hZ2U6Un09YXdhaXQgbFsxXShHZShyKSxBLHQpO2lmKG49QixRKXJldHVybnt3ZWJXb3JrZXI6bixzZXJpYWxpemVkSW1hZ2U6Un19aWYoIW0pdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIitBKTtsZXQgcD1BZS5nZXQobSlbMV0se3dlYldvcmtlcjphLGNvdWxkV3JpdGU6cyxzZXJpYWxpemVkSW1hZ2U6dX09YXdhaXQgcChyLEEsdCk7aWYobj1hLCFzKXRocm93IEVycm9yKCJDb3VsZCBub3Qgd3JpdGU6ICIrQSk7cmV0dXJue3dlYldvcmtlcjpuLHNlcmlhbGl6ZWRJbWFnZTp1fX12YXIgbWE9cGE7YXN5bmMgZnVuY3Rpb24gdWEoZSxBLHQ9e30pe2xldCByPVt7dHlwZTpnLkpzb25Db21wYXRpYmxlfSx7dHlwZTpnLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDpBLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Zy5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPUE7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBwPSJmZGYtd3JpdGUtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IHkoKSk7bGV0e3dlYldvcmtlcjpzLHJldHVyblZhbHVlOnUsc3RkZXJyOkksb3V0cHV0czpsfT1hd2FpdCBDKHAsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpFKCkscGlwZWxpbmVXb3JrZXJVcmw6ZCgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOnMsY291bGRXcml0ZTpsWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpsWzFdPy5kYXRhfX12YXIgZmE9dWE7dmFyIHlyPSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciB0dD1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGV0PShBLEkpPT57Zm9yKHZhciB0IGluIEkpdHQoQSx0LHtnZXQ6SVt0XSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxndD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxydD1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksbUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixpdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOkkscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBvQShBLEkpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksc3QoQSl9fSxvdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBJO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ST17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319Okk9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW0ksW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQUk9bmV3IE1hcChbWyJwcm94eSIsaXRdLFsidGhyb3ciLG90XV0pO2Z1bmN0aW9uIEJ0KEEsSSl7Zm9yKGxldCB0IG9mIEEpaWYoST09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChJKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBvQShBLEk9Z2xvYmFsVGhpcyx0PVsiKiJdKXtJLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFCdCh0LGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTppLHBhdGg6c309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBDPXMuc2xpY2UoMCwtMSkucmVkdWNlKChmLG4pPT5mW25dLEEpLG89cy5yZWR1Y2UoKGYsbik9PmZbbl0sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpRPW87YnJlYWs7Y2FzZSJTRVQiOkNbcy5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9by5hcHBseShDLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IG8oLi4uYSk7UT1hdChmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6bn09bmV3IE1lc3NhZ2VDaGFubmVsO29BKEEsbiksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQyl7UT17dmFsdWU6QyxbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChDPT4oe3ZhbHVlOkMsW2VBXTowfSkpLnRoZW4oQz0+e2xldFtvLGZdPWlBKEMpO0kucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtpZDpyfSksZiksaT09PSJSRUxFQVNFIiYmKEkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksSUkoSSksbUEgaW4gQSYmdHlwZW9mIEFbbUFdPT0iZnVuY3Rpb24iJiZBW21BXSgpKX0pLmNhdGNoKEM9PntsZXRbbyxmXT1pQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7SS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOnJ9KSxmKX0pfSksSS5zdGFydCYmSS5zdGFydCgpfWZ1bmN0aW9uIEN0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIElJKEEpe0N0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gc3QoQSxJKXtyZXR1cm4gcEEoQSxbXSxJKX1mdW5jdGlvbiB0QShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gdEkoQSl7cmV0dXJuIE0oQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57SUkoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IEk9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSxJKSxJPT09MCYmdEkoQSl9KTtmdW5jdGlvbiBudChBLEkpe2xldCB0PShnQS5nZXQoSSl8fDApKzE7Z0Euc2V0KEksdCksckEmJnJBLnJlZ2lzdGVyKEEsSSxBKX1mdW5jdGlvbiBRdChBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBwQShBLEk9W10sdD1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KHQse2dldChyLGkpe2lmKHRBKGUpLGk9PT1ydClyZXR1cm4oKT0+e1F0KGcpLHRJKEEpLGU9ITB9O2lmKGk9PT0idGhlbiIpe2lmKEkubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IHM9TShBLHt0eXBlOiJHRVQiLHBhdGg6SS5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIHMudGhlbi5iaW5kKHMpfXJldHVybiBwQShBLFsuLi5JLGldKX0sc2V0KHIsaSxzKXt0QShlKTtsZXRbYSxRXT1pQShzKTtyZXR1cm4gTShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkksaV0ubWFwKEM9PkMudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixpLHMpe3RBKGUpO2xldCBhPUlbSS5sZW5ndGgtMV07aWYoYT09PWd0KXJldHVybiBNKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gcEEoQSxJLnNsaWNlKDAsLTEpKTtsZXRbUSxDXT1fQShzKTtyZXR1cm4gTShBLHt0eXBlOiJBUFBMWSIscGF0aDpJLm1hcChvPT5vLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxDKS50aGVuKGIpfSxjb25zdHJ1Y3QocixpKXt0QShlKTtsZXRbcyxhXT1fQShpKTtyZXR1cm4gTShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6SS5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6c30sYSkudGhlbihiKX19KTtyZXR1cm4gbnQoZyxBKSxnfWZ1bmN0aW9uIEV0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCBJPUEubWFwKGlBKTtyZXR1cm5bSS5tYXAodD0+dFswXSksRXQoSS5tYXAodD0+dFsxXSkpXX12YXIgZUk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSxJKXtyZXR1cm4gZUkuc2V0KEEsSSksQX1mdW5jdGlvbiBhdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gaUEoQSl7Zm9yKGxldFtJLHRdb2YgQUkpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtlLGddPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpJLHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxlSS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEFJLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gTShBLEksdCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sSSksdCl9KX1mdW5jdGlvbiBjdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLEkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KEksYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpOQX09T2JqZWN0LENBPShBPT5JPT57bGV0IHQ9ZnQuY2FsbChJKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLEk9PkNBKEkpPT09QSksc0E9QT0+ST0+dHlwZW9mIEk9PT1BLHtpc0FycmF5OnF9PUFycmF5LFo9c0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGx0KEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmUyhBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgb0k9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBEdChBKXtsZXQgSTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0k9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOkk9QSYmQS5idWZmZXImJm9JKEEuYnVmZmVyKSxJfXZhciB1dD1zQSgic3RyaW5nIiksUz1zQSgiZnVuY3Rpb24iKSxCST1zQSgibnVtYmVyIiksbkE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixodD1BPT5BPT09ITB8fEE9PT0hMSxCQT1BPT57aWYoQ0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgST1OQShBKTtyZXR1cm4oST09PW51bGx8fEk9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkdD1VKCJEYXRlIikseXQ9VSgiRmlsZSIpLHd0PVUoIkJsb2IiKSxtdD1VKCJGaWxlTGlzdCIpLHB0PUE9Pm5BKEEpJiZTKEEucGlwZSksRnQ9QT0+e2xldCBJO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFMoQS5hcHBlbmQpJiYoKEk9Q0EoQSkpPT09ImZvcm1kYXRhInx8ST09PSJvYmplY3QiJiZTKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFN0PVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJ0PUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsSSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKylJLmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGk9ci5sZW5ndGgscztmb3IoZT0wO2U8aTtlKyspcz1yW2VdLEkuY2FsbChudWxsLEFbc10scyxBKX19ZnVuY3Rpb24gQ0koQSxJKXtJPUkudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxlPXQubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9dFtlXSxJPT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBzST10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLG5JPUE9PiFaKEEpJiZBIT09c0k7ZnVuY3Rpb24gUkEoKXtsZXR7Y2FzZWxlc3M6QX09bkkodGhpcykmJnRoaXN8fHt9LEk9e30sdD0oZSxnKT0+e2xldCByPUEmJkNJKEksZyl8fGc7QkEoSVtyXSkmJkJBKGUpP0lbcl09UkEoSVtyXSxlKTpCQShlKT9JW3JdPVJBKHt9LGUpOnEoZSk/SVtyXT1lLnNsaWNlKCk6SVtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLHQpO3JldHVybiBJfXZhciBOdD0oQSxJLHQse2FsbE93bktleXM6ZX09e30pPT4oVihJLChnLHIpPT57dCYmUyhnKT9BW3JdPVcoZyx0KTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVdD1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEd0PShBLEksdCxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTpJLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LGt0PShBLEksdCxlKT0+e2xldCBnLHIsaSxzPXt9O2lmKEk9SXx8e30sQT09bnVsbClyZXR1cm4gSTtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspaT1nW3JdLCghZXx8ZShpLEEsSSkpJiYhc1tpXSYmKElbaV09QVtpXSxzW2ldPSEwKTtBPXQhPT0hMSYmTkEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsSSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEl9LEx0PShBLEksdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1JLmxlbmd0aDtsZXQgZT1BLmluZGV4T2YoSSx0KTtyZXR1cm4gZSE9PS0xJiZlPT09dH0sSnQ9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHEoQSkpcmV0dXJuIEE7bGV0IEk9QS5sZW5ndGg7aWYoIUJJKEkpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShJKTtmb3IoO0ktLSA+MDspdFtJXT1BW0ldO3JldHVybiB0fSxIdD0oQT0+ST0+QSYmSSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTkEoVWludDhBcnJheSkpLFl0PShBLEkpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTtJLmNhbGwoQSxyWzBdLHJbMV0pfX0sYnQ9KEEsSSk9PntsZXQgdCxlPVtdO2Zvcig7KHQ9QS5leGVjKEkpKSE9PW51bGw7KWUucHVzaCh0KTtyZXR1cm4gZX0sTXQ9VSgiSFRNTEZvcm1FbGVtZW50IikscXQ9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24odCxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJJPSgoe2hhc093blByb3BlcnR5OkF9KT0+KEksdCk9PkEuY2FsbChJLHQpKShPYmplY3QucHJvdG90eXBlKSxLdD1VKCJSZWdFeHAiKSxRST0oQSxJKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307Vih0LChnLHIpPT57bGV0IGk7KGk9SShnLHIsQSkpIT09ITEmJihlW3JdPWl8fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT3Q9QT0+e1FJKEEsKEksdCk9PntpZihTKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW3RdO2lmKFMoZSkpe2lmKEkuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gSSl7SS53cml0YWJsZT0hMTtyZXR1cm59SS5zZXR8fChJLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrdCsiXCciKX0pfX0pfSxUdD0oQSxJKT0+e2xldCB0PXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57dFtyXT0hMH0pfTtyZXR1cm4gcShBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KEkpKSx0fSx4dD0oKT0+e30sUHQ9KEEsSSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOkkpLFNBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsaUk9IjAxMjM0NTY3ODkiLEVJPXtESUdJVDppSSxBTFBIQTpTQSxBTFBIQV9ESUdJVDpTQStTQS50b1VwcGVyQ2FzZSgpK2lJfSxqdD0oQT0xNixJPUVJLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6ZX09STtmb3IoO0EtLTspdCs9SVtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFd0KEEpe3JldHVybiEhKEEmJlMoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBadD1BPT57bGV0IEk9bmV3IEFycmF5KDEwKSx0PShlLGcpPT57aWYobkEoZSkpe2lmKEkuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXtJW2ddPWU7bGV0IHI9cShlKT9bXTp7fTtyZXR1cm4gVihlLChpLHMpPT57bGV0IGE9dChpLGcrMSk7IVooYSkmJihyW3NdPWEpfSksSVtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiB0KEEsMCl9LFZ0PVUoIkFzeW5jRnVuY3Rpb24iKSxYdD1BPT5BJiYobkEoQSl8fFMoQSkpJiZTKEEudGhlbikmJlMoQS5jYXRjaCksQj17aXNBcnJheTpxLGlzQXJyYXlCdWZmZXI6b0ksaXNCdWZmZXI6bHQsaXNGb3JtRGF0YTpGdCxpc0FycmF5QnVmZmVyVmlldzpEdCxpc1N0cmluZzp1dCxpc051bWJlcjpCSSxpc0Jvb2xlYW46aHQsaXNPYmplY3Q6bkEsaXNQbGFpbk9iamVjdDpCQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkdCxpc0ZpbGU6eXQsaXNCbG9iOnd0LGlzUmVnRXhwOkt0LGlzRnVuY3Rpb246Uyxpc1N0cmVhbTpwdCxpc1VSTFNlYXJjaFBhcmFtczpTdCxpc1R5cGVkQXJyYXk6SHQsaXNGaWxlTGlzdDptdCxmb3JFYWNoOlYsbWVyZ2U6UkEsZXh0ZW5kOk50LHRyaW06UnQsc3RyaXBCT006VXQsaW5oZXJpdHM6R3QsdG9GbGF0T2JqZWN0Omt0LGtpbmRPZjpDQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6THQsdG9BcnJheTpKdCxmb3JFYWNoRW50cnk6WXQsbWF0Y2hBbGw6YnQsaXNIVE1MRm9ybTpNdCxoYXNPd25Qcm9wZXJ0eTpySSxoYXNPd25Qcm9wOnJJLHJlZHVjZURlc2NyaXB0b3JzOlFJLGZyZWV6ZU1ldGhvZHM6T3QsdG9PYmplY3RTZXQ6VHQsdG9DYW1lbENhc2U6cXQsbm9vcDp4dCx0b0Zpbml0ZU51bWJlcjpQdCxmaW5kS2V5OkNJLGdsb2JhbDpzSSxpc0NvbnRleHREZWZpbmVkOm5JLEFMUEhBQkVUOkVJLGdlbmVyYXRlU3RyaW5nOmp0LGlzU3BlY0NvbXBsaWFudEZvcm06V3QsdG9KU09OT2JqZWN0Olp0LGlzQXN5bmNGbjpWdCxpc1RoZW5hYmxlOlh0fTtmdW5jdGlvbiBLKEEsSSx0LGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixJJiYodGhpcy5jb2RlPUkpLHQmJih0aGlzLmNvbmZpZz10KSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUIuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkIudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGFJPUsucHJvdG90eXBlLGNJPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2NJW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssY0kpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhSSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsSSx0LGUsZyxyKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoYUkpO3JldHVybiBCLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LHM9PnMhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKGksQS5tZXNzYWdlLEksdCxlLGcpLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24oaSxyKSxpfTt2YXIgbD1LO3ZhciBRQT1udWxsO2Z1bmN0aW9uIFVBKEEpe3JldHVybiBCLmlzUGxhaW5PYmplY3QoQSl8fEIuaXNBcnJheShBKX1mdW5jdGlvbiBsSShBKXtyZXR1cm4gQi5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmSShBLEksdCl7cmV0dXJuIEE/QS5jb25jYXQoSSkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bEkoZyksIXQmJnI/IlsiK2crIl0iOmd9KS5qb2luKHQ/Ii4iOiIiKTpJfWZ1bmN0aW9uIHp0KEEpe3JldHVybiBCLmlzQXJyYXkoQSkmJiFBLnNvbWUoVUEpfXZhciBfdD1CLnRvRmxhdE9iamVjdChCLHt9LG51bGwsZnVuY3Rpb24oSSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEkpfSk7ZnVuY3Rpb24gdnQoQSxJLHQpe2lmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0k9SXx8bmV3KFFBfHxGb3JtRGF0YSksdD1CLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQi5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPXQubWV0YVRva2VucyxnPXQudmlzaXRvcnx8QyxyPXQuZG90cyxpPXQuaW5kZXhlcyxhPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkIuaXNTcGVjQ29tcGxpYW50Rm9ybShJKTtpZighQi5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihCLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZCLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQi5pc0FycmF5QnVmZmVyKEUpfHxCLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQyhFLGMsdSl7bGV0IGQ9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihCLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQi5pc0FycmF5KEUpJiZ6dChFKXx8KEIuaXNGaWxlTGlzdChFKXx8Qi5lbmRzV2l0aChjLCJbXSIpKSYmKGQ9Qi50b0FycmF5KEUpKSlyZXR1cm4gYz1sSShjKSxkLmZvckVhY2goZnVuY3Rpb24oTixJdCl7IShCLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJkkuYXBwZW5kKGk9PT0hMD9mSShbY10sSXQscik6aT09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gVUEoRSk/ITA6KEkuYXBwZW5kKGZJKHUsYyxyKSxRKEUpKSwhMSl9bGV0IG89W10sZj1PYmplY3QuYXNzaWduKF90LHtkZWZhdWx0VmlzaXRvcjpDLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOlVBfSk7ZnVuY3Rpb24gbihFLGMpe2lmKCFCLmlzVW5kZWZpbmVkKEUpKXtpZihvLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO28ucHVzaChFKSxCLmZvckVhY2goRSxmdW5jdGlvbihkLFIpeyghKEIuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmZy5jYWxsKEksZCxCLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmbihkLGM/Yy5jb25jYXQoUik6W1JdKX0pLG8ucG9wKCl9fWlmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbihBKSxJfXZhciBMPXZ0O2Z1bmN0aW9uIERJKEEpe2xldCBJPXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiBJW2VdfSl9ZnVuY3Rpb24gdUkoQSxJKXt0aGlzLl9wYWlycz1bXSxBJiZMKEEsdGhpcyxJKX12YXIgaEk9dUkucHJvdG90eXBlO2hJLmFwcGVuZD1mdW5jdGlvbihJLHQpe3RoaXMuX3BhaXJzLnB1c2goW0ksdF0pfTtoSS50b1N0cmluZz1mdW5jdGlvbihJKXtsZXQgdD1JP2Z1bmN0aW9uKGUpe3JldHVybiBJLmNhbGwodGhpcyxlLERJKX06REk7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gdChnWzBdKSsiPSIrdChnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXVJO2Z1bmN0aW9uICR0KEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSxJLHQpe2lmKCFJKXJldHVybiBBO2xldCBlPXQmJnQuZW5jb2RlfHwkdCxnPXQmJnQuc2VyaWFsaXplLHI7aWYoZz9yPWcoSSx0KTpyPUIuaXNVUkxTZWFyY2hQYXJhbXMoSSk/SS50b1N0cmluZygpOm5ldyBFQShJLHQpLnRvU3RyaW5nKGUpLHIpe2xldCBpPUEuaW5kZXhPZigiJTIzIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIEdBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoSSx0LGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpJLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoSSl7dGhpcy5oYW5kbGVyc1tJXSYmKHRoaXMuaGFuZGxlcnNbSV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChJKXtCLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmSShlKX0pfX0sa0E9R0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZEk9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5ST10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHdJPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG1JPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmRJLEZvcm1EYXRhOnlJLEJsb2I6d0l9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgTEE9e307ZXQoTEEse2hhc0Jyb3dzZXJFbnY6KCk9PnBJLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5JZX0pO3ZhciBwST10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cEkmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxJZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkxBLC4uLm1JfTtmdW5jdGlvbiBKQShBLEkpe3JldHVybiBMKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkIuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKGUsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEkpKX1mdW5jdGlvbiB0ZShBKXtyZXR1cm4gQi5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKEk9PklbMF09PT0iW10iPyIiOklbMV18fElbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCBJPXt9LHQ9T2JqZWN0LmtleXMoQSksZSxnPXQubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9dFtlXSxJW3JdPUFbcl07cmV0dXJuIEl9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gSSh0LGUsZyxyKXtsZXQgaT10W3IrK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBzPU51bWJlci5pc0Zpbml0ZSgraSksYT1yPj10Lmxlbmd0aDtyZXR1cm4gaT0haSYmQi5pc0FycmF5KGcpP2cubGVuZ3RoOmksYT8oQi5oYXNPd25Qcm9wKGcsaSk/Z1tpXT1bZ1tpXSxlXTpnW2ldPWUsIXMpOigoIWdbaV18fCFCLmlzT2JqZWN0KGdbaV0pKSYmKGdbaV09W10pLEkodCxlLGdbaV0scikmJkIuaXNBcnJheShnW2ldKSYmKGdbaV09ZWUoZ1tpXSkpLCFzKX1pZihCLmlzRm9ybURhdGEoQSkmJkIuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gQi5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e0kodGUoZSksZyx0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSxJLHQpe2lmKEIuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihJfHxKU09OLnBhcnNlKShBKSxCLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIEhBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihJLHQpe2xldCBlPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUIuaXNPYmplY3QoSSk7aWYociYmQi5pc0hUTUxGb3JtKEkpJiYoST1uZXcgRm9ybURhdGEoSSkpLEIuaXNGb3JtRGF0YShJKSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQShJKSk6STtpZihCLmlzQXJyYXlCdWZmZXIoSSl8fEIuaXNCdWZmZXIoSSl8fEIuaXNTdHJlYW0oSSl8fEIuaXNGaWxlKEkpfHxCLmlzQmxvYihJKSlyZXR1cm4gSTtpZihCLmlzQXJyYXlCdWZmZXJWaWV3KEkpKXJldHVybiBJLmJ1ZmZlcjtpZihCLmlzVVJMU2VhcmNoUGFyYW1zKEkpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLEkudG9TdHJpbmcoKTtsZXQgcztpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBKQShJLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKHM9Qi5pc0ZpbGVMaXN0KEkpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gTChzP3siZmlsZXNbXSI6SX06SSxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZShJKSk6SX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihJKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8SEEudHJhbnNpdGlvbmFsLGU9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKEkmJkIuaXNTdHJpbmcoSSkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgaT0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShJKX1jYXRjaChzKXtpZihpKXRocm93IHMubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKHMsbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpzfX1yZXR1cm4gSX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKEkpe3JldHVybiBJPj0yMDAmJkk8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntIQS5oZWFkZXJzW0FdPXt9fSk7dmFyIE89SEE7dmFyIGllPUIudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksRkk9QT0+e2xldCBJPXt9LHQsZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2c9aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9aS5zdWJzdHJpbmcoZysxKS50cmltKCksISghdHx8SVt0XSYmaWVbdF0pJiYodD09PSJzZXQtY29va2llIj9JW3RdP0lbdF0ucHVzaChlKTpJW3RdPVtlXTpJW3RdPUlbdF0/SVt0XSsiLCAiK2U6ZSl9KSxJfTt2YXIgU0k9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkIuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIG9lKEEpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPXQuZXhlYyhBKTspSVtlWzFdXT1lWzJdO3JldHVybiBJfXZhciBCZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBZQShBLEksdCxlLGcpe2lmKEIuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsSSx0KTtpZihnJiYoST10KSwhIUIuaXNTdHJpbmcoSSkpe2lmKEIuaXNTdHJpbmcoZSkpcmV0dXJuIEkuaW5kZXhPZihlKSE9PS0xO2lmKEIuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdChJKX19ZnVuY3Rpb24gQ2UoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLChJLHQsZSk9PnQudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBzZShBLEkpe2xldCB0PUIudG9DYW1lbENhc2UoIiAiK0kpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZSt0LHt2YWx1ZTpmdW5jdGlvbihnLHIsaSl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLEksZyxyLGkpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBUPWNsYXNze2NvbnN0cnVjdG9yKEkpe0kmJnRoaXMuc2V0KEkpfXNldChJLHQsZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKHMsYSxRKXtsZXQgQz16KGEpO2lmKCFDKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbz1CLmZpbmRLZXkoZyxDKTsoIW98fGdbb109PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tvXSE9PSExKSYmKGdbb3x8YV09ZkEocykpfWxldCBpPShzLGEpPT5CLmZvckVhY2gocywoUSxDKT0+cihRLEMsYSkpO3JldHVybiBCLmlzUGxhaW5PYmplY3QoSSl8fEkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koSSx0KTpCLmlzU3RyaW5nKEkpJiYoST1JLnRyaW0oKSkmJiFCZShJKT9pKEZJKEkpLHQpOkkhPW51bGwmJnIodCxJLGUpLHRoaXN9Z2V0KEksdCl7aWYoST16KEkpLEkpe2xldCBlPUIuZmluZEtleSh0aGlzLEkpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIXQpcmV0dXJuIGc7aWYodD09PSEwKXJldHVybiBvZShnKTtpZihCLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGcsZSk7aWYoQi5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoSSx0KXtpZihJPXooSSksSSl7bGV0IGU9Qi5maW5kS2V5KHRoaXMsSSk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCF0fHxZQSh0aGlzLHRoaXNbZV0sZSx0KSkpfXJldHVybiExfWRlbGV0ZShJLHQpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKGkpe2lmKGk9eihpKSxpKXtsZXQgcz1CLmZpbmRLZXkoZSxpKTtzJiYoIXR8fFlBKGUsZVtzXSxzLHQpKSYmKGRlbGV0ZSBlW3NdLGc9ITApfX1yZXR1cm4gQi5pc0FycmF5KEkpP0kuZm9yRWFjaChyKTpyKEkpLGd9Y2xlYXIoSSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcyksZT10Lmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9dFtlXTsoIUl8fFlBKHRoaXMsdGhpc1tyXSxyLEksITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZShJKXtsZXQgdD10aGlzLGU9e307cmV0dXJuIEIuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IGk9Qi5maW5kS2V5KGUscik7aWYoaSl7dFtpXT1mQShnKSxkZWxldGUgdFtyXTtyZXR1cm59bGV0IHM9ST9DZShyKTpTdHJpbmcocikudHJpbSgpO3MhPT1yJiZkZWxldGUgdFtyXSx0W3NdPWZBKGcpLGVbc109ITB9KSx0aGlzfWNvbmNhdCguLi5JKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5JKX10b0pTT04oSSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQi5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJih0W2ddPUkmJkIuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtJLHRdKT0+SSsiOiAiK3QpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiB0aGlzP0k6bmV3IHRoaXMoSSl9c3RhdGljIGNvbmNhdChJLC4uLnQpe2xldCBlPW5ldyB0aGlzKEkpO3JldHVybiB0LmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKEkpe2xldCBlPSh0aGlzW1NJXT10aGlzW1NJXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihpKXtsZXQgcz16KGkpO2Vbc118fChzZShnLGkpLGVbc109ITApfXJldHVybiBCLmlzQXJyYXkoSSk/SS5mb3JFYWNoKHIpOnIoSSksdGhpc319O1QuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0IucmVkdWNlRGVzY3JpcHRvcnMoVC5wcm90b3R5cGUsKHt2YWx1ZTpBfSxJKT0+e2xldCB0PUlbMF0udG9VcHBlckNhc2UoKStJLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbdF09ZX19fSk7Qi5mcmVlemVNZXRob2RzKFQpO3ZhciBtPVQ7ZnVuY3Rpb24gXyhBLEkpe2xldCB0PXRoaXN8fE8sZT1JfHx0LGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEIuZm9yRWFjaChBLGZ1bmN0aW9uKHMpe3I9cy5jYWxsKHQscixnLm5vcm1hbGl6ZSgpLEk/SS5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUkkoQSxJLHQpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsSSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUIuaW5oZXJpdHMoUkksbCx7X19DQU5DRUxfXzohMH0pO3ZhciBKPVJJO2Z1bmN0aW9uIGJBKEEsSSx0KXtsZXQgZT10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFlfHxlKHQuc3RhdHVzKT9BKHQpOkkobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX12YXIgTkk9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsSSx0LGUsZyxyKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEkpXTtCLmlzTnVtYmVyKHQpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxCLmlzU3RyaW5nKGUpJiZpLnB1c2goInBhdGg9IitlKSxCLmlzU3RyaW5nKGcpJiZpLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBJPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gST9kZWNvZGVVUklDb21wb25lbnQoSVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBNQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBxQShBLEkpe3JldHVybiBJP0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrSS5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLEkpe3JldHVybiBBJiYhTUEoSSk/cUEoQSxJKTpJfXZhciBVST13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBJPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBpPXI7cmV0dXJuIEkmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IHM9Qi5pc1N0cmluZyhpKT9nKGkpOmk7cmV0dXJuIHMucHJvdG9jb2w9PT1lLnByb3RvY29sJiZzLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEtBKEEpe2xldCBJPS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiBJJiZJWzFdfHwiIn1mdW5jdGlvbiBuZShBLEkpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsaTtyZXR1cm4gST1JIT09dm9pZCAwP0k6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQz1lW3JdO2l8fChpPVEpLHRbZ109YSxlW2ddPVE7bGV0IG89cixmPTA7Zm9yKDtvIT09ZzspZis9dFtvKytdLG89byVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1pPEkpcmV0dXJuO2xldCBuPUMmJlEtQztyZXR1cm4gbj9NYXRoLnJvdW5kKGYqMWUzL24pOnZvaWQgMH19dmFyIEdJPW5lO2Z1bmN0aW9uIGtJKEEsSSl7bGV0IHQ9MCxlPUdJKDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxpPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxzPXItdCxhPWUocyksUT1yPD1pO3Q9cjtsZXQgQz17bG9hZGVkOnIsdG90YWw6aSxwcm9ncmVzczppP3IvaTp2b2lkIDAsYnl0ZXM6cyxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmaSYmUT8oaS1yKS9hOnZvaWQgMCxldmVudDpnfTtDW0k/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShDKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTEk9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOnN9PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBDO2lmKEIuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEM9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1DP0Muc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBvPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7by5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLG8udGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gbigpe2lmKCFvKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBvJiZvLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxkPXtkYXRhOiFpfHxpPT09InRleHQifHxpPT09Impzb24iP28ucmVzcG9uc2VUZXh0Om8ucmVzcG9uc2Usc3RhdHVzOm8uc3RhdHVzLHN0YXR1c1RleHQ6by5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Om99O2JBKGZ1bmN0aW9uKE4pe3QoTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0sZCksbz1udWxsfWlmKCJvbmxvYWRlbmQiaW4gbz9vLm9ubG9hZGVuZD1uOm8ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IW98fG8ucmVhZHlTdGF0ZSE9PTR8fG8uc3RhdHVzPT09MCYmIShvLnJlc3BvbnNlVVJMJiZvLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChuKX0sby5vbmFib3J0PWZ1bmN0aW9uKCl7byYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxvKSksbz1udWxsKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLG8pKSxvPW51bGx9LG8ub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLGQ9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUsZC5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsbykpLG89bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihzJiZCLmlzRnVuY3Rpb24ocykmJihzPXMoQSkpLHN8fHMhPT0hMSYmVUkoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOSS5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBvJiZCLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LGQpe28uc2V0UmVxdWVzdEhlYWRlcihkLHUpfSksQi5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChvLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxpJiZpIT09Impzb24iJiYoby5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmby5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa0koQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZvLnVwbG9hZCYmby51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGtJKEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntvJiYoZSghY3x8Yy50eXBlP25ldyBKKG51bGwsQSxvKTpjKSxvLmFib3J0KCksbz1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1LQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1vLnNlbmQoZ3x8bnVsbCl9KX07dmFyIE9BPXtodHRwOlFBLHhocjpMSX07Qi5mb3JFYWNoKE9BLChBLEkpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6SX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTpJfSl9fSk7dmFyIEpJPUE9PmAtICR7QX1gLEVlPUE9PkIuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1CLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDpJfT1BLHQsZSxnPXt9O2ZvcihsZXQgcj0wO3I8STtyKyspe3Q9QVtyXTtsZXQgaTtpZihlPXQsIUVlKHQpJiYoZT1PQVsoaT1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke2l9XCdgKTtpZihlKWJyZWFrO2dbaXx8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbcyxhXSk9PmBhZGFwdGVyICR7c30gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ST9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKSSkuam9pbihgJTBBYCk6IiAiK0pJKHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6T0F9O2Z1bmN0aW9uIFRBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBKKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFRBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fE8uYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gVEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoVEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEhJPUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIEcoQSxJKXtJPUl8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIGUoUSxDLG8pe3JldHVybiBCLmlzUGxhaW5PYmplY3QoUSkmJkIuaXNQbGFpbk9iamVjdChDKT9CLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm99LFEsQyk6Qi5pc1BsYWluT2JqZWN0KEMpP0IubWVyZ2Uoe30sQyk6Qi5pc0FycmF5KEMpP0Muc2xpY2UoKTpDfWZ1bmN0aW9uIGcoUSxDLG8pe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLG8pfWVsc2UgcmV0dXJuIGUoUSxDLG8pfWZ1bmN0aW9uIHIoUSxDKXtpZighQi5pc1VuZGVmaW5lZChDKSlyZXR1cm4gZSh2b2lkIDAsQyl9ZnVuY3Rpb24gaShRLEMpe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxDKX1mdW5jdGlvbiBzKFEsQyxvKXtpZihvIGluIEkpcmV0dXJuIGUoUSxDKTtpZihvIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOnMsaGVhZGVyczooUSxDKT0+ZyhISShRKSxISShDKSwhMCl9O3JldHVybiBCLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLEkpKSxmdW5jdGlvbihDKXtsZXQgbz1hW0NdfHxnLGY9byhBW0NdLElbQ10sQyk7Qi5pc1VuZGVmaW5lZChmKSYmbyE9PXN8fCh0W0NdPWYpfSksdH12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLEkpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyhJPDE/Im4gIjoiICIpK0F9fSk7dmFyIFlJPXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihJLHQsZSl7ZnVuY3Rpb24gZyhyLGkpe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK2krKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixpLHMpPT57aWYoST09PSExKXRocm93IG5ldyBsKGcoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiFZSVtpXSYmKFlJW2ldPSEwLGNvbnNvbGUud2FybihnKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksST9JKHIsaSxzKTohMH19O2Z1bmN0aW9uIGFlKEEsSSx0KXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLGk9SVtyXTtpZihpKXtsZXQgcz1BW3JdLGE9cz09PXZvaWQgMHx8aShzLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgSD1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IoSSl7dGhpcy5kZWZhdWx0cz1JLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBrQSxyZXNwb25zZTpuZXcga0F9fWFzeW5jIHJlcXVlc3QoSSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoSSx0KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdChJLHQpe3R5cGVvZiBJPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1JKTp0PUl8fHt9LHQ9Ryh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT10O2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKX0sITEpLGchPW51bGwmJihCLmlzRnVuY3Rpb24oZyk/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6SC5mdW5jdGlvbixzZXJpYWxpemU6SC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1yJiZCLm1lcmdlKHIuY29tbW9uLHJbdC5tZXRob2RdKTtyJiZCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksdC5oZWFkZXJzPW0uY29uY2F0KGkscik7bGV0IHM9W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMscy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEMsbz0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLHMpLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQz1Qcm9taXNlLnJlc29sdmUodCk7bzxmOylDPUMudGhlbihFW28rK10sRVtvKytdKTtyZXR1cm4gQ31mPXMubGVuZ3RoO2xldCBuPXQ7Zm9yKG89MDtvPGY7KXtsZXQgRT1zW28rK10sYz1zW28rK107dHJ5e249RShuKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0M9REEuY2FsbCh0aGlzLG4pfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iobz0wLGY9US5sZW5ndGg7bzxmOylDPUMudGhlbihRW28rK10sUVtvKytdKTtyZXR1cm4gQ31nZXRVcmkoSSl7ST1HKHRoaXMuZGVmYXVsdHMsSSk7bGV0IHQ9JChJLmJhc2VVUkwsSS51cmwpO3JldHVybiBYKHQsSS5wYXJhbXMsSS5wYXJhbXNTZXJpYWxpemVyKX19O0IuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oSSl7eC5wcm90b3R5cGVbSV09ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoZXx8e30se21ldGhvZDpJLHVybDp0LGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0IuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKEkpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoc3x8e30se21ldGhvZDpJLGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOml9KSl9fXgucHJvdG90eXBlW0ldPXQoKSx4LnByb3RvdHlwZVtJKyJGb3JtIl09dCghMCl9KTt2YXIgQUE9eDt2YXIgUEE9Y2xhc3MgQXtjb25zdHJ1Y3RvcihJKXtpZih0eXBlb2YgSSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe3Q9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixpPW5ldyBQcm9taXNlKHM9PntlLnN1YnNjcmliZShzKSxyPXN9KS50aGVuKGcpO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LGl9LEkoZnVuY3Rpb24ocixpLHMpe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEoocixpLHMpLHQoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoSSl7aWYodGhpcy5yZWFzb24pe0kodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goSSk6dGhpcy5fbGlzdGVuZXJzPVtJXX11bnN1YnNjcmliZShJKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihJKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IEk7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe0k9Z30pLGNhbmNlbDpJfX19LGJJPVBBO2Z1bmN0aW9uIGpBKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBXQShBKXtyZXR1cm4gQi5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgWkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFpBKS5mb3JFYWNoKChbQSxJXSk9PntaQVtJXT1BfSk7dmFyIE1JPVpBO2Z1bmN0aW9uIHFJKEEpe2xldCBJPW5ldyBBQShBKSx0PVcoQUEucHJvdG90eXBlLnJlcXVlc3QsSSk7cmV0dXJuIEIuZXh0ZW5kKHQsQUEucHJvdG90eXBlLEkse2FsbE93bktleXM6ITB9KSxCLmV4dGVuZCh0LEksbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxSShHKEEsZykpfSx0fXZhciBoPXFJKE8pO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUo7aC5DYW5jZWxUb2tlbj1iSTtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1MO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbihJKXtyZXR1cm4gUHJvbWlzZS5hbGwoSSl9O2guc3ByZWFkPWpBO2guaXNBeGlvc0Vycm9yPVdBO2gubWVyZ2VDb25maWc9RztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShCLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TUk7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOm9pLEF4aW9zRXJyb3I6QmksQ2FuY2VsZWRFcnJvcjpDaSxpc0NhbmNlbDpzaSxDYW5jZWxUb2tlbjpuaSxWRVJTSU9OOlFpLGFsbDpFaSxDYW5jZWw6YWksaXNBeGlvc0Vycm9yOmNpLHNwcmVhZDpmaSx0b0Zvcm1EYXRhOmxpLEF4aW9zSGVhZGVyczpEaSxIdHRwU3RhdHVzQ29kZTp1aSxmb3JtVG9KU09OOmhpLGdldEFkYXB0ZXI6ZGksbWVyZ2VDb25maWc6eWl9PWRBO3ZhciBJQSxrLFhBLFZBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7WEE9bmV3IFVpbnQ4QXJyYXkoay5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gSUF8fCh0eXBlb2YgZmV0Y2g8InUiP0lBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS0kpLnRoZW4oST0+SS5hcnJheUJ1ZmZlcigpKS50aGVuKEk9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEksVkEpKS50aGVuKHRoaXMuX2luaXQpOklBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEtJLCJiYXNlNjQiKSxWQSkudGhlbih0aGlzLl9pbml0KSxJQSl9X2luaXQoSSl7az1JLmluc3RhbmNlLFZBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZShJLHQ9MCl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9SS5ieXRlTGVuZ3RoLGc9ay5leHBvcnRzLm1hbGxvYyhlKTtYQS5zZXQoSSxnKSx0PXR8fE51bWJlcihrLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1rLmV4cG9ydHMubWFsbG9jKHQpLGk9ay5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLHQsZyxlKSxzPVhBLnNsaWNlKHIscitpKTtyZXR1cm4gay5leHBvcnRzLmZyZWUoZyksay5leHBvcnRzLmZyZWUociksc319LEtJPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE9JPW5ldyB5QSxUST0hMTthc3luYyBmdW5jdGlvbiBjZShBLEksdCl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7SX0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSk7VEl8fChhd2FpdCBPSS5pbml0KCksVEk9ITApO2xldCBzPU9JLmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgeEk9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSxJLHQpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcseEkoZSxJLHQpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgUEk9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFA9dWU7ZnVuY3Rpb24gaGUoQSxJKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDg6e3Q9bmV3IEludDhBcnJheShJKTticmVha31jYXNlIHAuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShJKTticmVha31jYXNlIHAuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoSSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFk9aGU7dmFyIFpJPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGpJPW5ldyBUZXh0RW5jb2RlcixXST1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSxJKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3BlbihJLHQuZmxhZ3MpLHI9QS5mc19zdGF0KEkpLnNpemUsaT1udWxsO1pJP2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOmk9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBzPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQoZSxzLDAsciwwKSxBLmZzX2Nsb3NlKGUpLHN9ZnVuY3Rpb24gVkkoQSxJLHQpe2xldCBlPW51bGw7Wkk/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6ZT1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSx0KTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiB5KEEsSSx0LGUpe2xldCBnPTA7cmV0dXJuIEkhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGUsSS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShJLmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gaihBLEksdCl7bGV0IGU9SlNPTi5zdHJpbmdpZnkoSSksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gRihBLEksdCxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLGk9VkkoQSxnLHIpO3JldHVybiBZKGUsaS5idWZmZXIpfWZ1bmN0aW9uIHpBKEEsSSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxJXSksZT1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLEksdCxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxDKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG89akkuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG89akkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG89US5kYXRhLmRhdGEsZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG89US5kYXRhLGY9eShBLG8uZGF0YSxDLDApLG49eShBLG8uZGlyZWN0aW9uLEMsMSksRT10eXBlb2Ygby5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShvLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOm8uaW1hZ2VUeXBlLG5hbWU6by5uYW1lLG9yaWdpbjpvLm9yaWdpbixzcGFjaW5nOm8uc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsc2l6ZTpvLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtqKEEsYyxDKTticmVha31jYXNlIEQuTWVzaDp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby5jZWxscyxDLDEpLEU9eShBLG8ucG9pbnREYXRhLEMsMiksYz15KEEsby5jZWxsRGF0YSxDLDMpLHU9e21lc2hUeXBlOm8ubWVzaFR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpvLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsY2VsbEJ1ZmZlclNpemU6by5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtqKEEsdSxDKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8udmVydGljZXMsQywxKSxFPXkoQSxvLmxpbmVzLEMsMiksYz15KEEsby5wb2x5Z29ucyxDLDMpLHU9eShBLG8udHJpYW5nbGVTdHJpcHMsQyw0KSxkPXkoQSxvLnBvaW50RGF0YSxDLDUpLFI9eShBLG8ucG9pbnREYXRhLEMsNiksTj17cG9seURhdGFUeXBlOm8ucG9seURhdGFUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpvLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxsaW5lc0J1ZmZlclNpemU6by5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOm8ucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpvLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtqKEEsTixDKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKEkuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCkscz1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJnI9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oUSxDKXtsZXQgbz1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz17ZGF0YTpXSS5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289SlNPTi5wYXJzZShXSS5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSk7bz17ZGF0YTpWSShBLG4sRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBuPXpBKEEsQyk7bi5kYXRhPUYoQSxDLDAsbi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksbi5kaXJlY3Rpb249RihBLEMsMSxQLkZsb2F0NjQpLG4ubWV0YWRhdGE9bmV3IE1hcChuLm1ldGFkYXRhKSxvPW47YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsbi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOm4ucG9pbnRzPVkobi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbHM+MD9uLmNlbGxzPUYoQSxDLDEsbi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6bi5jZWxscz1ZKG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQywyLG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQywzLG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsUC5GbG9hdDMyKTpuLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LG4udmVydGljZXNCdWZmZXJTaXplPjA/bi52ZXJ0aWNlcz1GKEEsQywxLHAuVUludDMyKTpuLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxuLmxpbmVzQnVmZmVyU2l6ZT4wP24ubGluZXM9RihBLEMsMixwLlVJbnQzMik6bi5saW5lcz1uZXcgVWludDMyQXJyYXksbi5wb2x5Z29uc0J1ZmZlclNpemU+MD9uLnBvbHlnb25zPUYoQSxDLDMscC5VSW50MzIpOm4ucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LG4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bi50cmlhbmdsZVN0cmlwcz1GKEEsQyw0LHAuVUludDMyKTpuLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQyw1LG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDYsbi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTpvfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6aSxzdGRlcnI6cyxvdXRwdXRzOmF9fXZhciBYST15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsSSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSxJKTtnIT09bnVsbCYmdC5wdXNoKGcpfXJldHVybiB0fWZ1bmN0aW9uIHBlKEEsSSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksd2UmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkk/dDp0LnNsaWNlKDApfXZhciB6ST1tZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX0k9RmU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZJPVNlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkST1SZTthc3luYyBmdW5jdGlvbiBOZShBLEksdCxlKXtsZXQgZz1YSShBLEksdCxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8aS50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKHMpfWVsc2UgaWYoaS50eXBlPT09RC5JbWFnZSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi5fSShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELk1lc2gpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4udkkocykpfWVsc2UgaWYoaS50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi4kSShzKSl9fSksRkEoZyx6SShyLCEwKSl9dmFyIEF0PU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSxJLHQsZSxnLHIpe2xldCBpPWF3YWl0IFBJKEEsSSxyKTtyZXR1cm4gYXdhaXQgQXQoaSx0LGUsZyl9fTtvQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztkcih5cik7ZXhwb3J0e1lBIGFzIGJpb1JhZFJlYWRJbWFnZSxxQSBhcyBiaW9SYWRXcml0ZUltYWdlLFVBIGFzIGJtcFJlYWRJbWFnZSxOQSBhcyBibXBXcml0ZUltYWdlLFkgYXMgZXh0ZW5zaW9uVG9JbWFnZUlvLHJ0IGFzIGZkZlJlYWRJbWFnZSxmYSBhcyBmZGZXcml0ZUltYWdlLCRBIGFzIGdkY21SZWFkSW1hZ2UsZXQgYXMgZ2RjbVdyaXRlSW1hZ2UsX0EgYXMgZ2U0UmVhZEltYWdlLFZBIGFzIGdlNFdyaXRlSW1hZ2UsWkEgYXMgZ2U1UmVhZEltYWdlLFhBIGFzIGdlNVdyaXRlSW1hZ2UsdkEgYXMgZ2VBZHdSZWFkSW1hZ2UsekEgYXMgZ2VBZHdXcml0ZUltYWdlLHkgYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixkIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEUgYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCxLQSBhcyBnaXBsUmVhZEltYWdlLGpBIGFzIGdpcGxXcml0ZUltYWdlLFNBIGFzIGhkZjVSZWFkSW1hZ2UsT0EgYXMgaGRmNVdyaXRlSW1hZ2UsUkEgYXMganBlZ1JlYWRJbWFnZSxrQSBhcyBqcGVnV3JpdGVJbWFnZSxKQSBhcyBsc21SZWFkSW1hZ2UsTEEgYXMgbHNtV3JpdGVJbWFnZSxDQSBhcyBtZXRhUmVhZEltYWdlLEVBIGFzIG1ldGFXcml0ZUltYWdlLE1BIGFzIG1naFJlYWRJbWFnZSxIQSBhcyBtZ2hXcml0ZUltYWdlLFBBIGFzIG1pbmNSZWFkSW1hZ2UseEEgYXMgbWluY1dyaXRlSW1hZ2UsR0EgYXMgbXJjUmVhZEltYWdlLFRBIGFzIG1yY1dyaXRlSW1hZ2UsaEEgYXMgbmlmdGlSZWFkSW1hZ2Usd0EgYXMgbmlmdGlXcml0ZUltYWdlLGJBIGFzIG5ycmRSZWFkSW1hZ2UsREEgYXMgbnJyZFdyaXRlSW1hZ2UsQkEgYXMgcG5nUmVhZEltYWdlLGRBIGFzIHBuZ1dyaXRlSW1hZ2Usc3QgYXMgcmVhZEltYWdlLGxhIGFzIHJlYWRJbWFnZUZpbGVTZXJpZXMsbW8gYXMgcmVhZEltYWdlSHR0cCxBdCBhcyBzY2FuY29SZWFkSW1hZ2UsdHQgYXMgc2NhbmNvV3JpdGVJbWFnZSxfZyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLGRyIGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLEhnIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwseUEgYXMgdGlmZlJlYWRJbWFnZSxRQSBhcyB0aWZmV3JpdGVJbWFnZSxXQSBhcyB2dGtSZWFkSW1hZ2UsRkEgYXMgdnRrV3JpdGVJbWFnZSxpdCBhcyB3YXNtUmVhZEltYWdlLG90IGFzIHdhc21Xcml0ZUltYWdlLGF0IGFzIHdhc21ac3RkUmVhZEltYWdlLG50IGFzIHdhc21ac3RkV3JpdGVJbWFnZSxtYSBhcyB3cml0ZUltYWdlfTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py b/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py index a955fdae1..67bc602ab 100644 --- a/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py +++ b/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.2.1" +__version__ = "1.3.0" diff --git a/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py b/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py index a955fdae1..67bc602ab 100644 --- a/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py +++ b/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py @@ -1 +1 @@ -__version__ = "1.2.1" +__version__ = "1.3.0" diff --git a/packages/image-io/typescript/README.md b/packages/image-io/typescript/README.md index 4e189be16..35a4b0346 100644 --- a/packages/image-io/typescript/README.md +++ b/packages/image-io/typescript/README.md @@ -4,10 +4,10 @@ > Input and output for scientific and medical image file formats. -[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/itk-wasm/image-io/ts/app/ +[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/ITK-Wasm/image-io/ts/app/ ':include :type=iframe width=100% height=800px') -[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/itk-wasm/image-io/ts/docs/) +[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/ITK-Wasm/image-io/ts/docs/) ## Installation diff --git a/packages/image-io/typescript/package.json b/packages/image-io/typescript/package.json index eca16d25a..b79f59c1b 100644 --- a/packages/image-io/typescript/package.json +++ b/packages/image-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/image-io", - "version": "1.2.1", + "version": "1.3.0", "packageManager": "pnpm@9.6.0", "description": "Input and output for scientific and medical image file formats.", "type": "module", diff --git a/packages/image-io/typescript/src/index-worker-embedded.ts b/packages/image-io/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/image-io/typescript/src/index-worker-embedded.ts +++ b/packages/image-io/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js' diff --git a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py index a955fdae1..67bc602ab 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.2.1" +__version__ = "1.3.0" diff --git a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/js_package.py b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/js_package.py index f44b7c38d..5973623a1 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/js_package.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_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,dmFyIHh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgVHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSl4dChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEp0PW5ldyBNYXAoW1sidnRrIiwidnRrIl0sWyJieXUiLCJieXUiXSxbImZzYSIsImZyZWUtc3VyZmVyLWFzY2lpIl0sWyJmc2IiLCJmcmVlLXN1cmZlci1iaW5hcnkiXSxbIm9iaiIsIm9iaiJdLFsib2ZmIiwib2ZmIl0sWyJzdGwiLCJzdGwiXSxbInN3YyIsInN3YyJdLFsiaXdtIiwid2FzbSJdLFsiaXdtLmNib3IiLCJ3YXNtIl0sWyJpd20uY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLFQ9SnQ7dmFyIEh0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1IdDt2YXIgWXQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LEg9WXQ7ZnVuY3Rpb24gcXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFMuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFMuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIEguRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgSC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFA9cXQ7ZnVuY3Rpb24gS3QoQSl7bGV0IGU9QS5zbGljZSgoQS5sYXN0SW5kZXhPZigiLiIpLTE+Pj4wKSsyKTtpZihlLnRvTG93ZXJDYXNlKCk9PT0iZ3oiKXtsZXQgdD1BLnNsaWNlKDAsLTMpLmxhc3RJbmRleE9mKCIuIik7ZT1BLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKGUudG9Mb3dlckNhc2UoKT09PSJjYm9yIil7bGV0IHQ9QS5zbGljZSgwLC01KS5sYXN0SW5kZXhPZigiLiIpO2U9QS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihlLnRvTG93ZXJDYXNlKCk9PT0ienN0Iil7bGV0IHQ9QS5zbGljZSgwLC0xMCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoZS50b0xvd2VyQ2FzZSgpPT09InppcCIpe2xldCB0PUEuc2xpY2UoMCwtNCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfXJldHVybiBlfXZhciBBQT1LdDt2YXIganQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxDPWp0O3ZhciBTZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSx2dD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxPQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksTkE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxGZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixfdD17Y2FuSGFuZGxlOkE9PkZlKEEpJiZBW1NlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBOZShBLGUpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksV0EoQSl9fSx6dD17Y2FuSGFuZGxlOkE9PkZlKEEpJiZ1QSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sVWU9bmV3IE1hcChbWyJwcm94eSIsX3RdLFsidGhyb3ciLHp0XV0pO2Z1bmN0aW9uIFZ0KEEsZSl7Zm9yKGxldCB0IG9mIEEpaWYoZT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBOZShBLGU9Z2xvYmFsVGhpcyx0PVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobyl7aWYoIW98fCFvLmRhdGEpcmV0dXJuO2lmKCFWdCh0LG8ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtvLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDppLHR5cGU6bixwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG8uZGF0YSksZj0oby5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChKKSx1O3RyeXtsZXQgcz1nLnNsaWNlKDAsLTEpLnJlZHVjZSgoYyxJKT0+Y1tJXSxBKSxhPWcucmVkdWNlKChjLEkpPT5jW0ldLEEpO3N3aXRjaChuKXtjYXNlIkdFVCI6dT1hO2JyZWFrO2Nhc2UiU0VUIjpzW2cuc2xpY2UoLTEpWzBdXT1KKG8uZGF0YS52YWx1ZSksdT0hMDticmVhaztjYXNlIkFQUExZIjp1PWEuYXBwbHkocyxmKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBjPW5ldyBhKC4uLmYpO3U9ZXIoYyl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpjLHBvcnQyOkl9PW5ldyBNZXNzYWdlQ2hhbm5lbDtOZShBLEkpLHU9UEEoYyxbY10pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6dT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKHMpe3U9e3ZhbHVlOnMsW3VBXTowfX1Qcm9taXNlLnJlc29sdmUodSkuY2F0Y2gocz0+KHt2YWx1ZTpzLFt1QV06MH0pKS50aGVuKHM9PntsZXRbYSxjXT1jQShzKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLGMpLG49PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLE1lKGUpLE5BIGluIEEmJnR5cGVvZiBBW05BXT09ImZ1bmN0aW9uIiYmQVtOQV0oKSl9KS5jYXRjaChzPT57bGV0W2EsY109Y0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFt1QV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGEpLHtpZDppfSksYyl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBadChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBNZShBKXtadChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIFdBKEEsZSl7cmV0dXJuIE1BKEEsW10sZSl9ZnVuY3Rpb24gbEEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIE9lKEEpe3JldHVybiBZKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e01lKEEpfSl9dmFyIEJBPW5ldyBXZWFrTWFwLENBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShCQS5nZXQoQSl8fDApLTE7QkEuc2V0KEEsZSksZT09PTAmJk9lKEEpfSk7ZnVuY3Rpb24gWHQoQSxlKXtsZXQgdD0oQkEuZ2V0KGUpfHwwKSsxO0JBLnNldChlLHQpLENBJiZDQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gJHQoQSl7Q0EmJkNBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gTUEoQSxlPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxvPW5ldyBQcm94eSh0LHtnZXQoaSxuKXtpZihsQShyKSxuPT09T0EpcmV0dXJuKCk9PnskdChvKSxPZShBKSxyPSEwfTtpZihuPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm99O2xldCBnPVkoQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGY9PmYudG9TdHJpbmcoKSl9KS50aGVuKEopO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gTUEoQSxbLi4uZSxuXSl9LHNldChpLG4sZyl7bEEocik7bGV0W2YsdV09Y0EoZyk7cmV0dXJuIFkoQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLG5dLm1hcChzPT5zLnRvU3RyaW5nKCkpLHZhbHVlOmZ9LHUpLnRoZW4oSil9LGFwcGx5KGksbixnKXtsQShyKTtsZXQgZj1lW2UubGVuZ3RoLTFdO2lmKGY9PT12dClyZXR1cm4gWShBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKEopO2lmKGY9PT0iYmluZCIpcmV0dXJuIE1BKEEsZS5zbGljZSgwLC0xKSk7bGV0W3Usc109a2UoZyk7cmV0dXJuIFkoQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6dX0scykudGhlbihKKX0sY29uc3RydWN0KGksbil7bEEocik7bGV0W2csZl09a2Uobik7cmV0dXJuIFkoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKHU9PnUudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LGYpLnRoZW4oSil9fSk7cmV0dXJuIFh0KG8sQSksb31mdW5jdGlvbiBBcihBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBrZShBKXtsZXQgZT1BLm1hcChjQSk7cmV0dXJuW2UubWFwKHQ9PnRbMF0pLEFyKGUubWFwKHQ9PnRbMV0pKV19dmFyIFdlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFBBKEEsZSl7cmV0dXJuIFdlLnNldChBLGUpLEF9ZnVuY3Rpb24gZXIoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W1NlXTohMH0pfWZ1bmN0aW9uIGNBKEEpe2ZvcihsZXRbZSx0XW9mIFVlKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbcixvXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTpyfSxvXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sV2UuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gSihBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBVZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIFkoQSxlLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG89dHIoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGkobil7IW4uZGF0YXx8IW4uZGF0YS5pZHx8bi5kYXRhLmlkIT09b3x8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsaSkscihuLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm99LGUpLHQpfSl9ZnVuY3Rpb24gdHIoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIGVBKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6cnJ9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnhBfT1PYmplY3QscEE9KEE9PmU9PntsZXQgdD1yci5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+cEEoZSk9PT1BKSxFQT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6cX09QXJyYXksdEE9RUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGlyKEEpe3JldHVybiBBIT09bnVsbCYmIXRBKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIXRBKEEuY29uc3RydWN0b3IpJiZVKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciB4ZT1PKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIG9yKEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmeGUoQS5idWZmZXIpLGV9dmFyIG5yPUVBKCJzdHJpbmciKSxVPUVBKCJmdW5jdGlvbiIpLFRlPUVBKCJudW1iZXIiKSxRQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLHNyPUE9PkE9PT0hMHx8QT09PSExLGZBPUE9PntpZihwQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPXhBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LGFyPU8oIkRhdGUiKSxJcj1PKCJGaWxlIiksZ3I9TygiQmxvYiIpLGxyPU8oIkZpbGVMaXN0IiksdXI9QT0+UUEoQSkmJlUoQS5waXBlKSxCcj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VShBLmFwcGVuZCkmJigoZT1wQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlUoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sQ3I9TygiVVJMU2VhcmNoUGFyYW1zIiksY3I9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIHJBKEEsZSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IHIsbztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3Iocj0wLG89QS5sZW5ndGg7cjxvO3IrKyllLmNhbGwobnVsbCxBW3JdLHIsQSk7ZWxzZXtsZXQgaT10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLG49aS5sZW5ndGgsZztmb3Iocj0wO3I8bjtyKyspZz1pW3JdLGUuY2FsbChudWxsLEFbZ10sZyxBKX19ZnVuY3Rpb24gSmUoQSxlKXtlPWUudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxyPXQubGVuZ3RoLG87Zm9yKDtyLS0gPjA7KWlmKG89dFtyXSxlPT09by50b0xvd2VyQ2FzZSgpKXJldHVybiBvO3JldHVybiBudWxsfXZhciBIZT10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFllPUE9PiF0QShBKSYmQSE9PUhlO2Z1bmN0aW9uIExBKCl7bGV0e2Nhc2VsZXNzOkF9PVllKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsbyk9PntsZXQgaT1BJiZKZShlLG8pfHxvO2ZBKGVbaV0pJiZmQShyKT9lW2ldPUxBKGVbaV0scik6ZkEocik/ZVtpXT1MQSh7fSxyKTpxKHIpP2VbaV09ci5zbGljZSgpOmVbaV09cn07Zm9yKGxldCByPTAsbz1hcmd1bWVudHMubGVuZ3RoO3I8bztyKyspYXJndW1lbnRzW3JdJiZyQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIGZyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihyQShlLChvLGkpPT57dCYmVShvKT9BW2ldPWVBKG8sdCk6QVtpXT1vfSx7YWxsT3duS2V5czpyfSksQSkscHI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxFcj0oQSxlLHQscik9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHIpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxRcj0oQSxlLHQscik9PntsZXQgbyxpLG4sZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG89T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksaT1vLmxlbmd0aDtpLS0gPjA7KW49b1tpXSwoIXJ8fHIobixBLGUpKSYmIWdbbl0mJihlW25dPUFbbl0sZ1tuXT0hMCk7QT10IT09ITEmJnhBKEEpfXdoaWxlKEEmJighdHx8dChBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxtcj0oQSxlLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09ZS5sZW5ndGg7bGV0IHI9QS5pbmRleE9mKGUsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LGRyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihxKEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFUZShlKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXRbZV09QVtlXTtyZXR1cm4gdH0saHI9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJnhBKFVpbnQ4QXJyYXkpKSx5cj0oQSxlKT0+e2xldCByPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbztmb3IoOyhvPXIubmV4dCgpKSYmIW8uZG9uZTspe2xldCBpPW8udmFsdWU7ZS5jYWxsKEEsaVswXSxpWzFdKX19LHdyPShBLGUpPT57bGV0IHQscj1bXTtmb3IoOyh0PUEuZXhlYyhlKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LERyPU8oIkhUTUxGb3JtRWxlbWVudCIpLGJyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixvKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK299KSxHZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHQpPT5BLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksUnI9TygiUmVnRXhwIikscWU9KEEsZSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxyPXt9O3JBKHQsKG8saSk9PntsZXQgbjsobj1lKG8saSxBKSkhPT0hMSYmKHJbaV09bnx8byl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxrcj1BPT57cWUoQSwoZSx0KT0+e2lmKFUoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoVShyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxTcj0oQSxlKT0+e2xldCB0PXt9LHI9bz0+e28uZm9yRWFjaChpPT57dFtpXT0hMH0pfTtyZXR1cm4gcShBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxGcj0oKT0+e30sVXI9KEEsZSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOmUpLEdBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsTGU9IjAxMjM0NTY3ODkiLEtlPXtESUdJVDpMZSxBTFBIQTpHQSxBTFBIQV9ESUdJVDpHQStHQS50b1VwcGVyQ2FzZSgpK0xlfSxOcj0oQT0xNixlPUtlLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6cn09ZTtmb3IoO0EtLTspdCs9ZVtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIE1yKEEpe3JldHVybiEhKEEmJlUoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBPcj1BPT57bGV0IGU9bmV3IEFycmF5KDEwKSx0PShyLG8pPT57aWYoUUEocikpe2lmKGUuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXtlW29dPXI7bGV0IGk9cShyKT9bXTp7fTtyZXR1cm4gckEociwobixnKT0+e2xldCBmPXQobixvKzEpOyF0QShmKSYmKGlbZ109Zil9KSxlW29dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIHQoQSwwKX0sV3I9TygiQXN5bmNGdW5jdGlvbiIpLFByPUE9PkEmJihRQShBKXx8VShBKSkmJlUoQS50aGVuKSYmVShBLmNhdGNoKSxsPXtpc0FycmF5OnEsaXNBcnJheUJ1ZmZlcjp4ZSxpc0J1ZmZlcjppcixpc0Zvcm1EYXRhOkJyLGlzQXJyYXlCdWZmZXJWaWV3Om9yLGlzU3RyaW5nOm5yLGlzTnVtYmVyOlRlLGlzQm9vbGVhbjpzcixpc09iamVjdDpRQSxpc1BsYWluT2JqZWN0OmZBLGlzVW5kZWZpbmVkOnRBLGlzRGF0ZTphcixpc0ZpbGU6SXIsaXNCbG9iOmdyLGlzUmVnRXhwOlJyLGlzRnVuY3Rpb246VSxpc1N0cmVhbTp1cixpc1VSTFNlYXJjaFBhcmFtczpDcixpc1R5cGVkQXJyYXk6aHIsaXNGaWxlTGlzdDpscixmb3JFYWNoOnJBLG1lcmdlOkxBLGV4dGVuZDpmcix0cmltOmNyLHN0cmlwQk9NOnByLGluaGVyaXRzOkVyLHRvRmxhdE9iamVjdDpRcixraW5kT2Y6cEEsa2luZE9mVGVzdDpPLGVuZHNXaXRoOm1yLHRvQXJyYXk6ZHIsZm9yRWFjaEVudHJ5OnlyLG1hdGNoQWxsOndyLGlzSFRNTEZvcm06RHIsaGFzT3duUHJvcGVydHk6R2UsaGFzT3duUHJvcDpHZSxyZWR1Y2VEZXNjcmlwdG9yczpxZSxmcmVlemVNZXRob2RzOmtyLHRvT2JqZWN0U2V0OlNyLHRvQ2FtZWxDYXNlOmJyLG5vb3A6RnIsdG9GaW5pdGVOdW1iZXI6VXIsZmluZEtleTpKZSxnbG9iYWw6SGUsaXNDb250ZXh0RGVmaW5lZDpZZSxBTFBIQUJFVDpLZSxnZW5lcmF0ZVN0cmluZzpOcixpc1NwZWNDb21wbGlhbnRGb3JtOk1yLHRvSlNPTk9iamVjdDpPcixpc0FzeW5jRm46V3IsaXNUaGVuYWJsZTpQcn07ZnVuY3Rpb24gSyhBLGUsdCxyLG8pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxvJiYodGhpcy5yZXNwb25zZT1vKX1sLmluaGVyaXRzKEssRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpsLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBqZT1LLnByb3RvdHlwZSx2ZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9Pnt2ZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhLLHZlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoamUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Sy5mcm9tPShBLGUsdCxyLG8saSk9PntsZXQgbj1PYmplY3QuY3JlYXRlKGplKTtyZXR1cm4gbC50b0ZsYXRPYmplY3QoQSxuLGZ1bmN0aW9uKGYpe3JldHVybiBmIT09RXJyb3IucHJvdG90eXBlfSxnPT5nIT09ImlzQXhpb3NFcnJvciIpLEsuY2FsbChuLEEubWVzc2FnZSxlLHQscixvKSxuLmNhdXNlPUEsbi5uYW1lPUEubmFtZSxpJiZPYmplY3QuYXNzaWduKG4saSksbn07dmFyIHk9Szt2YXIgbUE9bnVsbDtmdW5jdGlvbiBUQShBKXtyZXR1cm4gbC5pc1BsYWluT2JqZWN0KEEpfHxsLmlzQXJyYXkoQSl9ZnVuY3Rpb24gemUoQSl7cmV0dXJuIGwuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gX2UoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihvLGkpe3JldHVybiBvPXplKG8pLCF0JiZpPyJbIitvKyJdIjpvfSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBHcihBKXtyZXR1cm4gbC5pc0FycmF5KEEpJiYhQS5zb21lKFRBKX12YXIgTHI9bC50b0ZsYXRPYmplY3QobCx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIHhyKEEsZSx0KXtpZighbC5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhtQXx8Rm9ybURhdGEpLHQ9bC50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHAsRSl7cmV0dXJuIWwuaXNVbmRlZmluZWQoRVtwXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbz10LnZpc2l0b3J8fHMsaT10LmRvdHMsbj10LmluZGV4ZXMsZj0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZsLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWwuaXNGdW5jdGlvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIHUoQil7aWYoQj09PW51bGwpcmV0dXJuIiI7aWYobC5pc0RhdGUoQikpcmV0dXJuIEIudG9JU09TdHJpbmcoKTtpZighZiYmbC5pc0Jsb2IoQikpdGhyb3cgbmV3IHkoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGwuaXNBcnJheUJ1ZmZlcihCKXx8bC5pc1R5cGVkQXJyYXkoQik/ZiYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0JdKTpCdWZmZXIuZnJvbShCKTpCfWZ1bmN0aW9uIHMoQixwLEUpe2xldCB3PUI7aWYoQiYmIUUmJnR5cGVvZiBCPT0ib2JqZWN0Iil7aWYobC5lbmRzV2l0aChwLCJ7fSIpKXA9cj9wOnAuc2xpY2UoMCwtMiksQj1KU09OLnN0cmluZ2lmeShCKTtlbHNlIGlmKGwuaXNBcnJheShCKSYmR3IoQil8fChsLmlzRmlsZUxpc3QoQil8fGwuZW5kc1dpdGgocCwiW10iKSkmJih3PWwudG9BcnJheShCKSkpcmV0dXJuIHA9emUocCksdy5mb3JFYWNoKGZ1bmN0aW9uKE0sTHQpeyEobC5pc1VuZGVmaW5lZChNKXx8TT09PW51bGwpJiZlLmFwcGVuZChuPT09ITA/X2UoW3BdLEx0LGkpOm49PT1udWxsP3A6cCsiW10iLHUoTSkpfSksITF9cmV0dXJuIFRBKEIpPyEwOihlLmFwcGVuZChfZShFLHAsaSksdShCKSksITEpfWxldCBhPVtdLGM9T2JqZWN0LmFzc2lnbihMcix7ZGVmYXVsdFZpc2l0b3I6cyxjb252ZXJ0VmFsdWU6dSxpc1Zpc2l0YWJsZTpUQX0pO2Z1bmN0aW9uIEkoQixwKXtpZighbC5pc1VuZGVmaW5lZChCKSl7aWYoYS5pbmRleE9mKEIpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK3Auam9pbigiLiIpKTthLnB1c2goQiksbC5mb3JFYWNoKEIsZnVuY3Rpb24odyxOKXsoIShsLmlzVW5kZWZpbmVkKHcpfHx3PT09bnVsbCkmJm8uY2FsbChlLHcsbC5pc1N0cmluZyhOKT9OLnRyaW0oKTpOLHAsYykpPT09ITAmJkkodyxwP3AuY29uY2F0KE4pOltOXSl9KSxhLnBvcCgpfX1pZighbC5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEkoQSksZX12YXIgRz14cjtmdW5jdGlvbiBWZShBKXtsZXQgZT17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUyOCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZyxmdW5jdGlvbihyKXtyZXR1cm4gZVtyXX0pfWZ1bmN0aW9uIFplKEEsZSl7dGhpcy5fcGFpcnM9W10sQSYmRyhBLHRoaXMsZSl9dmFyIFhlPVplLnByb3RvdHlwZTtYZS5hcHBlbmQ9ZnVuY3Rpb24oZSx0KXt0aGlzLl9wYWlycy5wdXNoKFtlLHRdKX07WGUudG9TdHJpbmc9ZnVuY3Rpb24oZSl7bGV0IHQ9ZT9mdW5jdGlvbihyKXtyZXR1cm4gZS5jYWxsKHRoaXMscixWZSl9OlZlO3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24obyl7cmV0dXJuIHQob1swXSkrIj0iK3Qob1sxXSl9LCIiKS5qb2luKCImIil9O3ZhciBkQT1aZTtmdW5jdGlvbiBUcihBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNC9nLCIkIikucmVwbGFjZSgvJTJDL2dpLCIsIikucmVwbGFjZSgvJTIwL2csIisiKS5yZXBsYWNlKC8lNUIvZ2ksIlsiKS5yZXBsYWNlKC8lNUQvZ2ksIl0iKX1mdW5jdGlvbiBpQShBLGUsdCl7aWYoIWUpcmV0dXJuIEE7bGV0IHI9dCYmdC5lbmNvZGV8fFRyLG89dCYmdC5zZXJpYWxpemUsaTtpZihvP2k9byhlLHQpOmk9bC5pc1VSTFNlYXJjaFBhcmFtcyhlKT9lLnRvU3RyaW5nKCk6bmV3IGRBKGUsdCkudG9TdHJpbmcociksaSl7bGV0IG49QS5pbmRleE9mKCIjIik7biE9PS0xJiYoQT1BLnNsaWNlKDAsbikpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK2l9cmV0dXJuIEF9dmFyIEpBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoZSx0LHIpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDplLHJlamVjdGVkOnQsc3luY2hyb25vdXM6cj9yLnN5bmNocm9ub3VzOiExLHJ1bldoZW46cj9yLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoZSl7dGhpcy5oYW5kbGVyc1tlXSYmKHRoaXMuaGFuZGxlcnNbZV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChlKXtsLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihyKXtyIT09bnVsbCYmZShyKX0pfX0sSEE9SkE7dmFyIGhBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgJGU9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOmRBO3ZhciBBdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIGV0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIHR0PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOiRlLEZvcm1EYXRhOkF0LEJsb2I6ZXR9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWUE9e307VHQoWUEse2hhc0Jyb3dzZXJFbnY6KCk9PnJ0LGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+SnIsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5Icn0pO3ZhciBydD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixKcj0oQT0+cnQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxIcj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIFI9ey4uLllBLC4uLnR0fTtmdW5jdGlvbiBxQShBLGUpe3JldHVybiBHKEEsbmV3IFIuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbyxpKXtyZXR1cm4gUi5pc05vZGUmJmwuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBZcihBKXtyZXR1cm4gbC5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIHFyKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixvPXQubGVuZ3RoLGk7Zm9yKHI9MDtyPG87cisrKWk9dFtyXSxlW2ldPUFbaV07cmV0dXJuIGV9ZnVuY3Rpb24gS3IoQSl7ZnVuY3Rpb24gZSh0LHIsbyxpKXtsZXQgbj10W2krK107aWYobj09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBnPU51bWJlci5pc0Zpbml0ZSgrbiksZj1pPj10Lmxlbmd0aDtyZXR1cm4gbj0hbiYmbC5pc0FycmF5KG8pP28ubGVuZ3RoOm4sZj8obC5oYXNPd25Qcm9wKG8sbik/b1tuXT1bb1tuXSxyXTpvW25dPXIsIWcpOigoIW9bbl18fCFsLmlzT2JqZWN0KG9bbl0pKSYmKG9bbl09W10pLGUodCxyLG9bbl0saSkmJmwuaXNBcnJheShvW25dKSYmKG9bbl09cXIob1tuXSkpLCFnKX1pZihsLmlzRm9ybURhdGEoQSkmJmwuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gbC5mb3JFYWNoRW50cnkoQSwocixvKT0+e2UoWXIociksbyx0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgeUE9S3I7ZnVuY3Rpb24ganIoQSxlLHQpe2lmKGwuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxsLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIEtBPXt0cmFuc2l0aW9uYWw6aEEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbz1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxpPWwuaXNPYmplY3QoZSk7aWYoaSYmbC5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLGwuaXNGb3JtRGF0YShlKSlyZXR1cm4gbz9KU09OLnN0cmluZ2lmeSh5QShlKSk6ZTtpZihsLmlzQXJyYXlCdWZmZXIoZSl8fGwuaXNCdWZmZXIoZSl8fGwuaXNTdHJlYW0oZSl8fGwuaXNGaWxlKGUpfHxsLmlzQmxvYihlKSlyZXR1cm4gZTtpZihsLmlzQXJyYXlCdWZmZXJWaWV3KGUpKXJldHVybiBlLmJ1ZmZlcjtpZihsLmlzVVJMU2VhcmNoUGFyYW1zKGUpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLGUudG9TdHJpbmcoKTtsZXQgZztpZihpKXtpZihyLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBxQShlLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKGc9bC5pc0ZpbGVMaXN0KGUpKXx8ci5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBmPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gRyhnP3siZmlsZXNbXSI6ZX06ZSxmJiZuZXcgZix0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIGl8fG8/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxqcihlKSk6ZX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihlKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8S0EudHJhbnNpdGlvbmFsLHI9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxvPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGUmJmwuaXNTdHJpbmcoZSkmJihyJiYhdGhpcy5yZXNwb25zZVR5cGV8fG8pKXtsZXQgbj0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZvO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShlKX1jYXRjaChnKXtpZihuKXRocm93IGcubmFtZT09PSJTeW50YXhFcnJvciI/eS5mcm9tKGcseS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpnfX1yZXR1cm4gZX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6Ui5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6Ui5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKGUpe3JldHVybiBlPj0yMDAmJmU8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07bC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntLQS5oZWFkZXJzW0FdPXt9fSk7dmFyIGo9S0E7dmFyIHZyPWwudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksaXQ9QT0+e2xldCBlPXt9LHQscixvO3JldHVybiBBJiZBLnNwbGl0KGAKYCkuZm9yRWFjaChmdW5jdGlvbihuKXtvPW4uaW5kZXhPZigiOiIpLHQ9bi5zdWJzdHJpbmcoMCxvKS50cmltKCkudG9Mb3dlckNhc2UoKSxyPW4uc3Vic3RyaW5nKG8rMSkudHJpbSgpLCEoIXR8fGVbdF0mJnZyW3RdKSYmKHQ9PT0ic2V0LWNvb2tpZSI/ZVt0XT9lW3RdLnB1c2gocik6ZVt0XT1bcl06ZVt0XT1lW3RdP2VbdF0rIiwgIityOnIpfSksZX07dmFyIG90PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gb0EoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiB3QShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6bC5pc0FycmF5KEEpP0EubWFwKHdBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gX3IoQSl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PS8oW15ccyw7PV0rKVxzKig/Oj1ccyooW14sO10rKSk/L2cscjtmb3IoO3I9dC5leGVjKEEpOyllW3JbMV1dPXJbMl07cmV0dXJuIGV9dmFyIHpyPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIGpBKEEsZSx0LHIsbyl7aWYobC5pc0Z1bmN0aW9uKHIpKXJldHVybiByLmNhbGwodGhpcyxlLHQpO2lmKG8mJihlPXQpLCEhbC5pc1N0cmluZyhlKSl7aWYobC5pc1N0cmluZyhyKSlyZXR1cm4gZS5pbmRleE9mKHIpIT09LTE7aWYobC5pc1JlZ0V4cChyKSlyZXR1cm4gci50ZXN0KGUpfX1mdW5jdGlvbiBWcihBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxkXSkoXHcqKS9nLChlLHQscik9PnQudG9VcHBlckNhc2UoKStyKX1mdW5jdGlvbiBacihBLGUpe2xldCB0PWwudG9DYW1lbENhc2UoIiAiK2UpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChyPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEscit0LHt2YWx1ZTpmdW5jdGlvbihvLGksbil7cmV0dXJuIHRoaXNbcl0uY2FsbCh0aGlzLGUsbyxpLG4pfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciB2PWNsYXNze2NvbnN0cnVjdG9yKGUpe2UmJnRoaXMuc2V0KGUpfXNldChlLHQscil7bGV0IG89dGhpcztmdW5jdGlvbiBpKGcsZix1KXtsZXQgcz1vQShmKTtpZighcyl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGE9bC5maW5kS2V5KG8scyk7KCFhfHxvW2FdPT09dm9pZCAwfHx1PT09ITB8fHU9PT12b2lkIDAmJm9bYV0hPT0hMSkmJihvW2F8fGZdPXdBKGcpKX1sZXQgbj0oZyxmKT0+bC5mb3JFYWNoKGcsKHUscyk9PmkodSxzLGYpKTtyZXR1cm4gbC5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcj9uKGUsdCk6bC5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhenIoZSk/bihpdChlKSx0KTplIT1udWxsJiZpKHQsZSxyKSx0aGlzfWdldChlLHQpe2lmKGU9b0EoZSksZSl7bGV0IHI9bC5maW5kS2V5KHRoaXMsZSk7aWYocil7bGV0IG89dGhpc1tyXTtpZighdClyZXR1cm4gbztpZih0PT09ITApcmV0dXJuIF9yKG8pO2lmKGwuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsbyxyKTtpZihsLmlzUmVnRXhwKHQpKXJldHVybiB0LmV4ZWMobyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhlLHQpe2lmKGU9b0EoZSksZSl7bGV0IHI9bC5maW5kS2V5KHRoaXMsZSk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCF0fHxqQSh0aGlzLHRoaXNbcl0scix0KSkpfXJldHVybiExfWRlbGV0ZShlLHQpe2xldCByPXRoaXMsbz0hMTtmdW5jdGlvbiBpKG4pe2lmKG49b0Eobiksbil7bGV0IGc9bC5maW5kS2V5KHIsbik7ZyYmKCF0fHxqQShyLHJbZ10sZyx0KSkmJihkZWxldGUgcltnXSxvPSEwKX19cmV0dXJuIGwuaXNBcnJheShlKT9lLmZvckVhY2goaSk6aShlKSxvfWNsZWFyKGUpe2xldCB0PU9iamVjdC5rZXlzKHRoaXMpLHI9dC5sZW5ndGgsbz0hMTtmb3IoO3ItLTspe2xldCBpPXRbcl07KCFlfHxqQSh0aGlzLHRoaXNbaV0saSxlLCEwKSkmJihkZWxldGUgdGhpc1tpXSxvPSEwKX1yZXR1cm4gb31ub3JtYWxpemUoZSl7bGV0IHQ9dGhpcyxyPXt9O3JldHVybiBsLmZvckVhY2godGhpcywobyxpKT0+e2xldCBuPWwuZmluZEtleShyLGkpO2lmKG4pe3Rbbl09d0EobyksZGVsZXRlIHRbaV07cmV0dXJufWxldCBnPWU/VnIoaSk6U3RyaW5nKGkpLnRyaW0oKTtnIT09aSYmZGVsZXRlIHRbaV0sdFtnXT13QShvKSxyW2ddPSEwfSksdGhpc31jb25jYXQoLi4uZSl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uZSl9dG9KU09OKGUpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGwuZm9yRWFjaCh0aGlzLChyLG8pPT57ciE9bnVsbCYmciE9PSExJiYodFtvXT1lJiZsLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksdH1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbZSx0XSk9PmUrIjogIit0KS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHRoaXM/ZTpuZXcgdGhpcyhlKX1zdGF0aWMgY29uY2F0KGUsLi4udCl7bGV0IHI9bmV3IHRoaXMoZSk7cmV0dXJuIHQuZm9yRWFjaChvPT5yLnNldChvKSkscn1zdGF0aWMgYWNjZXNzb3IoZSl7bGV0IHI9KHRoaXNbb3RdPXRoaXNbb3RdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG4pe2xldCBnPW9BKG4pO3JbZ118fChacihvLG4pLHJbZ109ITApfXJldHVybiBsLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksdGhpc319O3YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2wucmVkdWNlRGVzY3JpcHRvcnModi5wcm90b3R5cGUsKHt2YWx1ZTpBfSxlKT0+e2xldCB0PWVbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KHIpe3RoaXNbdF09cn19fSk7bC5mcmVlemVNZXRob2RzKHYpO3ZhciBrPXY7ZnVuY3Rpb24gbkEoQSxlKXtsZXQgdD10aGlzfHxqLHI9ZXx8dCxvPWsuZnJvbShyLmhlYWRlcnMpLGk9ci5kYXRhO3JldHVybiBsLmZvckVhY2goQSxmdW5jdGlvbihnKXtpPWcuY2FsbCh0LGksby5ub3JtYWxpemUoKSxlP2Uuc3RhdHVzOnZvaWQgMCl9KSxvLm5vcm1hbGl6ZSgpLGl9ZnVuY3Rpb24gc0EoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBudChBLGUsdCl7eS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIix5LkVSUl9DQU5DRUxFRCxlLHQpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9bC5pbmhlcml0cyhudCx5LHtfX0NBTkNFTF9fOiEwfSk7dmFyIEw9bnQ7ZnVuY3Rpb24gdkEoQSxlLHQpe2xldCByPXQuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyF0LnN0YXR1c3x8IXJ8fHIodC5zdGF0dXMpP0EodCk6ZShuZXcgeSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK3Quc3RhdHVzLFt5LkVSUl9CQURfUkVRVUVTVCx5LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IodC5zdGF0dXMvMTAwKS00XSx0LmNvbmZpZyx0LnJlcXVlc3QsdCkpfXZhciBzdD1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSxlLHQscixvLGkpe2xldCBuPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQoZSldO2wuaXNOdW1iZXIodCkmJm4ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKHQpLnRvR01UU3RyaW5nKCkpLGwuaXNTdHJpbmcocikmJm4ucHVzaCgicGF0aD0iK3IpLGwuaXNTdHJpbmcobykmJm4ucHVzaCgiZG9tYWluPSIrbyksaT09PSEwJiZuLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1uLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IGU9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gZT9kZWNvZGVVUklDb21wb25lbnQoZVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBfQShBKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHpBKEEsZSl7cmV0dXJuIGU/QS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrZS5yZXBsYWNlKC9eXC8rLywiIik6QX1mdW5jdGlvbiBhQShBLGUpe3JldHVybiBBJiYhX0EoZSk/ekEoQSxlKTplfXZhciBhdD1SLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBlPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBvKGkpe2xldCBuPWk7cmV0dXJuIGUmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbiksbj10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixuKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6dC5oYXNoP3QuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIHI9byh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obil7bGV0IGc9bC5pc1N0cmluZyhuKT9vKG4pOm47cmV0dXJuIGcucHJvdG9jb2w9PT1yLnByb3RvY29sJiZnLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIFZBKEEpe2xldCBlPS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKEEpO3JldHVybiBlJiZlWzFdfHwiIn1mdW5jdGlvbiBYcihBLGUpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLHI9bmV3IEFycmF5KEEpLG89MCxpPTAsbjtyZXR1cm4gZT1lIT09dm9pZCAwP2U6MWUzLGZ1bmN0aW9uKGYpe2xldCB1PURhdGUubm93KCkscz1yW2ldO258fChuPXUpLHRbb109ZixyW29dPXU7bGV0IGE9aSxjPTA7Zm9yKDthIT09bzspYys9dFthKytdLGE9YSVBO2lmKG89KG8rMSklQSxvPT09aSYmKGk9KGkrMSklQSksdS1uPGUpcmV0dXJuO2xldCBJPXMmJnUtcztyZXR1cm4gST9NYXRoLnJvdW5kKGMqMWUzL0kpOnZvaWQgMH19dmFyIEl0PVhyO2Z1bmN0aW9uIGd0KEEsZSl7bGV0IHQ9MCxyPUl0KDUwLDI1MCk7cmV0dXJuIG89PntsZXQgaT1vLmxvYWRlZCxuPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxnPWktdCxmPXIoZyksdT1pPD1uO3Q9aTtsZXQgcz17bG9hZGVkOmksdG90YWw6bixwcm9ncmVzczpuP2kvbjp2b2lkIDAsYnl0ZXM6ZyxyYXRlOmZ8fHZvaWQgMCxlc3RpbWF0ZWQ6ZiYmbiYmdT8obi1pKS9mOnZvaWQgMCxldmVudDpvfTtzW2U/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShzKX19dmFyICRyPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsbHQ9JHImJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBvPUEuZGF0YSxpPWsuZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6bix3aXRoWFNSRlRva2VuOmd9PUEsZjtmdW5jdGlvbiB1KCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShmKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGYpfWxldCBzO2lmKGwuaXNGb3JtRGF0YShvKSl7aWYoUi5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFIuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKHM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbcCwuLi5FXT1zP3Muc3BsaXQoIjsiKS5tYXAodz0+dy50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtwfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uRV0uam9pbigiOyAiKSl9fWxldCBhPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBwPUEuYXV0aC51c2VybmFtZXx8IiIsRT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO2kuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKHArIjoiK0UpKX1sZXQgYz1hQShBLmJhc2VVUkwsQS51cmwpO2Eub3BlbihBLm1ldGhvZC50b1VwcGVyQ2FzZSgpLGlBKGMsQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSwhMCksYS50aW1lb3V0PUEudGltZW91dDtmdW5jdGlvbiBJKCl7aWYoIWEpcmV0dXJuO2xldCBwPWsuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGEmJmEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHc9e2RhdGE6IW58fG49PT0idGV4dCJ8fG49PT0ianNvbiI/YS5yZXNwb25zZVRleHQ6YS5yZXNwb25zZSxzdGF0dXM6YS5zdGF0dXMsc3RhdHVzVGV4dDphLnN0YXR1c1RleHQsaGVhZGVyczpwLGNvbmZpZzpBLHJlcXVlc3Q6YX07dkEoZnVuY3Rpb24oTSl7dChNKSx1KCl9LGZ1bmN0aW9uKE0pe3IoTSksdSgpfSx3KSxhPW51bGx9aWYoIm9ubG9hZGVuZCJpbiBhP2Eub25sb2FkZW5kPUk6YS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshYXx8YS5yZWFkeVN0YXRlIT09NHx8YS5zdGF0dXM9PT0wJiYhKGEucmVzcG9uc2VVUkwmJmEucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KEkpfSxhLm9uYWJvcnQ9ZnVuY3Rpb24oKXthJiYocihuZXcgeSgiUmVxdWVzdCBhYm9ydGVkIix5LkVDT05OQUJPUlRFRCxBLGEpKSxhPW51bGwpfSxhLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyB5KCJOZXR3b3JrIEVycm9yIix5LkVSUl9ORVRXT1JLLEEsYSkpLGE9bnVsbH0sYS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgRT1BLnRpbWVvdXQ/InRpbWVvdXQgb2YgIitBLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsdz1BLnRyYW5zaXRpb25hbHx8aEE7QS50aW1lb3V0RXJyb3JNZXNzYWdlJiYoRT1BLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IHkoRSx3LmNsYXJpZnlUaW1lb3V0RXJyb3I/eS5FVElNRURPVVQ6eS5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsfSxSLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKGcmJmwuaXNGdW5jdGlvbihnKSYmKGc9ZyhBKSksZ3x8ZyE9PSExJiZhdChjKSkpe2xldCBwPUEueHNyZkhlYWRlck5hbWUmJkEueHNyZkNvb2tpZU5hbWUmJnN0LnJlYWQoQS54c3JmQ29va2llTmFtZSk7cCYmaS5zZXQoQS54c3JmSGVhZGVyTmFtZSxwKX1vPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGEmJmwuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKEUsdyl7YS5zZXRSZXF1ZXN0SGVhZGVyKHcsRSl9KSxsLmlzVW5kZWZpbmVkKEEud2l0aENyZWRlbnRpYWxzKXx8KGEud2l0aENyZWRlbnRpYWxzPSEhQS53aXRoQ3JlZGVudGlhbHMpLG4mJm4hPT0ianNvbiImJihhLnJlc3BvbnNlVHlwZT1BLnJlc3BvbnNlVHlwZSksdHlwZW9mIEEub25Eb3dubG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixndChBLm9uRG93bmxvYWRQcm9ncmVzcywhMCkpLHR5cGVvZiBBLm9uVXBsb2FkUHJvZ3Jlc3M9PSJmdW5jdGlvbiImJmEudXBsb2FkJiZhLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZ3QoQS5vblVwbG9hZFByb2dyZXNzKSksKEEuY2FuY2VsVG9rZW58fEEuc2lnbmFsKSYmKGY9cD0+e2EmJihyKCFwfHxwLnR5cGU/bmV3IEwobnVsbCxBLGEpOnApLGEuYWJvcnQoKSxhPW51bGwpfSxBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnN1YnNjcmliZShmKSxBLnNpZ25hbCYmKEEuc2lnbmFsLmFib3J0ZWQ/ZigpOkEuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixmKSkpO2xldCBCPVZBKGMpO2lmKEImJlIucHJvdG9jb2xzLmluZGV4T2YoQik9PT0tMSl7cihuZXcgeSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitCKyI6Iix5LkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWEuc2VuZChvfHxudWxsKX0pfTt2YXIgWkE9e2h0dHA6bUEseGhyOmx0fTtsLmZvckVhY2goWkEsKEEsZSk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTplfSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOmV9KX19KTt2YXIgdXQ9QT0+YC0gJHtBfWAsQWk9QT0+bC5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLERBPXtnZXRBZGFwdGVyOkE9PntBPWwuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOmV9PUEsdCxyLG89e307Zm9yKGxldCBpPTA7aTxlO2krKyl7dD1BW2ldO2xldCBuO2lmKHI9dCwhQWkodCkmJihyPVpBWyhuPVN0cmluZyh0KSkudG9Mb3dlckNhc2UoKV0scj09PXZvaWQgMCkpdGhyb3cgbmV3IHkoYFVua25vd24gYWRhcHRlciAnJHtufSdgKTtpZihyKWJyZWFrO29bbnx8IiMiK2ldPXJ9aWYoIXIpe2xldCBpPU9iamVjdC5lbnRyaWVzKG8pLm1hcCgoW2csZl0pPT5gYWRhcHRlciAke2d9IGArKGY9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxuPWU/aS5sZW5ndGg+MT9gc2luY2UgOgpgK2kubWFwKHV0KS5qb2luKGAKYCk6IiAiK3V0KGlbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHkoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIituLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gcn0sYWRhcHRlcnM6WkF9O2Z1bmN0aW9uIFhBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBMKG51bGwsQSl9ZnVuY3Rpb24gYkEoQSl7cmV0dXJuIFhBKEEpLEEuaGVhZGVycz1rLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9bkEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLERBLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxqLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24ocil7cmV0dXJuIFhBKEEpLHIuZGF0YT1uQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyKSxyLmhlYWRlcnM9ay5mcm9tKHIuaGVhZGVycykscn0sZnVuY3Rpb24ocil7cmV0dXJuIHNBKHIpfHwoWEEoQSksciYmci5yZXNwb25zZSYmKHIucmVzcG9uc2UuZGF0YT1uQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxyLnJlc3BvbnNlKSxyLnJlc3BvbnNlLmhlYWRlcnM9ay5mcm9tKHIucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChyKX0pfXZhciBCdD1BPT5BIGluc3RhbmNlb2Ygaz97Li4uQX06QTtmdW5jdGlvbiBXKEEsZSl7ZT1lfHx7fTtsZXQgdD17fTtmdW5jdGlvbiByKHUscyxhKXtyZXR1cm4gbC5pc1BsYWluT2JqZWN0KHUpJiZsLmlzUGxhaW5PYmplY3Qocyk/bC5tZXJnZS5jYWxsKHtjYXNlbGVzczphfSx1LHMpOmwuaXNQbGFpbk9iamVjdChzKT9sLm1lcmdlKHt9LHMpOmwuaXNBcnJheShzKT9zLnNsaWNlKCk6c31mdW5jdGlvbiBvKHUscyxhKXtpZihsLmlzVW5kZWZpbmVkKHMpKXtpZighbC5pc1VuZGVmaW5lZCh1KSlyZXR1cm4gcih2b2lkIDAsdSxhKX1lbHNlIHJldHVybiByKHUscyxhKX1mdW5jdGlvbiBpKHUscyl7aWYoIWwuaXNVbmRlZmluZWQocykpcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIG4odSxzKXtpZihsLmlzVW5kZWZpbmVkKHMpKXtpZighbC5pc1VuZGVmaW5lZCh1KSlyZXR1cm4gcih2b2lkIDAsdSl9ZWxzZSByZXR1cm4gcih2b2lkIDAscyl9ZnVuY3Rpb24gZyh1LHMsYSl7aWYoYSBpbiBlKXJldHVybiByKHUscyk7aWYoYSBpbiBBKXJldHVybiByKHZvaWQgMCx1KX1sZXQgZj17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6bix0cmFuc2Zvcm1SZXF1ZXN0Om4sdHJhbnNmb3JtUmVzcG9uc2U6bixwYXJhbXNTZXJpYWxpemVyOm4sdGltZW91dDpuLHRpbWVvdXRNZXNzYWdlOm4sd2l0aENyZWRlbnRpYWxzOm4sd2l0aFhTUkZUb2tlbjpuLGFkYXB0ZXI6bixyZXNwb25zZVR5cGU6bix4c3JmQ29va2llTmFtZTpuLHhzcmZIZWFkZXJOYW1lOm4sb25VcGxvYWRQcm9ncmVzczpuLG9uRG93bmxvYWRQcm9ncmVzczpuLGRlY29tcHJlc3M6bixtYXhDb250ZW50TGVuZ3RoOm4sbWF4Qm9keUxlbmd0aDpuLGJlZm9yZVJlZGlyZWN0Om4sdHJhbnNwb3J0Om4saHR0cEFnZW50Om4saHR0cHNBZ2VudDpuLGNhbmNlbFRva2VuOm4sc29ja2V0UGF0aDpuLHJlc3BvbnNlRW5jb2Rpbmc6bix2YWxpZGF0ZVN0YXR1czpnLGhlYWRlcnM6KHUscyk9Pm8oQnQodSksQnQocyksITApfTtyZXR1cm4gbC5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSxlKSksZnVuY3Rpb24ocyl7bGV0IGE9ZltzXXx8byxjPWEoQVtzXSxlW3NdLHMpO2wuaXNVbmRlZmluZWQoYykmJmEhPT1nfHwodFtzXT1jKX0pLHR9dmFyIFJBPSIxLjYuOCI7dmFyICRBPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+eyRBW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBDdD17fTskQS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG8oaSxuKXtyZXR1cm4iW0F4aW9zIHYiK1JBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbisocj8iLiAiK3I6IiIpfXJldHVybihpLG4sZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IHkobyhuLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSx5LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIUN0W25dJiYoQ3Rbbl09ITAsY29uc29sZS53YXJuKG8obiwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UoaSxuLGcpOiEwfX07ZnVuY3Rpb24gZWkoQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgeSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIseS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbz1yLmxlbmd0aDtmb3IoO28tLSA+MDspe2xldCBpPXJbb10sbj1lW2ldO2lmKG4pe2xldCBnPUFbaV0sZj1nPT09dm9pZCAwfHxuKGcsaSxBKTtpZihmIT09ITApdGhyb3cgbmV3IHkoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrZix5LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IHkoIlVua25vd24gb3B0aW9uICIraSx5LkVSUl9CQURfT1BUSU9OKX19dmFyIGtBPXthc3NlcnRPcHRpb25zOmVpLHZhbGlkYXRvcnM6JEF9O3ZhciB4PWtBLnZhbGlkYXRvcnMsXz1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IEhBLHJlc3BvbnNlOm5ldyBIQX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG87RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobz17fSk6bz1uZXcgRXJyb3I7bGV0IGk9by5zdGFjaz9vLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7ci5zdGFjaz9pJiYhU3RyaW5nKHIuc3RhY2spLmVuZHNXaXRoKGkucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYoci5zdGFjays9YApgK2kpOnIuc3RhY2s9aX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9Vyh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm8saGVhZGVyczppfT10O3IhPT12b2lkIDAmJmtBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6eC50cmFuc2l0aW9uYWwoeC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzp4LnRyYW5zaXRpb25hbCh4LmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6eC50cmFuc2l0aW9uYWwoeC5ib29sZWFuKX0sITEpLG8hPW51bGwmJihsLmlzRnVuY3Rpb24obyk/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6b306a0EuYXNzZXJ0T3B0aW9ucyhvLHtlbmNvZGU6eC5mdW5jdGlvbixzZXJpYWxpemU6eC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgbj1pJiZsLm1lcmdlKGkuY29tbW9uLGlbdC5tZXRob2RdKTtpJiZsLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQj0+e2RlbGV0ZSBpW0JdfSksdC5oZWFkZXJzPWsuY29uY2F0KG4saSk7bGV0IGc9W10sZj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24ocCl7dHlwZW9mIHAucnVuV2hlbj09ImZ1bmN0aW9uIiYmcC5ydW5XaGVuKHQpPT09ITF8fChmPWYmJnAuc3luY2hyb25vdXMsZy51bnNoaWZ0KHAuZnVsZmlsbGVkLHAucmVqZWN0ZWQpKX0pO2xldCB1PVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24ocCl7dS5wdXNoKHAuZnVsZmlsbGVkLHAucmVqZWN0ZWQpfSk7bGV0IHMsYT0wLGM7aWYoIWYpe2xldCBCPVtiQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEIudW5zaGlmdC5hcHBseShCLGcpLEIucHVzaC5hcHBseShCLHUpLGM9Qi5sZW5ndGgscz1Qcm9taXNlLnJlc29sdmUodCk7YTxjOylzPXMudGhlbihCW2ErK10sQlthKytdKTtyZXR1cm4gc31jPWcubGVuZ3RoO2xldCBJPXQ7Zm9yKGE9MDthPGM7KXtsZXQgQj1nW2ErK10scD1nW2ErK107dHJ5e0k9QihJKX1jYXRjaChFKXtwLmNhbGwodGhpcyxFKTticmVha319dHJ5e3M9YkEuY2FsbCh0aGlzLEkpfWNhdGNoKEIpe3JldHVybiBQcm9taXNlLnJlamVjdChCKX1mb3IoYT0wLGM9dS5sZW5ndGg7YTxjOylzPXMudGhlbih1W2ErK10sdVthKytdKTtyZXR1cm4gc31nZXRVcmkoZSl7ZT1XKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9YUEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gaUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07bC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtfLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoVyhyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7bC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24oaSxuLGcpe3JldHVybiB0aGlzLnJlcXVlc3QoVyhnfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDppLGRhdGE6bn0pKX19Xy5wcm90b3R5cGVbZV09dCgpLF8ucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBJQT1fO3ZhciBBZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24oaSl7dD1pfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihvPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IGk9ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO2ktLSA+MDspci5fbGlzdGVuZXJzW2ldKG8pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bz0+e2xldCBpLG49bmV3IFByb21pc2UoZz0+e3Iuc3Vic2NyaWJlKGcpLGk9Z30pLnRoZW4obyk7cmV0dXJuIG4uY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShpKX0sbn0sZShmdW5jdGlvbihpLG4sZyl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgTChpLG4sZyksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obyl7ZT1vfSksY2FuY2VsOmV9fX0sY3Q9QWU7ZnVuY3Rpb24gZWUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIHRlKEEpe3JldHVybiBsLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciByZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMocmUpLmZvckVhY2goKFtBLGVdKT0+e3JlW2VdPUF9KTt2YXIgZnQ9cmU7ZnVuY3Rpb24gcHQoQSl7bGV0IGU9bmV3IElBKEEpLHQ9ZUEoSUEucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIGwuZXh0ZW5kKHQsSUEucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxsLmV4dGVuZCh0LGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKG8pe3JldHVybiBwdChXKEEsbykpfSx0fXZhciBEPXB0KGopO0QuQXhpb3M9SUE7RC5DYW5jZWxlZEVycm9yPUw7RC5DYW5jZWxUb2tlbj1jdDtELmlzQ2FuY2VsPXNBO0QuVkVSU0lPTj1SQTtELnRvRm9ybURhdGE9RztELkF4aW9zRXJyb3I9eTtELkNhbmNlbD1ELkNhbmNlbGVkRXJyb3I7RC5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTtELnNwcmVhZD1lZTtELmlzQXhpb3NFcnJvcj10ZTtELm1lcmdlQ29uZmlnPVc7RC5BeGlvc0hlYWRlcnM9aztELmZvcm1Ub0pTT049QT0+eUEobC5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtELmdldEFkYXB0ZXI9REEuZ2V0QWRhcHRlcjtELkh0dHBTdGF0dXNDb2RlPWZ0O0QuZGVmYXVsdD1EO3ZhciB6PUQ7dmFye0F4aW9zOktzLEF4aW9zRXJyb3I6anMsQ2FuY2VsZWRFcnJvcjp2cyxpc0NhbmNlbDpfcyxDYW5jZWxUb2tlbjp6cyxWRVJTSU9OOlZzLGFsbDpacyxDYW5jZWw6WHMsaXNBeGlvc0Vycm9yOiRzLHNwcmVhZDpBYSx0b0Zvcm1EYXRhOmVhLEF4aW9zSGVhZGVyczp0YSxIdHRwU3RhdHVzQ29kZTpyYSxmb3JtVG9KU09OOmlhLGdldEFkYXB0ZXI6b2EsbWVyZ2VDb25maWc6bmF9PXo7YXN5bmMgZnVuY3Rpb24gdGkoQSxlKXtsZXQgdD1BLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBvPWF3YWl0IHouZ2V0KHQse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxpPVVSTC5jcmVhdGVPYmplY3RVUkwoby5kYXRhKTtyPW5ldyBXb3JrZXIoaSx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKHQse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgZ0E9dGk7ZnVuY3Rpb24gRXQoQSl7bGV0IGU9V0EoQSksdD1BO3JldHVybiB0LnRlcm1pbmF0ZWQ9ITEsdC53b3JrZXJQcm94eT1lLHQub3JpZ2luYWxUZXJtaW5hdGU9dC50ZXJtaW5hdGUsdC50ZXJtaW5hdGU9KCk9Pnt0LnRlcm1pbmF0ZWQ9ITAsdC53b3JrZXJQcm94eVtPQV0oKSx0Lm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjp0fX1hc3luYyBmdW5jdGlvbiByaShBLGUsdCl7bGV0IHI7aWYoQSE9bnVsbCl7bGV0IGk9QTtyZXR1cm4gaS53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1pLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjppfSk6RXQoQSl9bGV0IG89YXdhaXQgZ0EoZSx0KTtyZXR1cm4gRXQobyl9dmFyIFF0PXJpO2FzeW5jIGZ1bmN0aW9uIGlpKEEsZSx0KXtsZXQgcj0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3I9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3I9QTpyPXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbz1gJHtyfS53YXNtYCxuPShhd2FpdCB6LmdldChvLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIG10PWlpO3ZhciBkdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgd3Q9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsaHQ9bmV3IFRleHRFbmNvZGVyLHl0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBvaShBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksaT1BLmZzX3N0YXQoZSkuc2l6ZSxuPW51bGw7d3Q/bj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoaSk6bj1uZXcgQXJyYXlCdWZmZXIoaSk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkobik7cmV0dXJuIEEuZnNfcmVhZChyLGcsMCxpLDApLEEuZnNfY2xvc2UociksZ31mdW5jdGlvbiBEdChBLGUsdCl7bGV0IHI9bnVsbDt3dD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbz1uZXcgVWludDhBcnJheShyKSxpPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBvLnNldChpKSxvfWZ1bmN0aW9uIGIoQSxlLHQscil7bGV0IG89MDtyZXR1cm4gZSE9PW51bGwmJihvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxvKSksb31mdW5jdGlvbiBWKEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxvPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsaT1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsb10pO0Euc3RyaW5nVG9VVEY4KHIsaSxvKX1mdW5jdGlvbiBGKEEsZSx0LHIpe2xldCBvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLGk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbj1EdChBLG8saSk7cmV0dXJuIFAocixuLmJ1ZmZlcil9ZnVuY3Rpb24gaWUoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIG5pKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbih1LHMpe3N3aXRjaCh1LnR5cGUpe2Nhc2UgQy5UZXh0U3RyZWFtOntsZXQgYT1odC5lbmNvZGUodS5kYXRhLmRhdGEpLGM9YihBLGEscywwKSxJPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07VihBLEkscyk7YnJlYWt9Y2FzZSBDLkpzb25Db21wYXRpYmxlOntsZXQgYT1odC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodS5kYXRhKSksYz1iKEEsYSxzLDApLEk9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtWKEEsSSxzKTticmVha31jYXNlIEMuQmluYXJ5U3RyZWFtOntsZXQgYT11LmRhdGEuZGF0YSxjPWIoQSxhLHMsMCksST17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWB9O1YoQSxJLHMpO2JyZWFrfWNhc2UgQy5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUodS5kYXRhLnBhdGgsdS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgQy5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZSh1LmRhdGEucGF0aCx1LmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBDLkltYWdlOntsZXQgYT11LmRhdGEsYz1iKEEsYS5kYXRhLHMsMCksST1iKEEsYS5kaXJlY3Rpb24scywxKSxCPXR5cGVvZiBhLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGEubWV0YWRhdGEuZW50cmllcygpKTpbXSxwPXtpbWFnZVR5cGU6YS5pbWFnZVR5cGUsbmFtZTphLm5hbWUsb3JpZ2luOmEub3JpZ2luLHNwYWNpbmc6YS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxzaXplOmEuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLG1ldGFkYXRhOkJ9O1YoQSxwLHMpO2JyZWFrfWNhc2UgQy5NZXNoOntsZXQgYT11LmRhdGEsYz1iKEEsYS5wb2ludHMscywwKSxJPWIoQSxhLmNlbGxzLHMsMSksQj1iKEEsYS5wb2ludERhdGEscywyKSxwPWIoQSxhLmNlbGxEYXRhLHMsMyksRT17bWVzaFR5cGU6YS5tZXNoVHlwZSxuYW1lOmEubmFtZSxudW1iZXJPZlBvaW50czphLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZkNlbGxzOmEubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxjZWxsQnVmZmVyU2l6ZTphLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWB9O1YoQSxFLHMpO2JyZWFrfWNhc2UgQy5Qb2x5RGF0YTp7bGV0IGE9dS5kYXRhLGM9YihBLGEucG9pbnRzLHMsMCksST1iKEEsYS52ZXJ0aWNlcyxzLDEpLEI9YihBLGEubGluZXMscywyKSxwPWIoQSxhLnBvbHlnb25zLHMsMyksRT1iKEEsYS50cmlhbmdsZVN0cmlwcyxzLDQpLHc9YihBLGEucG9pbnREYXRhLHMsNSksTj1iKEEsYS5wb2ludERhdGEscyw2KSxNPXtwb2x5RGF0YVR5cGU6YS5wb2x5RGF0YVR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsdmVydGljZXNCdWZmZXJTaXplOmEudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7SX1gLGxpbmVzQnVmZmVyU2l6ZTphLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxwb2x5Z29uc0J1ZmZlclNpemU6YS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmEudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mUG9pbnRQaXhlbHM6YS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3d9YCxudW1iZXJPZkNlbGxQaXhlbHM6YS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtOfWB9O1YoQSxNLHMpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPUEuc3RhY2tTYXZlKCksaT0wO3RyeXtpPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaCh1KXt0aHJvdyB0eXBlb2YgdT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZSh1KSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSx1fWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobyl9bGV0IG49QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmaT09PTAmJnQuZm9yRWFjaChmdW5jdGlvbih1LHMpe2xldCBhPW51bGw7c3dpdGNoKHUudHlwZSl7Y2FzZSBDLlRleHRTdHJlYW06e2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSkscD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSxCKTthPXtkYXRhOnl0LmRlY29kZShwKX07YnJlYWt9Y2FzZSBDLkpzb25Db21wYXRpYmxlOntsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHA9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksQik7YT1KU09OLnBhcnNlKHl0LmRlY29kZShwKSk7YnJlYWt9Y2FzZSBDLkJpbmFyeVN0cmVhbTp7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKTthPXtkYXRhOkR0KEEsSSxCKX07YnJlYWt9Y2FzZSBDLlRleHRGaWxlOnthPXtwYXRoOnUuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZSh1LmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgQy5CaW5hcnlGaWxlOnthPXtwYXRoOnUuZGF0YS5wYXRoLGRhdGE6b2koQSx1LmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgQy5JbWFnZTp7bGV0IEk9aWUoQSxzKTtJLmRhdGE9RihBLHMsMCxJLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxJLmRpcmVjdGlvbj1GKEEscywxLEguRmxvYXQ2NCksSS5tZXRhZGF0YT1uZXcgTWFwKEkubWV0YWRhdGEpLGE9STticmVha31jYXNlIEMuTWVzaDp7bGV0IEk9aWUoQSxzKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9RihBLHMsMCxJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6SS5wb2ludHM9UChJLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZDZWxscz4wP0kuY2VsbHM9RihBLHMsMSxJLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpJLmNlbGxzPVAoSS5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZQb2ludFBpeGVscz4wP0kucG9pbnREYXRhPUYoQSxzLDIsSS5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6SS5wb2ludERhdGE9UChJLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxQaXhlbHM+MD9JLmNlbGxEYXRhPUYoQSxzLDMsSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpJLmNlbGxEYXRhPVAoSS5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksYT1JO2JyZWFrfWNhc2UgQy5Qb2x5RGF0YTp7bGV0IEk9aWUoQSxzKTtJLm51bWJlck9mUG9pbnRzPjA/SS5wb2ludHM9RihBLHMsMCxILkZsb2F0MzIpOkkucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksSS52ZXJ0aWNlc0J1ZmZlclNpemU+MD9JLnZlcnRpY2VzPUYoQSxzLDEsUy5VSW50MzIpOkkudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEkubGluZXNCdWZmZXJTaXplPjA/SS5saW5lcz1GKEEscywyLFMuVUludDMyKTpJLmxpbmVzPW5ldyBVaW50MzJBcnJheSxJLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0kucG9seWdvbnM9RihBLHMsMyxTLlVJbnQzMik6SS5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksSS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9JLnRyaWFuZ2xlU3RyaXBzPUYoQSxzLDQsUy5VSW50MzIpOkkudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEkubnVtYmVyT2ZQb2ludFBpeGVscz4wP0kucG9pbnREYXRhPUYoQSxzLDUsSS5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkkucG9pbnREYXRhPVAoSS5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJLm51bWJlck9mQ2VsbFBpeGVscz4wP0kuY2VsbERhdGE9RihBLHMsNixJLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpJLmNlbGxEYXRhPVAoSS5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9STticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBjPXt0eXBlOnUudHlwZSxkYXRhOmF9O2YucHVzaChjKX0pLHtyZXR1cm5WYWx1ZTppLHN0ZG91dDpuLHN0ZGVycjpnLG91dHB1dHM6Zn19dmFyIGJ0PW5pO3ZhciBzaT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gYWkoQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbz1JaShBW3JdLGUpO28hPT1udWxsJiZ0LnB1c2gobyl9cmV0dXJuIHR9ZnVuY3Rpb24gSWkoQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxzaSYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIFJ0PWFpO2Z1bmN0aW9uIGdpKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBrdD1naTtmdW5jdGlvbiBsaShBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgU3Q9bGk7ZnVuY3Rpb24gdWkoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIEZ0PXVpO3ZhciBCaTtmdW5jdGlvbiBTQSgpe3JldHVybiBCaX12YXIgQ2k7ZnVuY3Rpb24gVXQoKXtyZXR1cm4gQ2l9dmFyIGNpO2Z1bmN0aW9uIEZBKCl7cmV0dXJuIGNpfXZhciBvZT1uZXcgTWFwO2Z1bmN0aW9uIGZpKCl7bGV0IEE9RkEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIE50KCl7bGV0IEE9U0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gVUEoKXtsZXQgQT1VdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIHBpKEEsZSx0KXtsZXQgcj1BLG89QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxvPXIuaHJlZiksb2UuaGFzKG8pKXJldHVybiBvZS5nZXQobyk7e2xldCBpPWF3YWl0IG10KEEsZT8udG9TdHJpbmcoKT8/TnQoKSx0Pz9VQSgpKTtyZXR1cm4gb2Uuc2V0KG8saSksaX19YXN5bmMgZnVuY3Rpb24gRWkoQSxlLHQscixvKXtpZighYXdhaXQgZHQoKSl7bGV0IEU9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KEUpLG5ldyBFcnJvcihFKX1sZXQgaT1vPy53ZWJXb3JrZXI/P251bGw7aWYoaT09PSExKXtsZXQgRT1hd2FpdCBwaShBLnRvU3RyaW5nKCksbz8ucGlwZWxpbmVCYXNlVXJsLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1VBKCkpO3JldHVybiBidChFLGUsdCxyKX1sZXQgbj1pLGc9bz8ucGlwZWxpbmVXb3JrZXJVcmw/P2ZpKCksZj10eXBlb2YgZyE9InN0cmluZyImJnR5cGVvZiBnPy5ocmVmPCJ1Ij9nLmhyZWY6Zyx7d29ya2VyUHJveHk6dSx3b3JrZXI6c309YXdhaXQgUXQobixmLG8/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P1VBKCkpO249cztsZXQgYT1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oRSl7aWYoRS50eXBlPT09Qy5CaW5hcnlTdHJlYW0pe2xldCB3PUUuZGF0YS5kYXRhO2EucHVzaCh3KX1lbHNlIGlmKEUudHlwZT09PUMuQmluYXJ5RmlsZSl7bGV0IHc9RS5kYXRhLmRhdGE7YS5wdXNoKHcpfWVsc2UgaWYoRS50eXBlPT09Qy5JbWFnZSl7bGV0IHc9RS5kYXRhO3cuZGF0YSE9PW51bGwmJmEucHVzaCguLi5rdCh3KSl9ZWxzZSBpZihFLnR5cGU9PT1DLk1lc2gpe2xldCB3PUUuZGF0YTthLnB1c2goLi4uU3QodykpfWVsc2UgaWYoRS50eXBlPT09Qy5Qb2x5RGF0YSl7bGV0IHc9RS5kYXRhO2EucHVzaCguLi5GdCh3KSl9fSk7bGV0IGM9bz8ucGlwZWxpbmVCYXNlVXJsPz9OdCgpLEk9dHlwZW9mIGMhPSJzdHJpbmciJiZ0eXBlb2YgYz8uaHJlZjwidSI/Yy5ocmVmOmMsQj1yIT1udWxsP1BBKHIsUnQoYSxvPy5ub0NvcHkpKTpudWxsLHA9YXdhaXQgdS5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksSSxlLHQsQixvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9VQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6cC5yZXR1cm5WYWx1ZSxzdGRvdXQ6cC5zdGRvdXQsc3RkZXJyOnAuc3RkZXJyLG91dHB1dHM6cC5vdXRwdXRzLHdlYldvcmtlcjpufX12YXIgbT1FaTt2YXIgUWk9bnVsbDtmdW5jdGlvbiBNdCgpe3JldHVybiBRaX12YXIgbWk9bmV3IE1hcChbXSksWj1taTt2YXIgZGk9IjEuMi4xIixPdD1kaTt2YXIgbmUsaGk9YGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vQGl0ay13YXNtL21lc2gtaW9AJHtPdH0vZGlzdC9waXBlbGluZXNgO2Z1bmN0aW9uIFhhKEEpe25lPUF9ZnVuY3Rpb24gZCgpe2lmKHR5cGVvZiBuZTwidSIpcmV0dXJuIG5lO2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOmhpfXZhciBzZSx5aT1udWxsO2Z1bmN0aW9uIFd0KEEpe3NlPUF9ZnVuY3Rpb24gUSgpe2lmKHR5cGVvZiBzZTwidSIpcmV0dXJuIHNlO2xldCBBPUZBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOnlpfXZhciBYPW51bGw7YXN5bmMgZnVuY3Rpb24gUHQoKXtsZXQgQT1RKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtYPWF3YWl0IGdBKGUpfWZ1bmN0aW9uIG9JKEEpe1g9QX1hc3luYyBmdW5jdGlvbiBoKCl7aWYoWCE9PW51bGwpcmV0dXJuIFgudGVybWluYXRlZCYmYXdhaXQgUHQoKSxYO2xldCBBPU10KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IFB0KCksWCl9YXN5bmMgZnVuY3Rpb24gd2koQSxlPXt9KXtsZXQgdD1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5NZXNofV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgRT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShFKX19bGV0IG89W3t0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCB1PSJ2dGstcG9seS1kYXRhLXJlYWQtbWVzaCIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6QlswXT8uZGF0YSxtZXNoOkJbMV0/LmRhdGF9fXZhciBhZT13aTthc3luYyBmdW5jdGlvbiBEaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpDLk1lc2gsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1lO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZpLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCB1PSJ2dGstcG9seS1kYXRhLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBJZT1EaTthc3luYyBmdW5jdGlvbiBiaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9Im9iai1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgZ2U9Ymk7YXN5bmMgZnVuY3Rpb24gUmkoQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9ZTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0ib2JqLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBsZT1SaTthc3luYyBmdW5jdGlvbiBraShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9InN0bC1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgdWU9a2k7YXN5bmMgZnVuY3Rpb24gU2koQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9ZTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0ic3RsLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBCZT1TaTthc3luYyBmdW5jdGlvbiBGaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9Im9mZi1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgQ2U9Rmk7YXN5bmMgZnVuY3Rpb24gVWkoQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9ZTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0ib2ZmLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBjZT1VaTthc3luYyBmdW5jdGlvbiBOaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9Indhc20tcmVhZC1tZXNoIixzPWU/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpjLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGksdCxvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYyE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkUmVhZDpCWzBdPy5kYXRhLG1lc2g6QlsxXT8uZGF0YX19dmFyIGZlPU5pO2FzeW5jIGZ1bmN0aW9uIE1pKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkMuTWVzaCxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPWU7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJmkucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHU9Indhc20td3JpdGUtbWVzaCIscz10Py53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOkJbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6QlsxXT8uZGF0YX19dmFyIHBlPU1pO2FzeW5jIGZ1bmN0aW9uIE9pKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuTWVzaH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoRSl9fWxldCBvPVt7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgdT0id2FzbS16c3RkLXJlYWQtbWVzaCIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6QlswXT8uZGF0YSxtZXNoOkJbMV0/LmRhdGF9fXZhciBFZT1PaTthc3luYyBmdW5jdGlvbiBXaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpDLk1lc2gsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1lO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZpLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCB1PSJ3YXNtLXpzdGQtd3JpdGUtbWVzaCIscz10Py53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOkJbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6QlsxXT8uZGF0YX19dmFyIFFlPVdpO2FzeW5jIGZ1bmN0aW9uIFBpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuTWVzaH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoRSl9fWxldCBvPVt7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgdT0ic3djLXJlYWQtbWVzaCIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6QlswXT8uZGF0YSxtZXNoOkJbMV0/LmRhdGF9fXZhciBtZT1QaTthc3luYyBmdW5jdGlvbiBHaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpDLk1lc2gsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1lO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZpLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCB1PSJzd2Mtd3JpdGUtbWVzaCIscz10Py53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOkJbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6QlsxXT8uZGF0YX19dmFyIGRlPUdpO2FzeW5jIGZ1bmN0aW9uIExpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuTWVzaH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoRSl9fWxldCBvPVt7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgdT0iYnl1LXJlYWQtbWVzaCIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6QlswXT8uZGF0YSxtZXNoOkJbMV0/LmRhdGF9fXZhciBoZT1MaTthc3luYyBmdW5jdGlvbiB4aShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpDLk1lc2gsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj1lO2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZpLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCB1PSJieXUtd3JpdGUtbWVzaCIscz10Py53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6YyxzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGMhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOkJbMF0/LmRhdGEsc2VyaWFsaXplZE1lc2g6QlsxXT8uZGF0YX19dmFyIHllPXhpO2FzeW5jIGZ1bmN0aW9uIFRpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuTWVzaH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoRSl9fWxldCBvPVt7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgdT0iZnJlZS1zdXJmZXItYXNjaWktcmVhZC1tZXNoIixzPWU/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpjLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGksdCxvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYyE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkUmVhZDpCWzBdPy5kYXRhLG1lc2g6QlsxXT8uZGF0YX19dmFyIHdlPVRpO2FzeW5jIGZ1bmN0aW9uIEppKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkMuTWVzaCxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPWU7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJmkucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHU9ImZyZWUtc3VyZmVyLWFzY2lpLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBEZT1KaTthc3luYyBmdW5jdGlvbiBIaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9ImZyZWUtc3VyZmVyLWJpbmFyeS1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgYmU9SGk7YXN5bmMgZnVuY3Rpb24gWWkoQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9ZTtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0iZnJlZS1zdXJmZXItYmluYXJ5LXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmMsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihjIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBSZT1ZaTt2YXIgcWk9bmV3IE1hcChbWyJ2dGsiLFthZSxJZV1dLFsib2JqIixbZ2UsbGVdXSxbInN0bCIsW3VlLEJlXV0sWyJvZmYiLFtDZSxjZV1dLFsid2FzbSIsW2ZlLHBlXV0sWyJ3YXNtLXpzdCIsW0VlLFFlXV0sWyJzd2MiLFttZSxkZV1dLFsiYnl1IixbaGUseWVdXSxbImZyZWUtc3VyZmVyLWFzY2lpIixbd2UsRGVdXSxbImZyZWUtc3VyZmVyLWJpbmFyeSIsW2JlLFJlXV1dKSwkPXFpO2FzeW5jIGZ1bmN0aW9uIEtpKEEsZT17fSl7bGV0IHQ9QS50eXBlPz8iIixyPUEubmFtZT8/QS5wYXRoPz8iZmlsZU5hbWUiLG89QUEocikudG9Mb3dlckNhc2UoKSxpPWU/LndlYldvcmtlcixuPUE7aWYoQSBpbnN0YW5jZW9mIEJsb2Ipe2xldCBJPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtuPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEkpfX1sZXQgZz1udWxsO2lmKHQmJlouaGFzKHQpKWc9Wi5nZXQodCk7ZWxzZSBpZihULmhhcyhvKSlnPVQuZ2V0KG8pO2Vsc2UgZm9yKGxldCBJIG9mICQudmFsdWVzKCkpaWYoSVswXSE9PW51bGwpe2xldHt3ZWJXb3JrZXI6Qixjb3VsZFJlYWQ6cCxtZXNoOkV9PWF3YWl0IElbMF0oe3BhdGg6bi5wYXRoLGRhdGE6bi5kYXRhLnNsaWNlKCl9LHtpbmZvcm1hdGlvbk9ubHk6ZS5pbmZvcm1hdGlvbk9ubHksd2ViV29ya2VyOmksbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGk9QixwKXJldHVybnt3ZWJXb3JrZXI6aSxtZXNoOkV9fWlmKCFnKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrcik7bGV0IHU9JC5nZXQoZylbMF0se3dlYldvcmtlcjpzLGNvdWxkUmVhZDphLG1lc2g6Y309YXdhaXQgdShuLHtpbmZvcm1hdGlvbk9ubHk6ZS5pbmZvcm1hdGlvbk9ubHksd2ViV29ya2VyOmksbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGk9cywhYSl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlYWQ6ICIrcik7cmV0dXJue3dlYldvcmtlcjppLG1lc2g6Y319dmFyIGppPUtpO2FzeW5jIGZ1bmN0aW9uIHZpKEEsZSx0PXt9KXtsZXQgcj1BLG89dC5taW1lVHlwZSxpPUFBKGUpLnRvTG93ZXJDYXNlKCksbj10LndlYldvcmtlcixnPW51bGw7aWYodHlwZW9mIG88InUiJiZaLmhhcyhvKSlnPVouZ2V0KG8pO2Vsc2UgaWYoVC5oYXMoaSkpZz1ULmdldChpKTtlbHNlIGZvcihsZXQgQiBvZiAkLnZhbHVlcygpKWlmKEJbMV0hPT1udWxsKXtsZXR7d2ViV29ya2VyOnAsY291bGRXcml0ZTpFLHNlcmlhbGl6ZWRNZXNoOnd9PWF3YWl0IEJbMV0ocixlLHQpO2lmKG49cCxFKXJldHVybnt3ZWJXb3JrZXI6bixzZXJpYWxpemVkTWVzaDp3fX1pZighZyl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSU8gZm9yOiAiK2UpO2xldCB1PSQuZ2V0KGcpWzFdLHt3ZWJXb3JrZXI6cyxjb3VsZFdyaXRlOmEsc2VyaWFsaXplZE1lc2g6Y309YXdhaXQgdShyLGUsdCk7aWYobj1zLCFhKXRocm93IEVycm9yKCJDb3VsZCBub3Qgd3JpdGU6ICIrZSk7cmV0dXJue3dlYldvcmtlcjpuLHNlcmlhbGl6ZWRNZXNoOmN9fXZhciBfaT12aTt2YXIgR3Q9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIHR0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgZXQ9KEEsSSk9Pntmb3IodmFyIHQgaW4gSSl0dChBLHQse2dldDpJW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHZBPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGd0PVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLHJ0PVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxtQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLCRBPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGl0PXtjYW5IYW5kbGU6QT0+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+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoSSxWQSkpLnRoZW4odGhpcy5faW5pdCk6SUE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20oS0ksImJhc2U2NCIpLFZBKS50aGVuKHRoaXMuX2luaXQpLElBKX1faW5pdChJKXtrPUkuaW5zdGFuY2UsVkEuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKEksdD0wKXtpZighayl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgZT1JLmJ5dGVMZW5ndGgsZz1rLmV4cG9ydHMubWFsbG9jKGUpO1hBLnNldChJLGcpLHQ9dHx8TnVtYmVyKGsuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKGcsZSkpO2xldCByPWsuZXhwb3J0cy5tYWxsb2ModCksaT1rLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKHIsdCxnLGUpLHM9WEEuc2xpY2UocixyK2kpO3JldHVybiBrLmV4cG9ydHMuZnJlZShnKSxrLmV4cG9ydHMuZnJlZShyKSxzfX0sS0k9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgT0k9bmV3IHlBLFRJPSExO2FzeW5jIGZ1bmN0aW9uIGNlKEEsSSx0KXtsZXQgZT1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9lPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9lPUE6ZT1gJHtJfS8ke0F9YCxlLmVuZHNXaXRoKCIuanMiKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC0zKSksZS5lbmRzV2l0aCgiLndhc20iKSYmKGU9ZS5zdWJzdHJpbmcoMCxlLmxlbmd0aC01KSk7bGV0IGc9YCR7ZX0ud2FzbWAscj1hd2FpdCBkQS5nZXQoYCR7Z30uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KTtUSXx8KGF3YWl0IE9JLmluaXQoKSxUST0hMCk7bGV0IHM9T0kuZGVjb2RlKG5ldyBVaW50OEFycmF5KHIuZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke2V9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6c30pfXZhciB4ST1jZTt2YXIgd0E9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBmZShBLEksdCl7bGV0IGU9QSxnPUEscj1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihlPW5ldyBVUkwoQS5ocmVmKSxnPWUuaHJlZiksd0EuaGFzKGcpP3I9YXdhaXQgd0EuZ2V0KGcpOih3QS5zZXQoZyx4SShlLEksdCkpLHI9YXdhaXQgd0EuZ2V0KGcpKSxyfXZhciBQST1mZTt2YXIgbGU9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxEPWxlO3ZhciBEZT17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LHA9RGU7dmFyIHVlPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSxQPXVlO2Z1bmN0aW9uIGhlKEEsSSl7bGV0IHQ9bnVsbDtzd2l0Y2goQSl7Y2FzZSBwLlVJbnQ4Ont0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ4Ont0PW5ldyBJbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQxNjp7dD1uZXcgVWludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDE2Ont0PW5ldyBJbnQxNkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50MzI6e3Q9bmV3IFVpbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQzMjp7dD1uZXcgSW50MzJBcnJheShJKTticmVha31jYXNlIHAuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdVaW50NjRBcnJheShJKTp0PW5ldyBVaW50OEFycmF5KEkpO2JyZWFrfWNhc2UgcC5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj90PW5ldyBCaWdJbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBQLkZsb2F0MzI6e3Q9bmV3IEZsb2F0MzJBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQ2NDp7dD1uZXcgRmxvYXQ2NEFycmF5KEkpO2JyZWFrfWNhc2UibnVsbCI6e3Q9bnVsbDticmVha31jYXNlIG51bGw6e3Q9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiB0fXZhciBZPWhlO3ZhciBaST10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixqST1uZXcgVGV4dEVuY29kZXIsV0k9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIGRlKEEsSSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sZT1BLmZzX29wZW4oSSx0LmZsYWdzKSxyPUEuZnNfc3RhdChJKS5zaXplLGk9bnVsbDtaST9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihyKTppPW5ldyBBcnJheUJ1ZmZlcihyKTtsZXQgcz1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKGUscywwLHIsMCksQS5mc19jbG9zZShlKSxzfWZ1bmN0aW9uIFZJKEEsSSx0KXtsZXQgZT1udWxsO1pJP2U9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOmU9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBnPW5ldyBVaW50OEFycmF5KGUpLHI9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksdCk7cmV0dXJuIGcuc2V0KHIpLGd9ZnVuY3Rpb24geShBLEksdCxlKXtsZXQgZz0wO3JldHVybiBJIT09bnVsbCYmKGc9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlLEkuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoSS5idWZmZXIpLGcpKSxnfWZ1bmN0aW9uIGooQSxJLHQpe2xldCBlPUpTT04uc3RyaW5naWZ5KEkpLGc9QS5sZW5ndGhCeXRlc1VURjgoZSkrMSxyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxnXSk7QS5zdHJpbmdUb1VURjgoZSxyLGcpfWZ1bmN0aW9uIEYoQSxJLHQsZSl7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsSSx0XSkscj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxpPVZJKEEsZyxyKTtyZXR1cm4gWShlLGkuYnVmZmVyKX1mdW5jdGlvbiB6QShBLEkpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsSV0pLGU9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2UoZSl9ZnVuY3Rpb24geWUoQSxJLHQsZSl7ZSE9bnVsbCYmZS5sZW5ndGg+MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7c3dpdGNoKFEudHlwZSl7Y2FzZSBELlRleHRTdHJlYW06e2xldCBvPWpJLmVuY29kZShRLmRhdGEuZGF0YSksZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBvPWpJLmVuY29kZShKU09OLnN0cmluZ2lmeShRLmRhdGEpKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBvPVEuZGF0YS5kYXRhLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShRLmRhdGEucGF0aCxRLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBvPVEuZGF0YSxmPXkoQSxvLmRhdGEsQywwKSxuPXkoQSxvLmRpcmVjdGlvbixDLDEpLEU9dHlwZW9mIG8ubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oby5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGM9e2ltYWdlVHlwZTpvLmltYWdlVHlwZSxuYW1lOm8ubmFtZSxvcmlnaW46by5vcmlnaW4sc3BhY2luZzpvLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLHNpemU6by5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07aihBLGMsQyk7YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8uY2VsbHMsQywxKSxFPXkoQSxvLnBvaW50RGF0YSxDLDIpLGM9eShBLG8uY2VsbERhdGEsQywzKSx1PXttZXNoVHlwZTpvLm1lc2hUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6by5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bn1gLGNlbGxCdWZmZXJTaXplOm8uY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YH07aihBLHUsQyk7YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbz1RLmRhdGEsZj15KEEsby5wb2ludHMsQywwKSxuPXkoQSxvLnZlcnRpY2VzLEMsMSksRT15KEEsby5saW5lcyxDLDIpLGM9eShBLG8ucG9seWdvbnMsQywzKSx1PXkoQSxvLnRyaWFuZ2xlU3RyaXBzLEMsNCksZD15KEEsby5wb2ludERhdGEsQyw1KSxSPXkoQSxvLnBvaW50RGF0YSxDLDYpLE49e3BvbHlEYXRhVHlwZTpvLnBvbHlEYXRhVHlwZSxuYW1lOm8ubmFtZSxudW1iZXJPZlBvaW50czpvLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6by52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsbGluZXNCdWZmZXJTaXplOm8ubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpvLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6by50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpvLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpvLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1J9YH07aihBLE4sQyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IGc9QS5zdGFja1NhdmUoKSxyPTA7dHJ5e3I9QS5jYWxsTWFpbihJLnNsaWNlKCkpfWNhdGNoKFEpe3Rocm93IHR5cGVvZiBRPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKFEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLFF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShnKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLHM9QS5nZXRNb2R1bGVTdGRlcnIoKSxhPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZyPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKFEsQyl7bGV0IG89bnVsbDtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289e2RhdGE6V0kuZGVjb2RlKGMpfTticmVha31jYXNlIEQuSnNvbkNvbXBhdGlibGU6e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksYz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbixFKTtvPUpTT04ucGFyc2UoV0kuZGVjb2RlKGMpKTticmVha31jYXNlIEQuQmluYXJ5U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pO289e2RhdGE6VkkoQSxuLEUpfTticmVha31jYXNlIEQuVGV4dEZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKFEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBELkJpbmFyeUZpbGU6e289e3BhdGg6US5kYXRhLnBhdGgsZGF0YTpkZShBLFEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBELkltYWdlOntsZXQgbj16QShBLEMpO24uZGF0YT1GKEEsQywwLG4uaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLG4uZGlyZWN0aW9uPUYoQSxDLDEsUC5GbG9hdDY0KSxuLm1ldGFkYXRhPW5ldyBNYXAobi5tZXRhZGF0YSksbz1uO2JyZWFrfWNhc2UgRC5NZXNoOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpuLnBvaW50cz1ZKG4ubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxzPjA/bi5jZWxscz1GKEEsQywxLG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOm4uY2VsbHM9WShuLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsMixuLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbFBpeGVscz4wP24uY2VsbERhdGE9RihBLEMsMyxuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9Y2FzZSBELlBvbHlEYXRhOntsZXQgbj16QShBLEMpO24ubnVtYmVyT2ZQb2ludHM+MD9uLnBvaW50cz1GKEEsQywwLFAuRmxvYXQzMik6bi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxuLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP24udmVydGljZXM9RihBLEMsMSxwLlVJbnQzMik6bi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksbi5saW5lc0J1ZmZlclNpemU+MD9uLmxpbmVzPUYoQSxDLDIscC5VSW50MzIpOm4ubGluZXM9bmV3IFVpbnQzMkFycmF5LG4ucG9seWdvbnNCdWZmZXJTaXplPjA/bi5wb2x5Z29ucz1GKEEsQywzLHAuVUludDMyKTpuLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxuLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP24udHJpYW5nbGVTdHJpcHM9RihBLEMsNCxwLlVJbnQzMik6bi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksbi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bi5wb2ludERhdGE9RihBLEMsNSxuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bi5wb2ludERhdGE9WShuLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQyw2LG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOm4uY2VsbERhdGE9WShuLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbz1uO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6US50eXBlLGRhdGE6b307YS5wdXNoKGYpfSkse3JldHVyblZhbHVlOnIsc3Rkb3V0Omksc3RkZXJyOnMsb3V0cHV0czphfX12YXIgWEk9eWU7dmFyIHdlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBtZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IHQ9W107Zm9yKGxldCBlPTA7ZTxBLmxlbmd0aDtlKyspe2xldCBnPXBlKEFbZV0sSSk7ZyE9PW51bGwmJnQucHVzaChnKX1yZXR1cm4gdH1mdW5jdGlvbiBwZShBLEkpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IHQ9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/dD1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJih0PUEpLHdlJiZ0IGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDpJP3Q6dC5zbGljZSgwKX12YXIgekk9bWU7ZnVuY3Rpb24gRmUoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIF9JPUZlO2Z1bmN0aW9uIFNlKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciB2ST1TZTtmdW5jdGlvbiBSZShBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgJEk9UmU7YXN5bmMgZnVuY3Rpb24gTmUoQSxJLHQsZSl7bGV0IGc9WEkoQSxJLHQsZSkscj1bXTtyZXR1cm4gZy5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oaSl7aWYoaS50eXBlPT09RC5CaW5hcnlTdHJlYW18fGkudHlwZT09PUQuQmluYXJ5RmlsZSl7bGV0IHM9aS5kYXRhO3IucHVzaChzKX1lbHNlIGlmKGkudHlwZT09PUQuSW1hZ2Upe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uX0kocykpfWVsc2UgaWYoaS50eXBlPT09RC5NZXNoKXtsZXQgcz1pLmRhdGE7ci5wdXNoKC4uLnZJKHMpKX1lbHNlIGlmKGkudHlwZT09PUQuUG9seURhdGEpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4uJEkocykpfX0pLEZBKGcsekkociwhMCkpfXZhciBBdD1OZTt2YXIgVWU9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsSSx0LGUsZyxyKXtsZXQgaT1hd2FpdCBQSShBLEkscik7cmV0dXJuIGF3YWl0IEF0KGksdCxlLGcpfX07b0EoVWUpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7V3QoR3QpO2V4cG9ydHtoZSBhcyBieXVSZWFkTWVzaCx5ZSBhcyBieXVXcml0ZU1lc2gsVCBhcyBleHRlbnNpb25Ub01lc2hJbyx3ZSBhcyBmcmVlU3VyZmVyQXNjaWlSZWFkTWVzaCxEZSBhcyBmcmVlU3VyZmVyQXNjaWlXcml0ZU1lc2gsYmUgYXMgZnJlZVN1cmZlckJpbmFyeVJlYWRNZXNoLFJlIGFzIGZyZWVTdXJmZXJCaW5hcnlXcml0ZU1lc2gsaCBhcyBnZXREZWZhdWx0V2ViV29ya2VyLFEgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsZCBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLGdlIGFzIG9ialJlYWRNZXNoLGxlIGFzIG9ialdyaXRlTWVzaCxDZSBhcyBvZmZSZWFkTWVzaCxjZSBhcyBvZmZXcml0ZU1lc2gsamkgYXMgcmVhZE1lc2gsb0kgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixXdCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxYYSBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLHVlIGFzIHN0bFJlYWRNZXNoLEJlIGFzIHN0bFdyaXRlTWVzaCxtZSBhcyBzd2NSZWFkTWVzaCxkZSBhcyBzd2NXcml0ZU1lc2gsYWUgYXMgdnRrUG9seURhdGFSZWFkTWVzaCxJZSBhcyB2dGtQb2x5RGF0YVdyaXRlTWVzaCxmZSBhcyB3YXNtUmVhZE1lc2gscGUgYXMgd2FzbVdyaXRlTWVzaCxFZSBhcyB3YXNtWnN0ZFJlYWRNZXNoLFFlIGFzIHdhc21ac3RkV3JpdGVNZXNoLF9pIGFzIHdyaXRlTWVzaH07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIHh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgVHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSl4dChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEp0PW5ldyBNYXAoW1sidnRrIiwidnRrIl0sWyJieXUiLCJieXUiXSxbImZzYSIsImZyZWUtc3VyZmVyLWFzY2lpIl0sWyJmc2IiLCJmcmVlLXN1cmZlci1iaW5hcnkiXSxbIm9iaiIsIm9iaiJdLFsib2ZmIiwib2ZmIl0sWyJzdGwiLCJzdGwiXSxbInN3YyIsInN3YyJdLFsiaXdtIiwid2FzbSJdLFsiaXdtLmNib3IiLCJ3YXNtIl0sWyJpd20uY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLFQ9SnQ7dmFyIEh0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUz1IdDt2YXIgWXQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LEg9WXQ7ZnVuY3Rpb24gcXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFMuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFMuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFMuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUy5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBTLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIEguRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgSC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFA9cXQ7ZnVuY3Rpb24gS3QoQSl7bGV0IGU9QS5zbGljZSgoQS5sYXN0SW5kZXhPZigiLiIpLTE+Pj4wKSsyKTtpZihlLnRvTG93ZXJDYXNlKCk9PT0iZ3oiKXtsZXQgdD1BLnNsaWNlKDAsLTMpLmxhc3RJbmRleE9mKCIuIik7ZT1BLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKGUudG9Mb3dlckNhc2UoKT09PSJjYm9yIil7bGV0IHQ9QS5zbGljZSgwLC01KS5sYXN0SW5kZXhPZigiLiIpO2U9QS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihlLnRvTG93ZXJDYXNlKCk9PT0ienN0Iil7bGV0IHQ9QS5zbGljZSgwLC0xMCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoZS50b0xvd2VyQ2FzZSgpPT09InppcCIpe2xldCB0PUEuc2xpY2UoMCwtNCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfXJldHVybiBlfXZhciBBQT1LdDt2YXIganQ9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm06IlRyYW5zZm9ybSIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0sQz1qdDt2YXIgU2U9U3ltYm9sKCJDb21saW5rLnByb3h5IiksdnQ9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksT0E9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLE5BPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSx1QT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksRmU9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsX3Q9e2NhbkhhbmRsZTpBPT5GZShBKSYmQVtTZV0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTplLHBvcnQyOnR9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gTmUoQSxlKSxbdCxbdF1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLFdBKEEpfX0senQ9e2NhbkhhbmRsZTpBPT5GZShBKSYmdUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgZTtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP2U9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTplPXtpc0Vycm9yOiExLHZhbHVlOkF9LFtlLFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LFVlPW5ldyBNYXAoW1sicHJveHkiLF90XSxbInRocm93Iix6dF1dKTtmdW5jdGlvbiBWdChBLGUpe2ZvcihsZXQgdCBvZiBBKWlmKGU9PT10fHx0PT09IioifHx0IGluc3RhbmNlb2YgUmVnRXhwJiZ0LnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTmUoQSxlPWdsb2JhbFRoaXMsdD1bIioiXSl7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8pe2lmKCFvfHwhby5kYXRhKXJldHVybjtpZighVnQodCxvLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7by5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm4scGF0aDpnfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxvLmRhdGEpLGM9KG8uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoSiksdTt0cnl7bGV0IHM9Zy5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsSSk9PmZbSV0sQSksYT1nLnJlZHVjZSgoZixJKT0+ZltJXSxBKTtzd2l0Y2gobil7Y2FzZSJHRVQiOnU9YTticmVhaztjYXNlIlNFVCI6c1tnLnNsaWNlKC0xKVswXV09SihvLmRhdGEudmFsdWUpLHU9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6dT1hLmFwcGx5KHMsYyk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgYSguLi5jKTt1PWVyKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpJfT1uZXcgTWVzc2FnZUNoYW5uZWw7TmUoQSxJKSx1PVBBKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOnU9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChzKXt1PXt2YWx1ZTpzLFt1QV06MH19UHJvbWlzZS5yZXNvbHZlKHUpLmNhdGNoKHM9Pih7dmFsdWU6cyxbdUFdOjB9KSkudGhlbihzPT57bGV0W2EsZl09ZkEocyk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sYSkse2lkOml9KSxmKSxuPT09IlJFTEVBU0UiJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxNZShlKSxOQSBpbiBBJiZ0eXBlb2YgQVtOQV09PSJmdW5jdGlvbiImJkFbTkFdKCkpfSkuY2F0Y2gocz0+e2xldFthLGZdPWZBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbdUFdOjB9KTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxhKSx7aWQ6aX0pLGYpfSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCl9ZnVuY3Rpb24gWnQoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gTWUoQSl7WnQoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBXQShBLGUpe3JldHVybiBNQShBLFtdLGUpfWZ1bmN0aW9uIGxBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBPZShBKXtyZXR1cm4gWShBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntNZShBKX0pfXZhciBCQT1uZXcgV2Vha01hcCxDQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgZT0oQkEuZ2V0KEEpfHwwKS0xO0JBLnNldChBLGUpLGU9PT0wJiZPZShBKX0pO2Z1bmN0aW9uIFh0KEEsZSl7bGV0IHQ9KEJBLmdldChlKXx8MCkrMTtCQS5zZXQoZSx0KSxDQSYmQ0EucmVnaXN0ZXIoQSxlLEEpfWZ1bmN0aW9uICR0KEEpe0NBJiZDQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIE1BKEEsZT1bXSx0PWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbz1uZXcgUHJveHkodCx7Z2V0KGksbil7aWYobEEociksbj09PU9BKXJldHVybigpPT57JHQobyksT2UoQSkscj0hMH07aWYobj09PSJ0aGVuIil7aWYoZS5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtsZXQgZz1ZKEEse3R5cGU6IkdFVCIscGF0aDplLm1hcChjPT5jLnRvU3RyaW5nKCkpfSkudGhlbihKKTtyZXR1cm4gZy50aGVuLmJpbmQoZyl9cmV0dXJuIE1BKEEsWy4uLmUsbl0pfSxzZXQoaSxuLGcpe2xBKHIpO2xldFtjLHVdPWZBKGcpO3JldHVybiBZKEEse3R5cGU6IlNFVCIscGF0aDpbLi4uZSxuXS5tYXAocz0+cy50b1N0cmluZygpKSx2YWx1ZTpjfSx1KS50aGVuKEopfSxhcHBseShpLG4sZyl7bEEocik7bGV0IGM9ZVtlLmxlbmd0aC0xXTtpZihjPT09dnQpcmV0dXJuIFkoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihKKTtpZihjPT09ImJpbmQiKXJldHVybiBNQShBLGUuc2xpY2UoMCwtMSkpO2xldFt1LHNdPWtlKGcpO3JldHVybiBZKEEse3R5cGU6IkFQUExZIixwYXRoOmUubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OnV9LHMpLnRoZW4oSil9LGNvbnN0cnVjdChpLG4pe2xBKHIpO2xldFtnLGNdPWtlKG4pO3JldHVybiBZKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDplLm1hcCh1PT51LnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpnfSxjKS50aGVuKEopfX0pO3JldHVybiBYdChvLEEpLG99ZnVuY3Rpb24gQXIoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24ga2UoQSl7bGV0IGU9QS5tYXAoZkEpO3JldHVybltlLm1hcCh0PT50WzBdKSxBcihlLm1hcCh0PT50WzFdKSldfXZhciBXZT1uZXcgV2Vha01hcDtmdW5jdGlvbiBQQShBLGUpe3JldHVybiBXZS5zZXQoQSxlKSxBfWZ1bmN0aW9uIGVyKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tTZV06ITB9KX1mdW5jdGlvbiBmQShBKXtmb3IobGV0W2UsdF1vZiBVZSlpZih0LmNhbkhhbmRsZShBKSl7bGV0W3Isb109dC5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOmUsdmFsdWU6cn0sb119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LFdlLmdldChBKXx8W11dfWZ1bmN0aW9uIEooQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gVWUuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBZKEEsZSx0KXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvPXRyKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG4peyFuLmRhdGF8fCFuLmRhdGEuaWR8fG4uZGF0YS5pZCE9PW98fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIobi5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpvfSxlKSx0KX0pfWZ1bmN0aW9uIHRyKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBlQShBLGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KGUsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOnJyfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjp4QX09T2JqZWN0LHBBPShBPT5lPT57bGV0IHQ9cnIuY2FsbChlKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLE89QT0+KEE9QS50b0xvd2VyQ2FzZSgpLGU9PnBBKGUpPT09QSksRUE9QT0+ZT0+dHlwZW9mIGU9PT1BLHtpc0FycmF5OnF9PUFycmF5LHRBPUVBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBpcihBKXtyZXR1cm4gQSE9PW51bGwmJiF0QShBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiF0QShBLmNvbnN0cnVjdG9yKSYmVShBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgeGU9TygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBvcihBKXtsZXQgZTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P2U9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOmU9QSYmQS5idWZmZXImJnhlKEEuYnVmZmVyKSxlfXZhciBucj1FQSgic3RyaW5nIiksVT1FQSgiZnVuY3Rpb24iKSxUZT1FQSgibnVtYmVyIiksUUE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0Iixzcj1BPT5BPT09ITB8fEE9PT0hMSxjQT1BPT57aWYocEEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgZT14QShBKTtyZXR1cm4oZT09PW51bGx8fGU9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxhcj1PKCJEYXRlIiksSXI9TygiRmlsZSIpLGdyPU8oIkJsb2IiKSxscj1PKCJGaWxlTGlzdCIpLHVyPUE9PlFBKEEpJiZVKEEucGlwZSksQnI9QT0+e2xldCBlO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFUoQS5hcHBlbmQpJiYoKGU9cEEoQSkpPT09ImZvcm1kYXRhInx8ZT09PSJvYmplY3QiJiZVKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LENyPU8oIlVSTFNlYXJjaFBhcmFtcyIpLGZyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiByQShBLGUse2FsbE93bktleXM6dD0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCByLG87aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLHEoQSkpZm9yKHI9MCxvPUEubGVuZ3RoO3I8bztyKyspZS5jYWxsKG51bGwsQVtyXSxyLEEpO2Vsc2V7bGV0IGk9dD9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxuPWkubGVuZ3RoLGc7Zm9yKHI9MDtyPG47cisrKWc9aVtyXSxlLmNhbGwobnVsbCxBW2ddLGcsQSl9fWZ1bmN0aW9uIEplKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHQ9T2JqZWN0LmtleXMoQSkscj10Lmxlbmd0aCxvO2Zvcig7ci0tID4wOylpZihvPXRbcl0sZT09PW8udG9Mb3dlckNhc2UoKSlyZXR1cm4gbztyZXR1cm4gbnVsbH12YXIgSGU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxZZT1BPT4hdEEoQSkmJkEhPT1IZTtmdW5jdGlvbiBMQSgpe2xldHtjYXNlbGVzczpBfT1ZZSh0aGlzKSYmdGhpc3x8e30sZT17fSx0PShyLG8pPT57bGV0IGk9QSYmSmUoZSxvKXx8bztjQShlW2ldKSYmY0Eocik/ZVtpXT1MQShlW2ldLHIpOmNBKHIpP2VbaV09TEEoe30scik6cShyKT9lW2ldPXIuc2xpY2UoKTplW2ldPXJ9O2ZvcihsZXQgcj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWFyZ3VtZW50c1tyXSYmckEoYXJndW1lbnRzW3JdLHQpO3JldHVybiBlfXZhciBjcj0oQSxlLHQse2FsbE93bktleXM6cn09e30pPT4ockEoZSwobyxpKT0+e3QmJlUobyk/QVtpXT1lQShvLHQpOkFbaV09b30se2FsbE93bktleXM6cn0pLEEpLHByPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksRXI9KEEsZSx0LHIpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSxyKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOmUucHJvdG90eXBlfSksdCYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSx0KX0sUXI9KEEsZSx0LHIpPT57bGV0IG8saSxuLGc9e307aWYoZT1lfHx7fSxBPT1udWxsKXJldHVybiBlO2Rve2ZvcihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLGk9by5sZW5ndGg7aS0tID4wOyluPW9baV0sKCFyfHxyKG4sQSxlKSkmJiFnW25dJiYoZVtuXT1BW25dLGdbbl09ITApO0E9dCE9PSExJiZ4QShBKX13aGlsZShBJiYoIXR8fHQoQSxlKSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gZX0sbXI9KEEsZSx0KT0+e0E9U3RyaW5nKEEpLCh0PT09dm9pZCAwfHx0PkEubGVuZ3RoKSYmKHQ9QS5sZW5ndGgpLHQtPWUubGVuZ3RoO2xldCByPUEuaW5kZXhPZihlLHQpO3JldHVybiByIT09LTEmJnI9PT10fSxkcj1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYocShBKSlyZXR1cm4gQTtsZXQgZT1BLmxlbmd0aDtpZighVGUoZSkpcmV0dXJuIG51bGw7bGV0IHQ9bmV3IEFycmF5KGUpO2Zvcig7ZS0tID4wOyl0W2VdPUFbZV07cmV0dXJuIHR9LGhyPShBPT5lPT5BJiZlIGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZ4QShVaW50OEFycmF5KSkseXI9KEEsZSk9PntsZXQgcj0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLG87Zm9yKDsobz1yLm5leHQoKSkmJiFvLmRvbmU7KXtsZXQgaT1vLnZhbHVlO2UuY2FsbChBLGlbMF0saVsxXSl9fSx3cj0oQSxlKT0+e2xldCB0LHI9W107Zm9yKDsodD1BLmV4ZWMoZSkpIT09bnVsbDspci5wdXNoKHQpO3JldHVybiByfSxEcj1PKCJIVE1MRm9ybUVsZW1lbnQiKSxicj1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbih0LHIsbyl7cmV0dXJuIHIudG9VcHBlckNhc2UoKStvfSksR2U9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4oZSx0KT0+QS5jYWxsKGUsdCkpKE9iamVjdC5wcm90b3R5cGUpLFJyPU8oIlJlZ0V4cCIpLHFlPShBLGUpPT57bGV0IHQ9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSkscj17fTtyQSh0LChvLGkpPT57bGV0IG47KG49ZShvLGksQSkpIT09ITEmJihyW2ldPW58fG8pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxyKX0sa3I9QT0+e3FlKEEsKGUsdCk9PntpZihVKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgcj1BW3RdO2lmKFUocikpe2lmKGUuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gZSl7ZS53cml0YWJsZT0hMTtyZXR1cm59ZS5zZXR8fChlLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIit0KyInIil9KX19KX0sU3I9KEEsZSk9PntsZXQgdD17fSxyPW89PntvLmZvckVhY2goaT0+e3RbaV09ITB9KX07cmV0dXJuIHEoQSk/cihBKTpyKFN0cmluZyhBKS5zcGxpdChlKSksdH0sRnI9KCk9Pnt9LFVyPShBLGUpPT4oQT0rQSxOdW1iZXIuaXNGaW5pdGUoQSk/QTplKSxHQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLExlPSIwMTIzNDU2Nzg5IixLZT17RElHSVQ6TGUsQUxQSEE6R0EsQUxQSEFfRElHSVQ6R0ErR0EudG9VcHBlckNhc2UoKStMZX0sTnI9KEE9MTYsZT1LZS5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBNcihBKXtyZXR1cm4hIShBJiZVKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgT3I9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixvKT0+e2lmKFFBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtvXT1yO2xldCBpPXEocik/W106e307cmV0dXJuIHJBKHIsKG4sZyk9PntsZXQgYz10KG4sbysxKTshdEEoYykmJihpW2ddPWMpfSksZVtvXT12b2lkIDAsaX19cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LFdyPU8oIkFzeW5jRnVuY3Rpb24iKSxQcj1BPT5BJiYoUUEoQSl8fFUoQSkpJiZVKEEudGhlbikmJlUoQS5jYXRjaCksbD17aXNBcnJheTpxLGlzQXJyYXlCdWZmZXI6eGUsaXNCdWZmZXI6aXIsaXNGb3JtRGF0YTpCcixpc0FycmF5QnVmZmVyVmlldzpvcixpc1N0cmluZzpucixpc051bWJlcjpUZSxpc0Jvb2xlYW46c3IsaXNPYmplY3Q6UUEsaXNQbGFpbk9iamVjdDpjQSxpc1VuZGVmaW5lZDp0QSxpc0RhdGU6YXIsaXNGaWxlOklyLGlzQmxvYjpncixpc1JlZ0V4cDpScixpc0Z1bmN0aW9uOlUsaXNTdHJlYW06dXIsaXNVUkxTZWFyY2hQYXJhbXM6Q3IsaXNUeXBlZEFycmF5OmhyLGlzRmlsZUxpc3Q6bHIsZm9yRWFjaDpyQSxtZXJnZTpMQSxleHRlbmQ6Y3IsdHJpbTpmcixzdHJpcEJPTTpwcixpbmhlcml0czpFcix0b0ZsYXRPYmplY3Q6UXIsa2luZE9mOnBBLGtpbmRPZlRlc3Q6TyxlbmRzV2l0aDptcix0b0FycmF5OmRyLGZvckVhY2hFbnRyeTp5cixtYXRjaEFsbDp3cixpc0hUTUxGb3JtOkRyLGhhc093blByb3BlcnR5OkdlLGhhc093blByb3A6R2UscmVkdWNlRGVzY3JpcHRvcnM6cWUsZnJlZXplTWV0aG9kczprcix0b09iamVjdFNldDpTcix0b0NhbWVsQ2FzZTpicixub29wOkZyLHRvRmluaXRlTnVtYmVyOlVyLGZpbmRLZXk6SmUsZ2xvYmFsOkhlLGlzQ29udGV4dERlZmluZWQ6WWUsQUxQSEFCRVQ6S2UsZ2VuZXJhdGVTdHJpbmc6TnIsaXNTcGVjQ29tcGxpYW50Rm9ybTpNcix0b0pTT05PYmplY3Q6T3IsaXNBc3luY0ZuOldyLGlzVGhlbmFibGU6UHJ9O2Z1bmN0aW9uIEsoQSxlLHQscixvKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksdCYmKHRoaXMuY29uZmlnPXQpLHImJih0aGlzLnJlcXVlc3Q9ciksbyYmKHRoaXMucmVzcG9uc2U9byl9bC5pbmhlcml0cyhLLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6bC50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgamU9Sy5wcm90b3R5cGUsdmU9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57dmVbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSyx2ZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGplLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO0suZnJvbT0oQSxlLHQscixvLGkpPT57bGV0IG49T2JqZWN0LmNyZWF0ZShqZSk7cmV0dXJuIGwudG9GbGF0T2JqZWN0KEEsbixmdW5jdGlvbihjKXtyZXR1cm4gYyE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxLLmNhbGwobixBLm1lc3NhZ2UsZSx0LHIsbyksbi5jYXVzZT1BLG4ubmFtZT1BLm5hbWUsaSYmT2JqZWN0LmFzc2lnbihuLGkpLG59O3ZhciB5PUs7dmFyIG1BPW51bGw7ZnVuY3Rpb24gVEEoQSl7cmV0dXJuIGwuaXNQbGFpbk9iamVjdChBKXx8bC5pc0FycmF5KEEpfWZ1bmN0aW9uIHplKEEpe3JldHVybiBsLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIF9lKEEsZSx0KXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obyxpKXtyZXR1cm4gbz16ZShvKSwhdCYmaT8iWyIrbysiXSI6b30pLmpvaW4odD8iLiI6IiIpOmV9ZnVuY3Rpb24gR3IoQSl7cmV0dXJuIGwuaXNBcnJheShBKSYmIUEuc29tZShUQSl9dmFyIExyPWwudG9GbGF0T2JqZWN0KGwse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiB4cihBLGUsdCl7aWYoIWwuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcobUF8fEZvcm1EYXRhKSx0PWwudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihwLEUpe3JldHVybiFsLmlzVW5kZWZpbmVkKEVbcF0pfSk7bGV0IHI9dC5tZXRhVG9rZW5zLG89dC52aXNpdG9yfHxzLGk9dC5kb3RzLG49dC5pbmRleGVzLGM9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmbC5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFsLmlzRnVuY3Rpb24obykpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiB1KEIpe2lmKEI9PT1udWxsKXJldHVybiIiO2lmKGwuaXNEYXRlKEIpKXJldHVybiBCLnRvSVNPU3RyaW5nKCk7aWYoIWMmJmwuaXNCbG9iKEIpKXRocm93IG5ldyB5KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBsLmlzQXJyYXlCdWZmZXIoQil8fGwuaXNUeXBlZEFycmF5KEIpP2MmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtCXSk6QnVmZmVyLmZyb20oQik6Qn1mdW5jdGlvbiBzKEIscCxFKXtsZXQgdz1CO2lmKEImJiFFJiZ0eXBlb2YgQj09Im9iamVjdCIpe2lmKGwuZW5kc1dpdGgocCwie30iKSlwPXI/cDpwLnNsaWNlKDAsLTIpLEI9SlNPTi5zdHJpbmdpZnkoQik7ZWxzZSBpZihsLmlzQXJyYXkoQikmJkdyKEIpfHwobC5pc0ZpbGVMaXN0KEIpfHxsLmVuZHNXaXRoKHAsIltdIikpJiYodz1sLnRvQXJyYXkoQikpKXJldHVybiBwPXplKHApLHcuZm9yRWFjaChmdW5jdGlvbihNLEx0KXshKGwuaXNVbmRlZmluZWQoTSl8fE09PT1udWxsKSYmZS5hcHBlbmQobj09PSEwP19lKFtwXSxMdCxpKTpuPT09bnVsbD9wOnArIltdIix1KE0pKX0pLCExfXJldHVybiBUQShCKT8hMDooZS5hcHBlbmQoX2UoRSxwLGkpLHUoQikpLCExKX1sZXQgYT1bXSxmPU9iamVjdC5hc3NpZ24oTHIse2RlZmF1bHRWaXNpdG9yOnMsY29udmVydFZhbHVlOnUsaXNWaXNpdGFibGU6VEF9KTtmdW5jdGlvbiBJKEIscCl7aWYoIWwuaXNVbmRlZmluZWQoQikpe2lmKGEuaW5kZXhPZihCKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitwLmpvaW4oIi4iKSk7YS5wdXNoKEIpLGwuZm9yRWFjaChCLGZ1bmN0aW9uKHcsTil7KCEobC5pc1VuZGVmaW5lZCh3KXx8dz09PW51bGwpJiZvLmNhbGwoZSx3LGwuaXNTdHJpbmcoTik/Ti50cmltKCk6TixwLGYpKT09PSEwJiZJKHcscD9wLmNvbmNhdChOKTpbTl0pfSksYS5wb3AoKX19aWYoIWwuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBJKEEpLGV9dmFyIEc9eHI7ZnVuY3Rpb24gVmUoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbcl19KX1mdW5jdGlvbiBaZShBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJkcoQSx0aGlzLGUpfXZhciBYZT1aZS5wcm90b3R5cGU7WGUuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcGFpcnMucHVzaChbZSx0XSl9O1hlLnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCB0PWU/ZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsVmUpfTpWZTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG8pe3JldHVybiB0KG9bMF0pKyI9Iit0KG9bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgZEE9WmU7ZnVuY3Rpb24gVHIoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gaUEoQSxlLHQpe2lmKCFlKXJldHVybiBBO2xldCByPXQmJnQuZW5jb2RlfHxUcixvPXQmJnQuc2VyaWFsaXplLGk7aWYobz9pPW8oZSx0KTppPWwuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBkQShlLHQpLnRvU3RyaW5nKHIpLGkpe2xldCBuPUEuaW5kZXhPZigiIyIpO24hPT0tMSYmKEE9QS5zbGljZSgwLG4pKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBBfXZhciBKQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOnI/ci5zeW5jaHJvbm91czohMSxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7bC5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24ocil7ciE9PW51bGwmJmUocil9KX19LEhBPUpBO3ZhciBoQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyICRlPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpkQTt2YXIgQXQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBldD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciB0dD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczokZSxGb3JtRGF0YTpBdCxCbG9iOmV0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIFlBPXt9O1R0KFlBLHtoYXNCcm93c2VyRW52OigpPT5ydCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkpyLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+SHJ9KTt2YXIgcnQ9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsSnI9KEE9PnJ0JiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksSHI9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iO3ZhciBSPXsuLi5ZQSwuLi50dH07ZnVuY3Rpb24gcUEoQSxlKXtyZXR1cm4gRyhBLG5ldyBSLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLG8saSl7cmV0dXJuIFIuaXNOb2RlJiZsLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6aS5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gWXIoQSl7cmV0dXJuIGwubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBxcihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsbz10Lmxlbmd0aCxpO2ZvcihyPTA7cjxvO3IrKylpPXRbcl0sZVtpXT1BW2ldO3JldHVybiBlfWZ1bmN0aW9uIEtyKEEpe2Z1bmN0aW9uIGUodCxyLG8saSl7bGV0IG49dFtpKytdO2lmKG49PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK24pLGM9aT49dC5sZW5ndGg7cmV0dXJuIG49IW4mJmwuaXNBcnJheShvKT9vLmxlbmd0aDpuLGM/KGwuaGFzT3duUHJvcChvLG4pP29bbl09W29bbl0scl06b1tuXT1yLCFnKTooKCFvW25dfHwhbC5pc09iamVjdChvW25dKSkmJihvW25dPVtdKSxlKHQscixvW25dLGkpJiZsLmlzQXJyYXkob1tuXSkmJihvW25dPXFyKG9bbl0pKSwhZyl9aWYobC5pc0Zvcm1EYXRhKEEpJiZsLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIGwuZm9yRWFjaEVudHJ5KEEsKHIsbyk9PntlKFlyKHIpLG8sdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIHlBPUtyO2Z1bmN0aW9uIGpyKEEsZSx0KXtpZihsLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSksbC50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBLQT17dHJhbnNpdGlvbmFsOmhBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24oZSx0KXtsZXQgcj10LmdldENvbnRlbnRUeXBlKCl8fCIiLG89ci5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsaT1sLmlzT2JqZWN0KGUpO2lmKGkmJmwuaXNIVE1MRm9ybShlKSYmKGU9bmV3IEZvcm1EYXRhKGUpKSxsLmlzRm9ybURhdGEoZSkpcmV0dXJuIG8/SlNPTi5zdHJpbmdpZnkoeUEoZSkpOmU7aWYobC5pc0FycmF5QnVmZmVyKGUpfHxsLmlzQnVmZmVyKGUpfHxsLmlzU3RyZWFtKGUpfHxsLmlzRmlsZShlKXx8bC5pc0Jsb2IoZSkpcmV0dXJuIGU7aWYobC5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYobC5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IGc7aWYoaSl7aWYoci5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gcUEoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChnPWwuaXNGaWxlTGlzdChlKSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEcoZz97ImZpbGVzW10iOmV9OmUsYyYmbmV3IGMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBpfHxvPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksanIoZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy50cmFuc2l0aW9uYWx8fEtBLnRyYW5zaXRpb25hbCxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihlJiZsLmlzU3RyaW5nKGUpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxvKSl7bGV0IG49ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmbzt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZyl7aWYobil0aHJvdyBnLm5hbWU9PT0iU3ludGF4RXJyb3IiP3kuZnJvbShnLHkuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Z319cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOlIuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOlIuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2wuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57S0EuaGVhZGVyc1tBXT17fX0pO3ZhciBqPUtBO3ZhciB2cj1sLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLGl0PUE9PntsZXQgZT17fSx0LHIsbztyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24obil7bz1uLmluZGV4T2YoIjoiKSx0PW4uc3Vic3RyaW5nKDAsbykudHJpbSgpLnRvTG93ZXJDYXNlKCkscj1uLnN1YnN0cmluZyhvKzEpLnRyaW0oKSwhKCF0fHxlW3RdJiZ2clt0XSkmJih0PT09InNldC1jb29raWUiP2VbdF0/ZVt0XS5wdXNoKHIpOmVbdF09W3JdOmVbdF09ZVt0XT9lW3RdKyIsICIrcjpyKX0pLGV9O3ZhciBvdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIG9BKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gd0EoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmwuaXNBcnJheShBKT9BLm1hcCh3QSk6U3RyaW5nKEEpfWZ1bmN0aW9uIF9yKEEpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nLHI7Zm9yKDtyPXQuZXhlYyhBKTspZVtyWzFdXT1yWzJdO3JldHVybiBlfXZhciB6cj1BPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBqQShBLGUsdCxyLG8pe2lmKGwuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsZSx0KTtpZihvJiYoZT10KSwhIWwuaXNTdHJpbmcoZSkpe2lmKGwuaXNTdHJpbmcocikpcmV0dXJuIGUuaW5kZXhPZihyKSE9PS0xO2lmKGwuaXNSZWdFeHAocikpcmV0dXJuIHIudGVzdChlKX19ZnVuY3Rpb24gVnIoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSx0LHIpPT50LnRvVXBwZXJDYXNlKCkrcil9ZnVuY3Rpb24gWnIoQSxlKXtsZXQgdD1sLnRvQ2FtZWxDYXNlKCIgIitlKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2gocj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHIrdCx7dmFsdWU6ZnVuY3Rpb24obyxpLG4pe3JldHVybiB0aGlzW3JdLmNhbGwodGhpcyxlLG8saSxuKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgdj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSx0LHIpe2xldCBvPXRoaXM7ZnVuY3Rpb24gaShnLGMsdSl7bGV0IHM9b0EoYyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBhPWwuZmluZEtleShvLHMpOyghYXx8b1thXT09PXZvaWQgMHx8dT09PSEwfHx1PT09dm9pZCAwJiZvW2FdIT09ITEpJiYob1thfHxjXT13QShnKSl9bGV0IG49KGcsYyk9PmwuZm9yRWFjaChnLCh1LHMpPT5pKHUscyxjKSk7cmV0dXJuIGwuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3I/bihlLHQpOmwuaXNTdHJpbmcoZSkmJihlPWUudHJpbSgpKSYmIXpyKGUpP24oaXQoZSksdCk6ZSE9bnVsbCYmaSh0LGUsciksdGhpc31nZXQoZSx0KXtpZihlPW9BKGUpLGUpe2xldCByPWwuZmluZEtleSh0aGlzLGUpO2lmKHIpe2xldCBvPXRoaXNbcl07aWYoIXQpcmV0dXJuIG87aWYodD09PSEwKXJldHVybiBfcihvKTtpZihsLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLG8scik7aWYobC5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKG8pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSx0KXtpZihlPW9BKGUpLGUpe2xldCByPWwuZmluZEtleSh0aGlzLGUpO3JldHVybiEhKHImJnRoaXNbcl0hPT12b2lkIDAmJighdHx8akEodGhpcyx0aGlzW3JdLHIsdCkpKX1yZXR1cm4hMX1kZWxldGUoZSx0KXtsZXQgcj10aGlzLG89ITE7ZnVuY3Rpb24gaShuKXtpZihuPW9BKG4pLG4pe2xldCBnPWwuZmluZEtleShyLG4pO2cmJighdHx8akEocixyW2ddLGcsdCkpJiYoZGVsZXRlIHJbZ10sbz0hMCl9fXJldHVybiBsLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKGkpOmkoZSksb31jbGVhcihlKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzKSxyPXQubGVuZ3RoLG89ITE7Zm9yKDtyLS07KXtsZXQgaT10W3JdOyghZXx8akEodGhpcyx0aGlzW2ldLGksZSwhMCkpJiYoZGVsZXRlIHRoaXNbaV0sbz0hMCl9cmV0dXJuIG99bm9ybWFsaXplKGUpe2xldCB0PXRoaXMscj17fTtyZXR1cm4gbC5mb3JFYWNoKHRoaXMsKG8saSk9PntsZXQgbj1sLmZpbmRLZXkocixpKTtpZihuKXt0W25dPXdBKG8pLGRlbGV0ZSB0W2ldO3JldHVybn1sZXQgZz1lP1ZyKGkpOlN0cmluZyhpKS50cmltKCk7ZyE9PWkmJmRlbGV0ZSB0W2ldLHRbZ109d0EobykscltnXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBsLmZvckVhY2godGhpcywocixvKT0+e3IhPW51bGwmJnIhPT0hMSYmKHRbb109ZSYmbC5pc0FycmF5KHIpP3Iuam9pbigiLCAiKTpyKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2UsdF0pPT5lKyI6ICIrdCkuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnQpe2xldCByPW5ldyB0aGlzKGUpO3JldHVybiB0LmZvckVhY2gobz0+ci5zZXQobykpLHJ9c3RhdGljIGFjY2Vzc29yKGUpe2xldCByPSh0aGlzW290XT10aGlzW290XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG89dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gaShuKXtsZXQgZz1vQShuKTtyW2ddfHwoWnIobyxuKSxyW2ddPSEwKX1yZXR1cm4gbC5pc0FycmF5KGUpP2UuZm9yRWFjaChpKTppKGUpLHRoaXN9fTt2LmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtsLnJlZHVjZURlc2NyaXB0b3JzKHYucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChyKXt0aGlzW3RdPXJ9fX0pO2wuZnJlZXplTWV0aG9kcyh2KTt2YXIgaz12O2Z1bmN0aW9uIG5BKEEsZSl7bGV0IHQ9dGhpc3x8aixyPWV8fHQsbz1rLmZyb20oci5oZWFkZXJzKSxpPXIuZGF0YTtyZXR1cm4gbC5mb3JFYWNoKEEsZnVuY3Rpb24oZyl7aT1nLmNhbGwodCxpLG8ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksby5ub3JtYWxpemUoKSxpfWZ1bmN0aW9uIHNBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gbnQoQSxlLHQpe3kuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIseS5FUlJfQ0FOQ0VMRUQsZSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWwuaW5oZXJpdHMobnQseSx7X19DQU5DRUxfXzohMH0pO3ZhciBMPW50O2Z1bmN0aW9uIHZBKEEsZSx0KXtsZXQgcj10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFyfHxyKHQuc3RhdHVzKT9BKHQpOmUobmV3IHkoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbeS5FUlJfQkFEX1JFUVVFU1QseS5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX12YXIgc3Q9Ui5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSx0LHIsbyxpKXtsZXQgbj1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTtsLmlzTnVtYmVyKHQpJiZuLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxsLmlzU3RyaW5nKHIpJiZuLnB1c2goInBhdGg9IityKSxsLmlzU3RyaW5nKG8pJiZuLnB1c2goImRvbWFpbj0iK28pLGk9PT0hMCYmbi5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9bi5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gX0EoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiB6QShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gYUEoQSxlKXtyZXR1cm4gQSYmIV9BKGUpP3pBKEEsZSk6ZX12YXIgYXQ9Ui5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHI7ZnVuY3Rpb24gbyhpKXtsZXQgbj1pO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLG4pLG49dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIsbikse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiByPW8od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKG4pe2xldCBnPWwuaXNTdHJpbmcobik/byhuKTpuO3JldHVybiBnLnByb3RvY29sPT09ci5wcm90b2NvbCYmZy5ob3N0PT09ci5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTtmdW5jdGlvbiBWQShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gWHIoQSxlKXtBPUF8fDEwO2xldCB0PW5ldyBBcnJheShBKSxyPW5ldyBBcnJheShBKSxvPTAsaT0wLG47cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihjKXtsZXQgdT1EYXRlLm5vdygpLHM9cltpXTtufHwobj11KSx0W29dPWMscltvXT11O2xldCBhPWksZj0wO2Zvcig7YSE9PW87KWYrPXRbYSsrXSxhPWElQTtpZihvPShvKzEpJUEsbz09PWkmJihpPShpKzEpJUEpLHUtbjxlKXJldHVybjtsZXQgST1zJiZ1LXM7cmV0dXJuIEk/TWF0aC5yb3VuZChmKjFlMy9JKTp2b2lkIDB9fXZhciBJdD1YcjtmdW5jdGlvbiBndChBLGUpe2xldCB0PTAscj1JdCg1MCwyNTApO3JldHVybiBvPT57bGV0IGk9by5sb2FkZWQsbj1vLmxlbmd0aENvbXB1dGFibGU/by50b3RhbDp2b2lkIDAsZz1pLXQsYz1yKGcpLHU9aTw9bjt0PWk7bGV0IHM9e2xvYWRlZDppLHRvdGFsOm4scHJvZ3Jlc3M6bj9pL246dm9pZCAwLGJ5dGVzOmcscmF0ZTpjfHx2b2lkIDAsZXN0aW1hdGVkOmMmJm4mJnU/KG4taSkvYzp2b2lkIDAsZXZlbnQ6b307c1tlPyJkb3dubG9hZCI6InVwbG9hZCJdPSEwLEEocyl9fXZhciAkcj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLGx0PSRyJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgbz1BLmRhdGEsaT1rLmZyb20oQS5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm4sd2l0aFhTUkZUb2tlbjpnfT1BLGM7ZnVuY3Rpb24gdSgpe0EuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYyksQS5zaWduYWwmJkEuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixjKX1sZXQgcztpZihsLmlzRm9ybURhdGEobykpe2lmKFIuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxSLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilpLnNldENvbnRlbnRUeXBlKCExKTtlbHNlIGlmKChzPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W3AsLi4uRV09cz9zLnNwbGl0KCI7IikubWFwKHc9PncudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbcHx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLkVdLmpvaW4oIjsgIikpfX1sZXQgYT1uZXcgWE1MSHR0cFJlcXVlc3Q7aWYoQS5hdXRoKXtsZXQgcD1BLmF1dGgudXNlcm5hbWV8fCIiLEU9QS5hdXRoLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChBLmF1dGgucGFzc3dvcmQpKToiIjtpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYShwKyI6IitFKSl9bGV0IGY9YUEoQS5iYXNlVVJMLEEudXJsKTthLm9wZW4oQS5tZXRob2QudG9VcHBlckNhc2UoKSxpQShmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLGEudGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gSSgpe2lmKCFhKXJldHVybjtsZXQgcD1rLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBhJiZhLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSx3PXtkYXRhOiFufHxuPT09InRleHQifHxuPT09Impzb24iP2EucmVzcG9uc2VUZXh0OmEucmVzcG9uc2Usc3RhdHVzOmEuc3RhdHVzLHN0YXR1c1RleHQ6YS5zdGF0dXNUZXh0LGhlYWRlcnM6cCxjb25maWc6QSxyZXF1ZXN0OmF9O3ZBKGZ1bmN0aW9uKE0pe3QoTSksdSgpfSxmdW5jdGlvbihNKXtyKE0pLHUoKX0sdyksYT1udWxsfWlmKCJvbmxvYWRlbmQiaW4gYT9hLm9ubG9hZGVuZD1JOmEub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWF8fGEucmVhZHlTdGF0ZSE9PTR8fGEuc3RhdHVzPT09MCYmIShhLnJlc3BvbnNlVVJMJiZhLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChJKX0sYS5vbmFib3J0PWZ1bmN0aW9uKCl7YSYmKHIobmV3IHkoIlJlcXVlc3QgYWJvcnRlZCIseS5FQ09OTkFCT1JURUQsQSxhKSksYT1udWxsKX0sYS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgeSgiTmV0d29yayBFcnJvciIseS5FUlJfTkVUV09SSyxBLGEpKSxhPW51bGx9LGEub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IEU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHc9QS50cmFuc2l0aW9uYWx8fGhBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKEU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyB5KEUsdy5jbGFyaWZ5VGltZW91dEVycm9yP3kuRVRJTUVET1VUOnkuRUNPTk5BQk9SVEVELEEsYSkpLGE9bnVsbH0sUi5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihnJiZsLmlzRnVuY3Rpb24oZykmJihnPWcoQSkpLGd8fGchPT0hMSYmYXQoZikpKXtsZXQgcD1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZzdC5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO3AmJmkuc2V0KEEueHNyZkhlYWRlck5hbWUscCl9bz09PXZvaWQgMCYmaS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBhJiZsLmZvckVhY2goaS50b0pTT04oKSxmdW5jdGlvbihFLHcpe2Euc2V0UmVxdWVzdEhlYWRlcih3LEUpfSksbC5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChhLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxuJiZuIT09Impzb24iJiYoYS5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmYS5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZ3QoQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZhLnVwbG9hZCYmYS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGd0KEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihjPXA9PnthJiYocighcHx8cC50eXBlP25ldyBMKG51bGwsQSxhKTpwKSxhLmFib3J0KCksYT1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYyksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2MoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYykpKTtsZXQgQj1WQShmKTtpZihCJiZSLnByb3RvY29scy5pbmRleE9mKEIpPT09LTEpe3IobmV3IHkoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrQisiOiIseS5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1hLnNlbmQob3x8bnVsbCl9KX07dmFyIFpBPXtodHRwOm1BLHhocjpsdH07bC5mb3JFYWNoKFpBLChBLGUpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6ZX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTplfSl9fSk7dmFyIHV0PUE9PmAtICR7QX1gLEFpPUE9PmwuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxEQT17Z2V0QWRhcHRlcjpBPT57QT1sLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDplfT1BLHQscixvPXt9O2ZvcihsZXQgaT0wO2k8ZTtpKyspe3Q9QVtpXTtsZXQgbjtpZihyPXQsIUFpKHQpJiYocj1aQVsobj1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLHI9PT12b2lkIDApKXRocm93IG5ldyB5KGBVbmtub3duIGFkYXB0ZXIgJyR7bn0nYCk7aWYocilicmVhaztvW258fCIjIitpXT1yfWlmKCFyKXtsZXQgaT1PYmplY3QuZW50cmllcyhvKS5tYXAoKFtnLGNdKT0+YGFkYXB0ZXIgJHtnfSBgKyhjPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbj1lP2kubGVuZ3RoPjE/YHNpbmNlIDoKYCtpLm1hcCh1dCkuam9pbihgCmApOiIgIit1dChpWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB5KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbiwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHJ9LGFkYXB0ZXJzOlpBfTtmdW5jdGlvbiBYQShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgTChudWxsLEEpfWZ1bmN0aW9uIGJBKEEpe3JldHVybiBYQShBKSxBLmhlYWRlcnM9ay5mcm9tKEEuaGVhZGVycyksQS5kYXRhPW5BLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxEQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8ai5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiBYQShBKSxyLmRhdGE9bkEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usciksci5oZWFkZXJzPWsuZnJvbShyLmhlYWRlcnMpLHJ9LGZ1bmN0aW9uKHIpe3JldHVybiBzQShyKXx8KFhBKEEpLHImJnIucmVzcG9uc2UmJihyLnJlc3BvbnNlLmRhdGE9bkEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usci5yZXNwb25zZSksci5yZXNwb25zZS5oZWFkZXJzPWsuZnJvbShyLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3Qocil9KX12YXIgQnQ9QT0+QSBpbnN0YW5jZW9mIGs/ey4uLkF9OkE7ZnVuY3Rpb24gVyhBLGUpe2U9ZXx8e307bGV0IHQ9e307ZnVuY3Rpb24gcih1LHMsYSl7cmV0dXJuIGwuaXNQbGFpbk9iamVjdCh1KSYmbC5pc1BsYWluT2JqZWN0KHMpP2wubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6YX0sdSxzKTpsLmlzUGxhaW5PYmplY3Qocyk/bC5tZXJnZSh7fSxzKTpsLmlzQXJyYXkocyk/cy5zbGljZSgpOnN9ZnVuY3Rpb24gbyh1LHMsYSl7aWYobC5pc1VuZGVmaW5lZChzKSl7aWYoIWwuaXNVbmRlZmluZWQodSkpcmV0dXJuIHIodm9pZCAwLHUsYSl9ZWxzZSByZXR1cm4gcih1LHMsYSl9ZnVuY3Rpb24gaSh1LHMpe2lmKCFsLmlzVW5kZWZpbmVkKHMpKXJldHVybiByKHZvaWQgMCxzKX1mdW5jdGlvbiBuKHUscyl7aWYobC5pc1VuZGVmaW5lZChzKSl7aWYoIWwuaXNVbmRlZmluZWQodSkpcmV0dXJuIHIodm9pZCAwLHUpfWVsc2UgcmV0dXJuIHIodm9pZCAwLHMpfWZ1bmN0aW9uIGcodSxzLGEpe2lmKGEgaW4gZSlyZXR1cm4gcih1LHMpO2lmKGEgaW4gQSlyZXR1cm4gcih2b2lkIDAsdSl9bGV0IGM9e3VybDppLG1ldGhvZDppLGRhdGE6aSxiYXNlVVJMOm4sdHJhbnNmb3JtUmVxdWVzdDpuLHRyYW5zZm9ybVJlc3BvbnNlOm4scGFyYW1zU2VyaWFsaXplcjpuLHRpbWVvdXQ6bix0aW1lb3V0TWVzc2FnZTpuLHdpdGhDcmVkZW50aWFsczpuLHdpdGhYU1JGVG9rZW46bixhZGFwdGVyOm4scmVzcG9uc2VUeXBlOm4seHNyZkNvb2tpZU5hbWU6bix4c3JmSGVhZGVyTmFtZTpuLG9uVXBsb2FkUHJvZ3Jlc3M6bixvbkRvd25sb2FkUHJvZ3Jlc3M6bixkZWNvbXByZXNzOm4sbWF4Q29udGVudExlbmd0aDpuLG1heEJvZHlMZW5ndGg6bixiZWZvcmVSZWRpcmVjdDpuLHRyYW5zcG9ydDpuLGh0dHBBZ2VudDpuLGh0dHBzQWdlbnQ6bixjYW5jZWxUb2tlbjpuLHNvY2tldFBhdGg6bixyZXNwb25zZUVuY29kaW5nOm4sdmFsaWRhdGVTdGF0dXM6ZyxoZWFkZXJzOih1LHMpPT5vKEJ0KHUpLEJ0KHMpLCEwKX07cmV0dXJuIGwuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsZSkpLGZ1bmN0aW9uKHMpe2xldCBhPWNbc118fG8sZj1hKEFbc10sZVtzXSxzKTtsLmlzVW5kZWZpbmVkKGYpJiZhIT09Z3x8KHRbc109Zil9KSx0fXZhciBSQT0iMS42LjgiO3ZhciAkQT17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsZSk9PnskQVtBXT1mdW5jdGlvbihyKXtyZXR1cm4gdHlwZW9mIHI9PT1BfHwiYSIrKGU8MT8ibiAiOiIgIikrQX19KTt2YXIgQ3Q9e307JEEudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKGUsdCxyKXtmdW5jdGlvbiBvKGksbil7cmV0dXJuIltBeGlvcyB2IitSQSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2krIiciK24rKHI/Ii4gIityOiIiKX1yZXR1cm4oaSxuLGcpPT57aWYoZT09PSExKXRocm93IG5ldyB5KG8obiwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSkseS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiFDdFtuXSYmKEN0W25dPSEwLGNvbnNvbGUud2FybihvKG4sIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksZT9lKGksbixnKTohMH19O2Z1bmN0aW9uIGVpKEEsZSx0KXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IHkoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHkuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCByPU9iamVjdC5rZXlzKEEpLG89ci5sZW5ndGg7Zm9yKDtvLS0gPjA7KXtsZXQgaT1yW29dLG49ZVtpXTtpZihuKXtsZXQgZz1BW2ldLGM9Zz09PXZvaWQgMHx8bihnLGksQSk7aWYoYyE9PSEwKXRocm93IG5ldyB5KCJvcHRpb24gIitpKyIgbXVzdCBiZSAiK2MseS5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IG5ldyB5KCJVbmtub3duIG9wdGlvbiAiK2kseS5FUlJfQkFEX09QVElPTil9fXZhciBrQT17YXNzZXJ0T3B0aW9uczplaSx2YWxpZGF0b3JzOiRBfTt2YXIgeD1rQS52YWxpZGF0b3JzLF89Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBIQSxyZXNwb25zZTpuZXcgSEF9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBvO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG89e30pOm89bmV3IEVycm9yO2xldCBpPW8uc3RhY2s/by5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3Iuc3RhY2s/aSYmIVN0cmluZyhyLnN0YWNrKS5lbmRzV2l0aChpLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKHIuc3RhY2srPWAKYCtpKTpyLnN0YWNrPWl9dGhyb3cgcn19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PVcodGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjpvLGhlYWRlcnM6aX09dDtyIT09dm9pZCAwJiZrQS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOngudHJhbnNpdGlvbmFsKHguYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6eC50cmFuc2l0aW9uYWwoeC5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOngudHJhbnNpdGlvbmFsKHguYm9vbGVhbil9LCExKSxvIT1udWxsJiYobC5pc0Z1bmN0aW9uKG8pP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOm99OmtBLmFzc2VydE9wdGlvbnMobyx7ZW5jb2RlOnguZnVuY3Rpb24sc2VyaWFsaXplOnguZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG49aSYmbC5tZXJnZShpLmNvbW1vbixpW3QubWV0aG9kXSk7aSYmbC5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEI9PntkZWxldGUgaVtCXX0pLHQuaGVhZGVycz1rLmNvbmNhdChuLGkpO2xldCBnPVtdLGM9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKHApe3R5cGVvZiBwLnJ1bldoZW49PSJmdW5jdGlvbiImJnAucnVuV2hlbih0KT09PSExfHwoYz1jJiZwLnN5bmNocm9ub3VzLGcudW5zaGlmdChwLmZ1bGZpbGxlZCxwLnJlamVjdGVkKSl9KTtsZXQgdT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKHApe3UucHVzaChwLmZ1bGZpbGxlZCxwLnJlamVjdGVkKX0pO2xldCBzLGE9MCxmO2lmKCFjKXtsZXQgQj1bYkEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihCLnVuc2hpZnQuYXBwbHkoQixnKSxCLnB1c2guYXBwbHkoQix1KSxmPUIubGVuZ3RoLHM9UHJvbWlzZS5yZXNvbHZlKHQpO2E8Zjspcz1zLnRoZW4oQlthKytdLEJbYSsrXSk7cmV0dXJuIHN9Zj1nLmxlbmd0aDtsZXQgST10O2ZvcihhPTA7YTxmOyl7bGV0IEI9Z1thKytdLHA9Z1thKytdO3RyeXtJPUIoSSl9Y2F0Y2goRSl7cC5jYWxsKHRoaXMsRSk7YnJlYWt9fXRyeXtzPWJBLmNhbGwodGhpcyxJKX1jYXRjaChCKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoQil9Zm9yKGE9MCxmPXUubGVuZ3RoO2E8Zjspcz1zLnRoZW4odVthKytdLHVbYSsrXSk7cmV0dXJuIHN9Z2V0VXJpKGUpe2U9Vyh0aGlzLmRlZmF1bHRzLGUpO2xldCB0PWFBKGUuYmFzZVVSTCxlLnVybCk7cmV0dXJuIGlBKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O2wuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7Xy5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFcocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pO2wuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJuIGZ1bmN0aW9uKGksbixnKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KFcoZ3x8e30se21ldGhvZDplLGhlYWRlcnM6cj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6aSxkYXRhOm59KSl9fV8ucHJvdG90eXBlW2VdPXQoKSxfLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KTt2YXIgSUE9Xzt2YXIgQWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGkpe3Q9aX0pO2xldCByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obz0+e2lmKCFyLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBpPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtpLS0gPjA7KXIuX2xpc3RlbmVyc1tpXShvKTtyLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW89PntsZXQgaSxuPW5ldyBQcm9taXNlKGc9PntyLnN1YnNjcmliZShnKSxpPWd9KS50aGVuKG8pO3JldHVybiBuLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUoaSl9LG59LGUoZnVuY3Rpb24oaSxuLGcpe3IucmVhc29ufHwoci5yZWFzb249bmV3IEwoaSxuLGcpLHQoci5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG8pe2U9b30pLGNhbmNlbDplfX19LGZ0PUFlO2Z1bmN0aW9uIGVlKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiB0ZShBKXtyZXR1cm4gbC5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgcmU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKHJlKS5mb3JFYWNoKChbQSxlXSk9PntyZVtlXT1BfSk7dmFyIGN0PXJlO2Z1bmN0aW9uIHB0KEEpe2xldCBlPW5ldyBJQShBKSx0PWVBKElBLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBsLmV4dGVuZCh0LElBLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSksbC5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihvKXtyZXR1cm4gcHQoVyhBLG8pKX0sdH12YXIgRD1wdChqKTtELkF4aW9zPUlBO0QuQ2FuY2VsZWRFcnJvcj1MO0QuQ2FuY2VsVG9rZW49ZnQ7RC5pc0NhbmNlbD1zQTtELlZFUlNJT049UkE7RC50b0Zvcm1EYXRhPUc7RC5BeGlvc0Vycm9yPXk7RC5DYW5jZWw9RC5DYW5jZWxlZEVycm9yO0QuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07RC5zcHJlYWQ9ZWU7RC5pc0F4aW9zRXJyb3I9dGU7RC5tZXJnZUNvbmZpZz1XO0QuQXhpb3NIZWFkZXJzPWs7RC5mb3JtVG9KU09OPUE9PnlBKGwuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7RC5nZXRBZGFwdGVyPURBLmdldEFkYXB0ZXI7RC5IdHRwU3RhdHVzQ29kZT1jdDtELmRlZmF1bHQ9RDt2YXIgej1EO3ZhcntBeGlvczpLcyxBeGlvc0Vycm9yOmpzLENhbmNlbGVkRXJyb3I6dnMsaXNDYW5jZWw6X3MsQ2FuY2VsVG9rZW46enMsVkVSU0lPTjpWcyxhbGw6WnMsQ2FuY2VsOlhzLGlzQXhpb3NFcnJvcjokcyxzcHJlYWQ6QWEsdG9Gb3JtRGF0YTplYSxBeGlvc0hlYWRlcnM6dGEsSHR0cFN0YXR1c0NvZGU6cmEsZm9ybVRvSlNPTjppYSxnZXRBZGFwdGVyOm9hLG1lcmdlQ29uZmlnOm5hfT16O2FzeW5jIGZ1bmN0aW9uIHRpKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbz1hd2FpdCB6LmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksaT1VUkwuY3JlYXRlT2JqZWN0VVJMKG8uZGF0YSk7cj1uZXcgV29ya2VyKGkse3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIGdBPXRpO2Z1bmN0aW9uIEV0KEEpe2xldCBlPVdBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbT0FdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gcmkoQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBpPUE7cmV0dXJuIGkud29ya2VyUHJveHkhPT12b2lkIDA/KHI9aS53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6aX0pOkV0KEEpfWxldCBvPWF3YWl0IGdBKGUsdCk7cmV0dXJuIEV0KG8pfXZhciBRdD1yaTthc3luYyBmdW5jdGlvbiBpaShBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG89YCR7cn0ud2FzbWAsbj0oYXdhaXQgei5nZXQobyx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOnR9KSkuZGF0YTtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke3J9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6bn0pfXZhciBtdD1paTt2YXIgZHQ9YXN5bmMoKT0+V2ViQXNzZW1ibHkudmFsaWRhdGUobmV3IFVpbnQ4QXJyYXkoWzAsOTcsMTE1LDEwOSwxLDAsMCwwLDEsNSwxLDk2LDAsMSwxMjMsMywyLDEsMCwxMCwxMCwxLDgsMCw2NSwwLDI1MywxNSwyNTMsOTgsMTFdKSk7dmFyIHd0PXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGh0PW5ldyBUZXh0RW5jb2Rlcix5dD1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gb2koQSxlKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxyPUEuZnNfb3BlbihlLHQuZmxhZ3MpLGk9QS5mc19zdGF0KGUpLnNpemUsbj1udWxsO3d0P249bmV3IFNoYXJlZEFycmF5QnVmZmVyKGkpOm49bmV3IEFycmF5QnVmZmVyKGkpO2xldCBnPW5ldyBVaW50OEFycmF5KG4pO3JldHVybiBBLmZzX3JlYWQocixnLDAsaSwwKSxBLmZzX2Nsb3NlKHIpLGd9ZnVuY3Rpb24gRHQoQSxlLHQpe2xldCByPW51bGw7d3Q/cj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6cj1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IG89bmV3IFVpbnQ4QXJyYXkociksaT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZSx0KTtyZXR1cm4gby5zZXQoaSksb31mdW5jdGlvbiBiKEEsZSx0LHIpe2xldCBvPTA7cmV0dXJuIGUhPT1udWxsJiYobz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LHIsZS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShlLmJ1ZmZlciksbykpLG99ZnVuY3Rpb24gVihBLGUsdCl7bGV0IHI9SlNPTi5zdHJpbmdpZnkoZSksbz1BLmxlbmd0aEJ5dGVzVVRGOChyKSsxLGk9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LG9dKTtBLnN0cmluZ1RvVVRGOChyLGksbyl9ZnVuY3Rpb24gRihBLGUsdCxyKXtsZXQgbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxpPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG49RHQoQSxvLGkpO3JldHVybiBQKHIsbi5idWZmZXIpfWZ1bmN0aW9uIGllKEEsZSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxlXSkscj1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShyKX1mdW5jdGlvbiBuaShBLGUsdCxyKXtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24odSxzKXtzd2l0Y2godS50eXBlKXtjYXNlIEMuVGV4dFN0cmVhbTp7bGV0IGE9aHQuZW5jb2RlKHUuZGF0YS5kYXRhKSxmPWIoQSxhLHMsMCksST17c2l6ZTphLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1YoQSxJLHMpO2JyZWFrfWNhc2UgQy5Kc29uQ29tcGF0aWJsZTp7bGV0IGE9aHQuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHUuZGF0YSkpLGY9YihBLGEscywwKSxJPXtzaXplOmEuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VihBLEkscyk7YnJlYWt9Y2FzZSBDLkJpbmFyeVN0cmVhbTp7bGV0IGE9dS5kYXRhLmRhdGEsZj1iKEEsYSxzLDApLEk9e3NpemU6YS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtWKEEsSSxzKTticmVha31jYXNlIEMuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKHUuZGF0YS5wYXRoLHUuZGF0YS5kYXRhKTticmVha31jYXNlIEMuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUodS5kYXRhLnBhdGgsdS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgQy5JbWFnZTp7bGV0IGE9dS5kYXRhLGY9YihBLGEuZGF0YSxzLDApLEk9YihBLGEuZGlyZWN0aW9uLHMsMSksQj10eXBlb2YgYS5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShhLm1ldGFkYXRhLmVudHJpZXMoKSk6W10scD17aW1hZ2VUeXBlOmEuaW1hZ2VUeXBlLG5hbWU6YS5uYW1lLG9yaWdpbjphLm9yaWdpbixzcGFjaW5nOmEuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtJfWAsc2l6ZTphLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpCfTtWKEEscCxzKTticmVha31jYXNlIEMuTWVzaDp7bGV0IGE9dS5kYXRhLGY9YihBLGEucG9pbnRzLHMsMCksST1iKEEsYS5jZWxscyxzLDEpLEI9YihBLGEucG9pbnREYXRhLHMsMikscD1iKEEsYS5jZWxsRGF0YSxzLDMpLEU9e21lc2hUeXBlOmEubWVzaFR5cGUsbmFtZTphLm5hbWUsbnVtYmVyT2ZQb2ludHM6YS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczphLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtJfWAsY2VsbEJ1ZmZlclNpemU6YS5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gfTtWKEEsRSxzKTticmVha31jYXNlIEMuUG9seURhdGE6e2xldCBhPXUuZGF0YSxmPWIoQSxhLnBvaW50cyxzLDApLEk9YihBLGEudmVydGljZXMscywxKSxCPWIoQSxhLmxpbmVzLHMsMikscD1iKEEsYS5wb2x5Z29ucyxzLDMpLEU9YihBLGEudHJpYW5nbGVTdHJpcHMscyw0KSx3PWIoQSxhLnBvaW50RGF0YSxzLDUpLE49YihBLGEucG9pbnREYXRhLHMsNiksTT17cG9seURhdGFUeXBlOmEucG9seURhdGFUeXBlLG5hbWU6YS5uYW1lLG51bWJlck9mUG9pbnRzOmEubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTphLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxsaW5lc0J1ZmZlclNpemU6YS5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAscG9seWdvbnNCdWZmZXJTaXplOmEucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTphLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOmEubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt3fWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOmEubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Tn1gfTtWKEEsTSxzKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgbz1BLnN0YWNrU2F2ZSgpLGk9MDt0cnl7aT1BLmNhbGxNYWluKGUuc2xpY2UoKSl9Y2F0Y2godSl7dGhyb3cgdHlwZW9mIHU9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UodSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksdX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKG8pfWxldCBuPUEuZ2V0TW9kdWxlU3Rkb3V0KCksZz1BLmdldE1vZHVsZVN0ZGVycigpLGM9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJmk9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24odSxzKXtsZXQgYT1udWxsO3N3aXRjaCh1LnR5cGUpe2Nhc2UgQy5UZXh0U3RyZWFtOntsZXQgST1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLHA9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEksQik7YT17ZGF0YTp5dC5kZWNvZGUocCl9O2JyZWFrfWNhc2UgQy5Kc29uQ29tcGF0aWJsZTp7bGV0IEk9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxwPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixJLEIpO2E9SlNPTi5wYXJzZSh5dC5kZWNvZGUocCkpO2JyZWFrfWNhc2UgQy5CaW5hcnlTdHJlYW06e2xldCBJPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSk7YT17ZGF0YTpEdChBLEksQil9O2JyZWFrfWNhc2UgQy5UZXh0RmlsZTp7YT17cGF0aDp1LmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUodS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEMuQmluYXJ5RmlsZTp7YT17cGF0aDp1LmRhdGEucGF0aCxkYXRhOm9pKEEsdS5kYXRhLnBhdGgpfTticmVha31jYXNlIEMuSW1hZ2U6e2xldCBJPWllKEEscyk7SS5kYXRhPUYoQSxzLDAsSS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksSS5kaXJlY3Rpb249RihBLHMsMSxILkZsb2F0NjQpLEkubWV0YWRhdGE9bmV3IE1hcChJLm1ldGFkYXRhKSxhPUk7YnJlYWt9Y2FzZSBDLk1lc2g6e2xldCBJPWllKEEscyk7SS5udW1iZXJPZlBvaW50cz4wP0kucG9pbnRzPUYoQSxzLDAsSS5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkkucG9pbnRzPVAoSS5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJLm51bWJlck9mQ2VsbHM+MD9JLmNlbGxzPUYoQSxzLDEsSS5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6SS5jZWxscz1QKEkubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJLm51bWJlck9mUG9pbnRQaXhlbHM+MD9JLnBvaW50RGF0YT1GKEEscywyLEkubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkkucG9pbnREYXRhPVAoSS5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEkubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/SS5jZWxsRGF0YT1GKEEscywzLEkubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6SS5jZWxsRGF0YT1QKEkubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGE9STticmVha31jYXNlIEMuUG9seURhdGE6e2xldCBJPWllKEEscyk7SS5udW1iZXJPZlBvaW50cz4wP0kucG9pbnRzPUYoQSxzLDAsSC5GbG9hdDMyKTpJLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEkudmVydGljZXNCdWZmZXJTaXplPjA/SS52ZXJ0aWNlcz1GKEEscywxLFMuVUludDMyKTpJLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxJLmxpbmVzQnVmZmVyU2l6ZT4wP0kubGluZXM9RihBLHMsMixTLlVJbnQzMik6SS5saW5lcz1uZXcgVWludDMyQXJyYXksSS5wb2x5Z29uc0J1ZmZlclNpemU+MD9JLnBvbHlnb25zPUYoQSxzLDMsUy5VSW50MzIpOkkucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/SS50cmlhbmdsZVN0cmlwcz1GKEEscyw0LFMuVUludDMyKTpJLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxJLm51bWJlck9mUG9pbnRQaXhlbHM+MD9JLnBvaW50RGF0YT1GKEEscyw1LEkucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpJLnBvaW50RGF0YT1QKEkucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksSS5udW1iZXJPZkNlbGxQaXhlbHM+MD9JLmNlbGxEYXRhPUYoQSxzLDYsSS5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6SS5jZWxsRGF0YT1QKEkucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxhPUk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTp1LnR5cGUsZGF0YTphfTtjLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6bixzdGRlcnI6ZyxvdXRwdXRzOmN9fXZhciBidD1uaTt2YXIgc2k9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIGFpKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG89SWkoQVtyXSxlKTtvIT09bnVsbCYmdC5wdXNoKG8pfXJldHVybiB0fWZ1bmN0aW9uIElpKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksc2kmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBSdD1haTtmdW5jdGlvbiBnaShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIga3Q9Z2k7ZnVuY3Rpb24gbGkoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIFN0PWxpO2Z1bmN0aW9uIHVpKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBGdD11aTt2YXIgQmk7ZnVuY3Rpb24gU0EoKXtyZXR1cm4gQml9dmFyIENpO2Z1bmN0aW9uIFV0KCl7cmV0dXJuIENpfXZhciBmaTtmdW5jdGlvbiBGQSgpe3JldHVybiBmaX12YXIgb2U9bmV3IE1hcDtmdW5jdGlvbiBjaSgpe2xldCBBPUZBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBOdCgpe2xldCBBPVNBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIFVBKCl7bGV0IEE9VXQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBwaShBLGUsdCl7bGV0IHI9QSxvPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbz1yLmhyZWYpLG9lLmhhcyhvKSlyZXR1cm4gb2UuZ2V0KG8pO3tsZXQgaT1hd2FpdCBtdChBLGU/LnRvU3RyaW5nKCk/P050KCksdD8/VUEoKSk7cmV0dXJuIG9lLnNldChvLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIEVpKEEsZSx0LHIsbyl7aWYoIWF3YWl0IGR0KCkpe2xldCBFPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChFKSxuZXcgRXJyb3IoRSl9bGV0IGk9bz8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IEU9YXdhaXQgcGkoQS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9VQSgpKTtyZXR1cm4gYnQoRSxlLHQscil9bGV0IG49aSxnPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9jaSgpLGM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OnUsd29ya2VyOnN9PWF3YWl0IFF0KG4sYyxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9VQSgpKTtuPXM7bGV0IGE9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEUpe2lmKEUudHlwZT09PUMuQmluYXJ5U3RyZWFtKXtsZXQgdz1FLmRhdGEuZGF0YTthLnB1c2godyl9ZWxzZSBpZihFLnR5cGU9PT1DLkJpbmFyeUZpbGUpe2xldCB3PUUuZGF0YS5kYXRhO2EucHVzaCh3KX1lbHNlIGlmKEUudHlwZT09PUMuSW1hZ2Upe2xldCB3PUUuZGF0YTt3LmRhdGEhPT1udWxsJiZhLnB1c2goLi4ua3QodykpfWVsc2UgaWYoRS50eXBlPT09Qy5NZXNoKXtsZXQgdz1FLmRhdGE7YS5wdXNoKC4uLlN0KHcpKX1lbHNlIGlmKEUudHlwZT09PUMuUG9seURhdGEpe2xldCB3PUUuZGF0YTthLnB1c2goLi4uRnQodykpfX0pO2xldCBmPW8/LnBpcGVsaW5lQmFzZVVybD8/TnQoKSxJPXR5cGVvZiBmIT0ic3RyaW5nIiYmdHlwZW9mIGY/LmhyZWY8InUiP2YuaHJlZjpmLEI9ciE9bnVsbD9QQShyLFJ0KGEsbz8ubm9Db3B5KSk6bnVsbCxwPWF3YWl0IHUucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLEksZSx0LEIsbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/VUEoKSk7cmV0dXJue3JldHVyblZhbHVlOnAucmV0dXJuVmFsdWUsc3Rkb3V0OnAuc3Rkb3V0LHN0ZGVycjpwLnN0ZGVycixvdXRwdXRzOnAub3V0cHV0cyx3ZWJXb3JrZXI6bn19dmFyIG09RWk7dmFyIFFpPW51bGw7ZnVuY3Rpb24gTXQoKXtyZXR1cm4gUWl9dmFyIG1pPW5ldyBNYXAoW10pLFo9bWk7dmFyIGRpPSIxLjIuMSIsT3Q9ZGk7dmFyIG5lLGhpPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9tZXNoLWlvQCR7T3R9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBYYShBKXtuZT1BfWZ1bmN0aW9uIGQoKXtpZih0eXBlb2YgbmU8InUiKXJldHVybiBuZTtsZXQgQT1TQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpoaX12YXIgc2UseWk9bnVsbDtmdW5jdGlvbiBXdChBKXtzZT1BfWZ1bmN0aW9uIFEoKXtpZih0eXBlb2Ygc2U8InUiKXJldHVybiBzZTtsZXQgQT1GQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTp5aX12YXIgWD1udWxsO2FzeW5jIGZ1bmN0aW9uIFB0KCl7bGV0IEE9USgpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7WD1hd2FpdCBnQShlKX1mdW5jdGlvbiBvSShBKXtYPUF9YXN5bmMgZnVuY3Rpb24gaCgpe2lmKFghPT1udWxsKXJldHVybiBYLnRlcm1pbmF0ZWQmJmF3YWl0IFB0KCksWDtsZXQgQT1NdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBQdCgpLFgpfWFzeW5jIGZ1bmN0aW9uIHdpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuTWVzaH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEU9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoRSl9fWxldCBvPVt7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLGUuaW5mb3JtYXRpb25Pbmx5JiZlLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgdT0idnRrLXBvbHktZGF0YS1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgYWU9d2k7YXN5bmMgZnVuY3Rpb24gRGkoQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGM9ZTtpLnB1c2goYyksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0idnRrLXBvbHktZGF0YS13cml0ZS1tZXNoIixzPXQ/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGkscixvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6dD8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkV3JpdGU6QlswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpCWzFdPy5kYXRhfX12YXIgSWU9RGk7YXN5bmMgZnVuY3Rpb24gYmkoQSxlPXt9KXtsZXQgdD1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5NZXNofV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgRT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShFKX19bGV0IG89W3t0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCB1PSJvYmotcmVhZC1tZXNoIixzPWU/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGksdCxvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkUmVhZDpCWzBdPy5kYXRhLG1lc2g6QlsxXT8uZGF0YX19dmFyIGdlPWJpO2FzeW5jIGZ1bmN0aW9uIFJpKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkMuTWVzaCxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBjPWU7aS5wdXNoKGMpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJmkucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHU9Im9iai13cml0ZS1tZXNoIixzPXQ/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGkscixvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6dD8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkV3JpdGU6QlswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpCWzFdPy5kYXRhfX12YXIgbGU9Umk7YXN5bmMgZnVuY3Rpb24ga2koQSxlPXt9KXtsZXQgdD1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5NZXNofV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgRT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShFKX19bGV0IG89W3t0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCB1PSJzdGwtcmVhZC1tZXNoIixzPWU/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGksdCxvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkUmVhZDpCWzBdPy5kYXRhLG1lc2g6QlsxXT8uZGF0YX19dmFyIHVlPWtpO2FzeW5jIGZ1bmN0aW9uIFNpKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkMuTWVzaCxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBjPWU7aS5wdXNoKGMpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJmkucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHU9InN0bC13cml0ZS1tZXNoIixzPXQ/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGkscixvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6dD8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkV3JpdGU6QlswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpCWzFdPy5kYXRhfX12YXIgQmU9U2k7YXN5bmMgZnVuY3Rpb24gRmkoQSxlPXt9KXtsZXQgdD1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5NZXNofV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgRT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShFKX19bGV0IG89W3t0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCB1PSJvZmYtcmVhZC1tZXNoIixzPWU/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGksdCxvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkUmVhZDpCWzBdPy5kYXRhLG1lc2g6QlsxXT8uZGF0YX19dmFyIENlPUZpO2FzeW5jIGZ1bmN0aW9uIFVpKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkMuTWVzaCxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBjPWU7aS5wdXNoKGMpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJmkucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHU9Im9mZi13cml0ZS1tZXNoIixzPXQ/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGkscixvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6dD8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkV3JpdGU6QlswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpCWzFdPy5kYXRhfX12YXIgZmU9VWk7YXN5bmMgZnVuY3Rpb24gTmkoQSxlPXt9KXtsZXQgdD1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5NZXNofV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgRT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShFKX19bGV0IG89W3t0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCB1PSJ3YXNtLXJlYWQtbWVzaCIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6ZixzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGYhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6QlswXT8uZGF0YSxtZXNoOkJbMV0/LmRhdGF9fXZhciBjZT1OaTthc3luYyBmdW5jdGlvbiBNaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpDLk1lc2gsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgYz1lO2kucHVzaChjKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZpLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCB1PSJ3YXNtLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBwZT1NaTthc3luYyBmdW5jdGlvbiBPaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9Indhc20tenN0ZC1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgRWU9T2k7YXN5bmMgZnVuY3Rpb24gV2koQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGM9ZTtpLnB1c2goYyksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0id2FzbS16c3RkLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBRZT1XaTthc3luYyBmdW5jdGlvbiBQaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9InN3Yy1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgbWU9UGk7YXN5bmMgZnVuY3Rpb24gR2koQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGM9ZTtpLnB1c2goYyksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0ic3djLXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciBkZT1HaTthc3luYyBmdW5jdGlvbiBMaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9ImJ5dS1yZWFkLW1lc2giLHM9ZT8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSx0LG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTplPy5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRSZWFkOkJbMF0/LmRhdGEsbWVzaDpCWzFdPy5kYXRhfX12YXIgaGU9TGk7YXN5bmMgZnVuY3Rpb24geGkoQSxlLHQ9e30pe2xldCByPVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6Qy5NZXNoLGRhdGE6QX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGM9ZTtpLnB1c2goYyksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIiksdC5iaW5hcnlGaWxlVHlwZSYmdC5iaW5hcnlGaWxlVHlwZSYmaS5wdXNoKCItLWJpbmFyeS1maWxlLXR5cGUiKTtsZXQgdT0iYnl1LXdyaXRlLW1lc2giLHM9dD8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IGgoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOmYsc3RkZXJyOkksb3V0cHV0czpCfT1hd2FpdCBtKHUsaSxyLG8se3BpcGVsaW5lQmFzZVVybDpkKCkscGlwZWxpbmVXb3JrZXJVcmw6USgpLHdlYldvcmtlcjpzLG5vQ29weTp0Py5ub0NvcHl9KTtpZihmIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOmEsY291bGRXcml0ZTpCWzBdPy5kYXRhLHNlcmlhbGl6ZWRNZXNoOkJbMV0/LmRhdGF9fXZhciB5ZT14aTthc3luYyBmdW5jdGlvbiBUaShBLGU9e30pe2xldCB0PVt7dHlwZTpDLkpzb25Db21wYXRpYmxlfSx7dHlwZTpDLk1lc2h9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBFPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEUpfX1sZXQgbz1be3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxlLmluZm9ybWF0aW9uT25seSYmZS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IHU9ImZyZWUtc3VyZmVyLWFzY2lpLXJlYWQtbWVzaCIscz1lPy53ZWJXb3JrZXI7cz09PXZvaWQgMCYmKHM9YXdhaXQgaCgpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6ZixzdGRlcnI6SSxvdXRwdXRzOkJ9PWF3YWl0IG0odSxpLHQsbyx7cGlwZWxpbmVCYXNlVXJsOmQoKSxwaXBlbGluZVdvcmtlclVybDpRKCksd2ViV29ya2VyOnMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGYhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6QlswXT8uZGF0YSxtZXNoOkJbMV0/LmRhdGF9fXZhciB3ZT1UaTthc3luYyBmdW5jdGlvbiBKaShBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkMuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpDLk1lc2gsZGF0YTpBfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgYz1lO2kucHVzaChjKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKSx0LmJpbmFyeUZpbGVUeXBlJiZ0LmJpbmFyeUZpbGVUeXBlJiZpLnB1c2goIi0tYmluYXJ5LWZpbGUtdHlwZSIpO2xldCB1PSJmcmVlLXN1cmZlci1hc2NpaS13cml0ZS1tZXNoIixzPXQ/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGkscixvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6dD8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkV3JpdGU6QlswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpCWzFdPy5kYXRhfX12YXIgRGU9Smk7YXN5bmMgZnVuY3Rpb24gSGkoQSxlPXt9KXtsZXQgdD1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5NZXNofV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgRT1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShFKX19bGV0IG89W3t0eXBlOkMuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCB1PSJmcmVlLXN1cmZlci1iaW5hcnktcmVhZC1tZXNoIixzPWU/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGksdCxvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkUmVhZDpCWzBdPy5kYXRhLG1lc2g6QlsxXT8uZGF0YX19dmFyIGJlPUhpO2FzeW5jIGZ1bmN0aW9uIFlpKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6Qy5Kc29uQ29tcGF0aWJsZX0se3R5cGU6Qy5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOkMuTWVzaCxkYXRhOkF9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBjPWU7aS5wdXNoKGMpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpLHQuYmluYXJ5RmlsZVR5cGUmJnQuYmluYXJ5RmlsZVR5cGUmJmkucHVzaCgiLS1iaW5hcnktZmlsZS10eXBlIik7bGV0IHU9ImZyZWUtc3VyZmVyLWJpbmFyeS13cml0ZS1tZXNoIixzPXQ/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBoKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpmLHN0ZGVycjpJLG91dHB1dHM6Qn09YXdhaXQgbSh1LGkscixvLHtwaXBlbGluZUJhc2VVcmw6ZCgpLHBpcGVsaW5lV29ya2VyVXJsOlEoKSx3ZWJXb3JrZXI6cyxub0NvcHk6dD8ubm9Db3B5fSk7aWYoZiE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjphLGNvdWxkV3JpdGU6QlswXT8uZGF0YSxzZXJpYWxpemVkTWVzaDpCWzFdPy5kYXRhfX12YXIgUmU9WWk7dmFyIHFpPW5ldyBNYXAoW1sidnRrIixbYWUsSWVdXSxbIm9iaiIsW2dlLGxlXV0sWyJzdGwiLFt1ZSxCZV1dLFsib2ZmIixbQ2UsZmVdXSxbIndhc20iLFtjZSxwZV1dLFsid2FzbS16c3QiLFtFZSxRZV1dLFsic3djIixbbWUsZGVdXSxbImJ5dSIsW2hlLHllXV0sWyJmcmVlLXN1cmZlci1hc2NpaSIsW3dlLERlXV0sWyJmcmVlLXN1cmZlci1iaW5hcnkiLFtiZSxSZV1dXSksJD1xaTthc3luYyBmdW5jdGlvbiBLaShBLGU9e30pe2xldCB0PUEudHlwZT8/IiIscj1BLm5hbWU/P0EucGF0aD8/ImZpbGVOYW1lIixvPUFBKHIpLnRvTG93ZXJDYXNlKCksaT1lPy53ZWJXb3JrZXIsbj1BO2lmKEEgaW5zdGFuY2VvZiBCbG9iKXtsZXQgST1hd2FpdCBBLmFycmF5QnVmZmVyKCk7bj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShJKX19bGV0IGc9bnVsbDtpZih0JiZaLmhhcyh0KSlnPVouZ2V0KHQpO2Vsc2UgaWYoVC5oYXMobykpZz1ULmdldChvKTtlbHNlIGZvcihsZXQgSSBvZiAkLnZhbHVlcygpKWlmKElbMF0hPT1udWxsKXtsZXR7d2ViV29ya2VyOkIsY291bGRSZWFkOnAsbWVzaDpFfT1hd2FpdCBJWzBdKHtwYXRoOm4ucGF0aCxkYXRhOm4uZGF0YS5zbGljZSgpfSx7aW5mb3JtYXRpb25Pbmx5OmUuaW5mb3JtYXRpb25Pbmx5LHdlYldvcmtlcjppLG5vQ29weTplPy5ub0NvcHl9KTtpZihpPUIscClyZXR1cm57d2ViV29ya2VyOmksbWVzaDpFfX1pZighZyl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSU8gZm9yOiAiK3IpO2xldCB1PSQuZ2V0KGcpWzBdLHt3ZWJXb3JrZXI6cyxjb3VsZFJlYWQ6YSxtZXNoOmZ9PWF3YWl0IHUobix7aW5mb3JtYXRpb25Pbmx5OmUuaW5mb3JtYXRpb25Pbmx5LHdlYldvcmtlcjppLG5vQ29weTplPy5ub0NvcHl9KTtpZihpPXMsIWEpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCByZWFkOiAiK3IpO3JldHVybnt3ZWJXb3JrZXI6aSxtZXNoOmZ9fXZhciBqaT1LaTthc3luYyBmdW5jdGlvbiB2aShBLGUsdD17fSl7bGV0IHI9QSxvPXQubWltZVR5cGUsaT1BQShlKS50b0xvd2VyQ2FzZSgpLG49dC53ZWJXb3JrZXIsZz1udWxsO2lmKHR5cGVvZiBvPCJ1IiYmWi5oYXMobykpZz1aLmdldChvKTtlbHNlIGlmKFQuaGFzKGkpKWc9VC5nZXQoaSk7ZWxzZSBmb3IobGV0IEIgb2YgJC52YWx1ZXMoKSlpZihCWzFdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpwLGNvdWxkV3JpdGU6RSxzZXJpYWxpemVkTWVzaDp3fT1hd2FpdCBCWzFdKHIsZSx0KTtpZihuPXAsRSlyZXR1cm57d2ViV29ya2VyOm4sc2VyaWFsaXplZE1lc2g6d319aWYoIWcpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIElPIGZvcjogIitlKTtsZXQgdT0kLmdldChnKVsxXSx7d2ViV29ya2VyOnMsY291bGRXcml0ZTphLHNlcmlhbGl6ZWRNZXNoOmZ9PWF3YWl0IHUocixlLHQpO2lmKG49cywhYSl0aHJvdyBFcnJvcigiQ291bGQgbm90IHdyaXRlOiAiK2UpO3JldHVybnt3ZWJXb3JrZXI6bixzZXJpYWxpemVkTWVzaDpmfX12YXIgX2k9dmk7dmFyIEd0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciB0dD1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIGV0PShBLEkpPT57Zm9yKHZhciB0IGluIEkpdHQoQSx0LHtnZXQ6SVt0XSxlbnVtZXJhYmxlOiEwfSl9O3ZhciB2QT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxndD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxydD1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksbUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGVBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSwkQT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixpdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZBW3ZBXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOkkscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBvQShBLEkpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksc3QoQSl9fSxvdD17Y2FuSGFuZGxlOkE9PiRBKEEpJiZlQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBJO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ST17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319Okk9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW0ksW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sQUk9bmV3IE1hcChbWyJwcm94eSIsaXRdLFsidGhyb3ciLG90XV0pO2Z1bmN0aW9uIEJ0KEEsSSl7Zm9yKGxldCB0IG9mIEEpaWYoST09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChJKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBvQShBLEk9Z2xvYmFsVGhpcyx0PVsiKiJdKXtJLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIGUoZyl7aWYoIWd8fCFnLmRhdGEpcmV0dXJuO2lmKCFCdCh0LGcub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7Zy5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOnIsdHlwZTppLHBhdGg6c309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sZy5kYXRhKSxhPShnLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKGIpLFE7dHJ5e2xldCBDPXMuc2xpY2UoMCwtMSkucmVkdWNlKChmLG4pPT5mW25dLEEpLG89cy5yZWR1Y2UoKGYsbik9PmZbbl0sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpRPW87YnJlYWs7Y2FzZSJTRVQiOkNbcy5zbGljZSgtMSlbMF1dPWIoZy5kYXRhLnZhbHVlKSxRPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOlE9by5hcHBseShDLGEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IG8oLi4uYSk7UT1hdChmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6bn09bmV3IE1lc3NhZ2VDaGFubmVsO29BKEEsbiksUT1GQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpRPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goQyl7UT17dmFsdWU6QyxbZUFdOjB9fVByb21pc2UucmVzb2x2ZShRKS5jYXRjaChDPT4oe3ZhbHVlOkMsW2VBXTowfSkpLnRoZW4oQz0+e2xldFtvLGZdPWlBKEMpO0kucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LG8pLHtpZDpyfSksZiksaT09PSJSRUxFQVNFIiYmKEkucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZSksSUkoSSksbUEgaW4gQSYmdHlwZW9mIEFbbUFdPT0iZnVuY3Rpb24iJiZBW21BXSgpKX0pLmNhdGNoKEM9PntsZXRbbyxmXT1pQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2VBXTowfSk7SS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse2lkOnJ9KSxmKX0pfSksSS5zdGFydCYmSS5zdGFydCgpfWZ1bmN0aW9uIEN0KEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIElJKEEpe0N0KEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gc3QoQSxJKXtyZXR1cm4gcEEoQSxbXSxJKX1mdW5jdGlvbiB0QShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gdEkoQSl7cmV0dXJuIE0oQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57SUkoQSl9KX12YXIgZ0E9bmV3IFdlYWtNYXAsckE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IEk9KGdBLmdldChBKXx8MCktMTtnQS5zZXQoQSxJKSxJPT09MCYmdEkoQSl9KTtmdW5jdGlvbiBudChBLEkpe2xldCB0PShnQS5nZXQoSSl8fDApKzE7Z0Euc2V0KEksdCksckEmJnJBLnJlZ2lzdGVyKEEsSSxBKX1mdW5jdGlvbiBRdChBKXtyQSYmckEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBwQShBLEk9W10sdD1mdW5jdGlvbigpe30pe2xldCBlPSExLGc9bmV3IFByb3h5KHQse2dldChyLGkpe2lmKHRBKGUpLGk9PT1ydClyZXR1cm4oKT0+e1F0KGcpLHRJKEEpLGU9ITB9O2lmKGk9PT0idGhlbiIpe2lmKEkubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+Z307bGV0IHM9TShBLHt0eXBlOiJHRVQiLHBhdGg6SS5tYXAoYT0+YS50b1N0cmluZygpKX0pLnRoZW4oYik7cmV0dXJuIHMudGhlbi5iaW5kKHMpfXJldHVybiBwQShBLFsuLi5JLGldKX0sc2V0KHIsaSxzKXt0QShlKTtsZXRbYSxRXT1pQShzKTtyZXR1cm4gTShBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLkksaV0ubWFwKEM9PkMudG9TdHJpbmcoKSksdmFsdWU6YX0sUSkudGhlbihiKX0sYXBwbHkocixpLHMpe3RBKGUpO2xldCBhPUlbSS5sZW5ndGgtMV07aWYoYT09PWd0KXJldHVybiBNKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oYik7aWYoYT09PSJiaW5kIilyZXR1cm4gcEEoQSxJLnNsaWNlKDAsLTEpKTtsZXRbUSxDXT1fQShzKTtyZXR1cm4gTShBLHt0eXBlOiJBUFBMWSIscGF0aDpJLm1hcChvPT5vLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpRfSxDKS50aGVuKGIpfSxjb25zdHJ1Y3QocixpKXt0QShlKTtsZXRbcyxhXT1fQShpKTtyZXR1cm4gTShBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6SS5tYXAoUT0+US50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6c30sYSkudGhlbihiKX19KTtyZXR1cm4gbnQoZyxBKSxnfWZ1bmN0aW9uIEV0KEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIF9BKEEpe2xldCBJPUEubWFwKGlBKTtyZXR1cm5bSS5tYXAodD0+dFswXSksRXQoSS5tYXAodD0+dFsxXSkpXX12YXIgZUk9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gRkEoQSxJKXtyZXR1cm4gZUkuc2V0KEEsSSksQX1mdW5jdGlvbiBhdChBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbdkFdOiEwfSl9ZnVuY3Rpb24gaUEoQSl7Zm9yKGxldFtJLHRdb2YgQUkpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtlLGddPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTpJLHZhbHVlOmV9LGddfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxlSS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBiKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEFJLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gTShBLEksdCl7cmV0dXJuIG5ldyBQcm9taXNlKGU9PntsZXQgZz1jdCgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1nfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxlKGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6Z30sSSksdCl9KX1mdW5jdGlvbiBjdCgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gVyhBLEkpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KEksYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOmZ0fT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpOQX09T2JqZWN0LENBPShBPT5JPT57bGV0IHQ9ZnQuY2FsbChJKTtyZXR1cm4gQVt0XXx8KEFbdF09dC5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFU9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLEk9PkNBKEkpPT09QSksc0E9QT0+ST0+dHlwZW9mIEk9PT1BLHtpc0FycmF5OnF9PUFycmF5LFo9c0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIGx0KEEpe3JldHVybiBBIT09bnVsbCYmIVooQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhWihBLmNvbnN0cnVjdG9yKSYmUyhBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgb0k9VSgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBEdChBKXtsZXQgSTtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0k9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOkk9QSYmQS5idWZmZXImJm9JKEEuYnVmZmVyKSxJfXZhciB1dD1zQSgic3RyaW5nIiksUz1zQSgiZnVuY3Rpb24iKSxCST1zQSgibnVtYmVyIiksbkE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixodD1BPT5BPT09ITB8fEE9PT0hMSxCQT1BPT57aWYoQ0EoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgST1OQShBKTtyZXR1cm4oST09PW51bGx8fEk9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoSSk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxkdD1VKCJEYXRlIikseXQ9VSgiRmlsZSIpLHd0PVUoIkJsb2IiKSxtdD1VKCJGaWxlTGlzdCIpLHB0PUE9Pm5BKEEpJiZTKEEucGlwZSksRnQ9QT0+e2xldCBJO3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fFMoQS5hcHBlbmQpJiYoKEk9Q0EoQSkpPT09ImZvcm1kYXRhInx8ST09PSJvYmplY3QiJiZTKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFN0PVUoIlVSTFNlYXJjaFBhcmFtcyIpLFJ0PUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBWKEEsSSx7YWxsT3duS2V5czp0PSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IGUsZztpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSkscShBKSlmb3IoZT0wLGc9QS5sZW5ndGg7ZTxnO2UrKylJLmNhbGwobnVsbCxBW2VdLGUsQSk7ZWxzZXtsZXQgcj10P09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGk9ci5sZW5ndGgscztmb3IoZT0wO2U8aTtlKyspcz1yW2VdLEkuY2FsbChudWxsLEFbc10scyxBKX19ZnVuY3Rpb24gQ0koQSxJKXtJPUkudG9Mb3dlckNhc2UoKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxlPXQubGVuZ3RoLGc7Zm9yKDtlLS0gPjA7KWlmKGc9dFtlXSxJPT09Zy50b0xvd2VyQ2FzZSgpKXJldHVybiBnO3JldHVybiBudWxsfXZhciBzST10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLG5JPUE9PiFaKEEpJiZBIT09c0k7ZnVuY3Rpb24gUkEoKXtsZXR7Y2FzZWxlc3M6QX09bkkodGhpcykmJnRoaXN8fHt9LEk9e30sdD0oZSxnKT0+e2xldCByPUEmJkNJKEksZyl8fGc7QkEoSVtyXSkmJkJBKGUpP0lbcl09UkEoSVtyXSxlKTpCQShlKT9JW3JdPVJBKHt9LGUpOnEoZSk/SVtyXT1lLnNsaWNlKCk6SVtyXT1lfTtmb3IobGV0IGU9MCxnPWFyZ3VtZW50cy5sZW5ndGg7ZTxnO2UrKylhcmd1bWVudHNbZV0mJlYoYXJndW1lbnRzW2VdLHQpO3JldHVybiBJfXZhciBOdD0oQSxJLHQse2FsbE93bktleXM6ZX09e30pPT4oVihJLChnLHIpPT57dCYmUyhnKT9BW3JdPVcoZyx0KTpBW3JdPWd9LHthbGxPd25LZXlzOmV9KSxBKSxVdD1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLEd0PShBLEksdCxlKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUsZSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTpJLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LGt0PShBLEksdCxlKT0+e2xldCBnLHIsaSxzPXt9O2lmKEk9SXx8e30sQT09bnVsbClyZXR1cm4gSTtkb3tmb3IoZz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxyPWcubGVuZ3RoO3ItLSA+MDspaT1nW3JdLCghZXx8ZShpLEEsSSkpJiYhc1tpXSYmKElbaV09QVtpXSxzW2ldPSEwKTtBPXQhPT0hMSYmTkEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsSSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIEl9LEx0PShBLEksdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1JLmxlbmd0aDtsZXQgZT1BLmluZGV4T2YoSSx0KTtyZXR1cm4gZSE9PS0xJiZlPT09dH0sSnQ9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHEoQSkpcmV0dXJuIEE7bGV0IEk9QS5sZW5ndGg7aWYoIUJJKEkpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShJKTtmb3IoO0ktLSA+MDspdFtJXT1BW0ldO3JldHVybiB0fSxIdD0oQT0+ST0+QSYmSSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmTkEoVWludDhBcnJheSkpLFl0PShBLEkpPT57bGV0IGU9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxnO2Zvcig7KGc9ZS5uZXh0KCkpJiYhZy5kb25lOyl7bGV0IHI9Zy52YWx1ZTtJLmNhbGwoQSxyWzBdLHJbMV0pfX0sYnQ9KEEsSSk9PntsZXQgdCxlPVtdO2Zvcig7KHQ9QS5leGVjKEkpKSE9PW51bGw7KWUucHVzaCh0KTtyZXR1cm4gZX0sTXQ9VSgiSFRNTEZvcm1FbGVtZW50IikscXQ9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24odCxlLGcpe3JldHVybiBlLnRvVXBwZXJDYXNlKCkrZ30pLHJJPSgoe2hhc093blByb3BlcnR5OkF9KT0+KEksdCk9PkEuY2FsbChJLHQpKShPYmplY3QucHJvdG90eXBlKSxLdD1VKCJSZWdFeHAiKSxRST0oQSxJKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLGU9e307Vih0LChnLHIpPT57bGV0IGk7KGk9SShnLHIsQSkpIT09ITEmJihlW3JdPWl8fGcpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxlKX0sT3Q9QT0+e1FJKEEsKEksdCk9PntpZihTKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YodCkhPT0tMSlyZXR1cm4hMTtsZXQgZT1BW3RdO2lmKFMoZSkpe2lmKEkuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gSSl7SS53cml0YWJsZT0hMTtyZXR1cm59SS5zZXR8fChJLnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrdCsiXCciKX0pfX0pfSxUdD0oQSxJKT0+e2xldCB0PXt9LGU9Zz0+e2cuZm9yRWFjaChyPT57dFtyXT0hMH0pfTtyZXR1cm4gcShBKT9lKEEpOmUoU3RyaW5nKEEpLnNwbGl0KEkpKSx0fSx4dD0oKT0+e30sUHQ9KEEsSSk9PihBPStBLE51bWJlci5pc0Zpbml0ZShBKT9BOkkpLFNBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsaUk9IjAxMjM0NTY3ODkiLEVJPXtESUdJVDppSSxBTFBIQTpTQSxBTFBIQV9ESUdJVDpTQStTQS50b1VwcGVyQ2FzZSgpK2lJfSxqdD0oQT0xNixJPUVJLkFMUEhBX0RJR0lUKT0+e2xldCB0PSIiLHtsZW5ndGg6ZX09STtmb3IoO0EtLTspdCs9SVtNYXRoLnJhbmRvbSgpKmV8MF07cmV0dXJuIHR9O2Z1bmN0aW9uIFd0KEEpe3JldHVybiEhKEEmJlMoQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBadD1BPT57bGV0IEk9bmV3IEFycmF5KDEwKSx0PShlLGcpPT57aWYobkEoZSkpe2lmKEkuaW5kZXhPZihlKT49MClyZXR1cm47aWYoISgidG9KU09OImluIGUpKXtJW2ddPWU7bGV0IHI9cShlKT9bXTp7fTtyZXR1cm4gVihlLChpLHMpPT57bGV0IGE9dChpLGcrMSk7IVooYSkmJihyW3NdPWEpfSksSVtnXT12b2lkIDAscn19cmV0dXJuIGV9O3JldHVybiB0KEEsMCl9LFZ0PVUoIkFzeW5jRnVuY3Rpb24iKSxYdD1BPT5BJiYobkEoQSl8fFMoQSkpJiZTKEEudGhlbikmJlMoQS5jYXRjaCksQj17aXNBcnJheTpxLGlzQXJyYXlCdWZmZXI6b0ksaXNCdWZmZXI6bHQsaXNGb3JtRGF0YTpGdCxpc0FycmF5QnVmZmVyVmlldzpEdCxpc1N0cmluZzp1dCxpc051bWJlcjpCSSxpc0Jvb2xlYW46aHQsaXNPYmplY3Q6bkEsaXNQbGFpbk9iamVjdDpCQSxpc1VuZGVmaW5lZDpaLGlzRGF0ZTpkdCxpc0ZpbGU6eXQsaXNCbG9iOnd0LGlzUmVnRXhwOkt0LGlzRnVuY3Rpb246Uyxpc1N0cmVhbTpwdCxpc1VSTFNlYXJjaFBhcmFtczpTdCxpc1R5cGVkQXJyYXk6SHQsaXNGaWxlTGlzdDptdCxmb3JFYWNoOlYsbWVyZ2U6UkEsZXh0ZW5kOk50LHRyaW06UnQsc3RyaXBCT006VXQsaW5oZXJpdHM6R3QsdG9GbGF0T2JqZWN0Omt0LGtpbmRPZjpDQSxraW5kT2ZUZXN0OlUsZW5kc1dpdGg6THQsdG9BcnJheTpKdCxmb3JFYWNoRW50cnk6WXQsbWF0Y2hBbGw6YnQsaXNIVE1MRm9ybTpNdCxoYXNPd25Qcm9wZXJ0eTpySSxoYXNPd25Qcm9wOnJJLHJlZHVjZURlc2NyaXB0b3JzOlFJLGZyZWV6ZU1ldGhvZHM6T3QsdG9PYmplY3RTZXQ6VHQsdG9DYW1lbENhc2U6cXQsbm9vcDp4dCx0b0Zpbml0ZU51bWJlcjpQdCxmaW5kS2V5OkNJLGdsb2JhbDpzSSxpc0NvbnRleHREZWZpbmVkOm5JLEFMUEhBQkVUOkVJLGdlbmVyYXRlU3RyaW5nOmp0LGlzU3BlY0NvbXBsaWFudEZvcm06V3QsdG9KU09OT2JqZWN0Olp0LGlzQXN5bmNGbjpWdCxpc1RoZW5hYmxlOlh0fTtmdW5jdGlvbiBLKEEsSSx0LGUsZyl7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIixJJiYodGhpcy5jb2RlPUkpLHQmJih0aGlzLmNvbmZpZz10KSxlJiYodGhpcy5yZXF1ZXN0PWUpLGcmJih0aGlzLnJlc3BvbnNlPWcpfUIuaW5oZXJpdHMoSyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOkIudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGFJPUsucHJvdG90eXBlLGNJPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e2NJW0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEssY0kpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShhSSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtLLmZyb209KEEsSSx0LGUsZyxyKT0+e2xldCBpPU9iamVjdC5jcmVhdGUoYUkpO3JldHVybiBCLnRvRmxhdE9iamVjdChBLGksZnVuY3Rpb24oYSl7cmV0dXJuIGEhPT1FcnJvci5wcm90b3R5cGV9LHM9PnMhPT0iaXNBeGlvc0Vycm9yIiksSy5jYWxsKGksQS5tZXNzYWdlLEksdCxlLGcpLGkuY2F1c2U9QSxpLm5hbWU9QS5uYW1lLHImJk9iamVjdC5hc3NpZ24oaSxyKSxpfTt2YXIgbD1LO3ZhciBRQT1udWxsO2Z1bmN0aW9uIFVBKEEpe3JldHVybiBCLmlzUGxhaW5PYmplY3QoQSl8fEIuaXNBcnJheShBKX1mdW5jdGlvbiBsSShBKXtyZXR1cm4gQi5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBmSShBLEksdCl7cmV0dXJuIEE/QS5jb25jYXQoSSkubWFwKGZ1bmN0aW9uKGcscil7cmV0dXJuIGc9bEkoZyksIXQmJnI/IlsiK2crIl0iOmd9KS5qb2luKHQ/Ii4iOiIiKTpJfWZ1bmN0aW9uIHp0KEEpe3JldHVybiBCLmlzQXJyYXkoQSkmJiFBLnNvbWUoVUEpfXZhciBfdD1CLnRvRmxhdE9iamVjdChCLHt9LG51bGwsZnVuY3Rpb24oSSl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KEkpfSk7ZnVuY3Rpb24gdnQoQSxJLHQpe2lmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO0k9SXx8bmV3KFFBfHxGb3JtRGF0YSksdD1CLnRvRmxhdE9iamVjdCh0LHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oYyx1KXtyZXR1cm4hQi5pc1VuZGVmaW5lZCh1W2NdKX0pO2xldCBlPXQubWV0YVRva2VucyxnPXQudmlzaXRvcnx8QyxyPXQuZG90cyxpPXQuaW5kZXhlcyxhPSh0LkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJkIuaXNTcGVjQ29tcGxpYW50Rm9ybShJKTtpZighQi5pc0Z1bmN0aW9uKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gUShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihCLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFhJiZCLmlzQmxvYihFKSl0aHJvdyBuZXcgbCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gQi5pc0FycmF5QnVmZmVyKEUpfHxCLmlzVHlwZWRBcnJheShFKT9hJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gQyhFLGMsdSl7bGV0IGQ9RTtpZihFJiYhdSYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihCLmVuZHNXaXRoKGMsInt9IikpYz1lP2M6Yy5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoQi5pc0FycmF5KEUpJiZ6dChFKXx8KEIuaXNGaWxlTGlzdChFKXx8Qi5lbmRzV2l0aChjLCJbXSIpKSYmKGQ9Qi50b0FycmF5KEUpKSlyZXR1cm4gYz1sSShjKSxkLmZvckVhY2goZnVuY3Rpb24oTixJdCl7IShCLmlzVW5kZWZpbmVkKE4pfHxOPT09bnVsbCkmJkkuYXBwZW5kKGk9PT0hMD9mSShbY10sSXQscik6aT09PW51bGw/YzpjKyJbXSIsUShOKSl9KSwhMX1yZXR1cm4gVUEoRSk/ITA6KEkuYXBwZW5kKGZJKHUsYyxyKSxRKEUpKSwhMSl9bGV0IG89W10sZj1PYmplY3QuYXNzaWduKF90LHtkZWZhdWx0VmlzaXRvcjpDLGNvbnZlcnRWYWx1ZTpRLGlzVmlzaXRhYmxlOlVBfSk7ZnVuY3Rpb24gbihFLGMpe2lmKCFCLmlzVW5kZWZpbmVkKEUpKXtpZihvLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrYy5qb2luKCIuIikpO28ucHVzaChFKSxCLmZvckVhY2goRSxmdW5jdGlvbihkLFIpeyghKEIuaXNVbmRlZmluZWQoZCl8fGQ9PT1udWxsKSYmZy5jYWxsKEksZCxCLmlzU3RyaW5nKFIpP1IudHJpbSgpOlIsYyxmKSk9PT0hMCYmbihkLGM/Yy5jb25jYXQoUik6W1JdKX0pLG8ucG9wKCl9fWlmKCFCLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbihBKSxJfXZhciBMPXZ0O2Z1bmN0aW9uIERJKEEpe2xldCBJPXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKGUpe3JldHVybiBJW2VdfSl9ZnVuY3Rpb24gdUkoQSxJKXt0aGlzLl9wYWlycz1bXSxBJiZMKEEsdGhpcyxJKX12YXIgaEk9dUkucHJvdG90eXBlO2hJLmFwcGVuZD1mdW5jdGlvbihJLHQpe3RoaXMuX3BhaXJzLnB1c2goW0ksdF0pfTtoSS50b1N0cmluZz1mdW5jdGlvbihJKXtsZXQgdD1JP2Z1bmN0aW9uKGUpe3JldHVybiBJLmNhbGwodGhpcyxlLERJKX06REk7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihnKXtyZXR1cm4gdChnWzBdKSsiPSIrdChnWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIEVBPXVJO2Z1bmN0aW9uICR0KEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIFgoQSxJLHQpe2lmKCFJKXJldHVybiBBO2xldCBlPXQmJnQuZW5jb2RlfHwkdCxnPXQmJnQuc2VyaWFsaXplLHI7aWYoZz9yPWcoSSx0KTpyPUIuaXNVUkxTZWFyY2hQYXJhbXMoSSk/SS50b1N0cmluZygpOm5ldyBFQShJLHQpLnRvU3RyaW5nKGUpLHIpe2xldCBpPUEuaW5kZXhPZigiJTIzIik7aSE9PS0xJiYoQT1BLnNsaWNlKDAsaSkpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK3J9cmV0dXJuIEF9dmFyIEdBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UoSSx0LGUpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDpJLHJlamVjdGVkOnQsc3luY2hyb25vdXM6ZT9lLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ZT9lLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QoSSl7dGhpcy5oYW5kbGVyc1tJXSYmKHRoaXMuaGFuZGxlcnNbSV09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaChJKXtCLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihlKXtlIT09bnVsbCYmSShlKX0pfX0sa0E9R0E7dmFyIGFBPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgZEk9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOkVBO3ZhciB5ST10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIHdJPXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIG1JPXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOmRJLEZvcm1EYXRhOnlJLEJsb2I6d0l9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgTEE9e307ZXQoTEEse2hhc0Jyb3dzZXJFbnY6KCk9PnBJLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+QWUsaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5JZX0pO3ZhciBwST10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBZT0oQT0+cEkmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxJZT10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI7dmFyIHc9ey4uLkxBLC4uLm1JfTtmdW5jdGlvbiBKQShBLEkpe3JldHVybiBMKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LGUsZyxyKXtyZXR1cm4gdy5pc05vZGUmJkIuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKGUsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpyLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LEkpKX1mdW5jdGlvbiB0ZShBKXtyZXR1cm4gQi5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKEk9PklbMF09PT0iW10iPyIiOklbMV18fElbMF0pfWZ1bmN0aW9uIGVlKEEpe2xldCBJPXt9LHQ9T2JqZWN0LmtleXMoQSksZSxnPXQubGVuZ3RoLHI7Zm9yKGU9MDtlPGc7ZSsrKXI9dFtlXSxJW3JdPUFbcl07cmV0dXJuIEl9ZnVuY3Rpb24gZ2UoQSl7ZnVuY3Rpb24gSSh0LGUsZyxyKXtsZXQgaT10W3IrK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBzPU51bWJlci5pc0Zpbml0ZSgraSksYT1yPj10Lmxlbmd0aDtyZXR1cm4gaT0haSYmQi5pc0FycmF5KGcpP2cubGVuZ3RoOmksYT8oQi5oYXNPd25Qcm9wKGcsaSk/Z1tpXT1bZ1tpXSxlXTpnW2ldPWUsIXMpOigoIWdbaV18fCFCLmlzT2JqZWN0KGdbaV0pKSYmKGdbaV09W10pLEkodCxlLGdbaV0scikmJkIuaXNBcnJheShnW2ldKSYmKGdbaV09ZWUoZ1tpXSkpLCFzKX1pZihCLmlzRm9ybURhdGEoQSkmJkIuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gQi5mb3JFYWNoRW50cnkoQSwoZSxnKT0+e0kodGUoZSksZyx0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgY0E9Z2U7ZnVuY3Rpb24gcmUoQSxJLHQpe2lmKEIuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihJfHxKU09OLnBhcnNlKShBKSxCLnRyaW0oQSl9Y2F0Y2goZSl7aWYoZS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBlfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIEhBPXt0cmFuc2l0aW9uYWw6YUEsYWRhcHRlcjpbInhociIsImh0dHAiXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihJLHQpe2xldCBlPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsZz1lLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxyPUIuaXNPYmplY3QoSSk7aWYociYmQi5pc0hUTUxGb3JtKEkpJiYoST1uZXcgRm9ybURhdGEoSSkpLEIuaXNGb3JtRGF0YShJKSlyZXR1cm4gZz9KU09OLnN0cmluZ2lmeShjQShJKSk6STtpZihCLmlzQXJyYXlCdWZmZXIoSSl8fEIuaXNCdWZmZXIoSSl8fEIuaXNTdHJlYW0oSSl8fEIuaXNGaWxlKEkpfHxCLmlzQmxvYihJKSlyZXR1cm4gSTtpZihCLmlzQXJyYXlCdWZmZXJWaWV3KEkpKXJldHVybiBJLmJ1ZmZlcjtpZihCLmlzVVJMU2VhcmNoUGFyYW1zKEkpKXJldHVybiB0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLEkudG9TdHJpbmcoKTtsZXQgcztpZihyKXtpZihlLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBKQShJLHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKHM9Qi5pc0ZpbGVMaXN0KEkpKXx8ZS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBhPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gTChzP3siZmlsZXNbXSI6SX06SSxhJiZuZXcgYSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIHJ8fGc/KHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxyZShJKSk6SX1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbihJKXtsZXQgdD10aGlzLnRyYW5zaXRpb25hbHx8SEEudHJhbnNpdGlvbmFsLGU9dCYmdC5mb3JjZWRKU09OUGFyc2luZyxnPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKEkmJkIuaXNTdHJpbmcoSSkmJihlJiYhdGhpcy5yZXNwb25zZVR5cGV8fGcpKXtsZXQgaT0hKHQmJnQuc2lsZW50SlNPTlBhcnNpbmcpJiZnO3RyeXtyZXR1cm4gSlNPTi5wYXJzZShJKX1jYXRjaChzKXtpZihpKXRocm93IHMubmFtZT09PSJTeW50YXhFcnJvciI/bC5mcm9tKHMsbC5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpzfX1yZXR1cm4gSX1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKEkpe3JldHVybiBJPj0yMDAmJkk8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07Qi5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntIQS5oZWFkZXJzW0FdPXt9fSk7dmFyIE89SEE7dmFyIGllPUIudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSksRkk9QT0+e2xldCBJPXt9LHQsZSxnO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2c9aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLGcpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLGU9aS5zdWJzdHJpbmcoZysxKS50cmltKCksISghdHx8SVt0XSYmaWVbdF0pJiYodD09PSJzZXQtY29va2llIj9JW3RdP0lbdF0ucHVzaChlKTpJW3RdPVtlXTpJW3RdPUlbdF0/SVt0XSsiLCAiK2U6ZSl9KSxJfTt2YXIgU0k9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiB6KEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gZkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOkIuaXNBcnJheShBKT9BLm1hcChmQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIG9lKEEpe2xldCBJPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLGU7Zm9yKDtlPXQuZXhlYyhBKTspSVtlWzFdXT1lWzJdO3JldHVybiBJfXZhciBCZT1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBZQShBLEksdCxlLGcpe2lmKEIuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMsSSx0KTtpZihnJiYoST10KSwhIUIuaXNTdHJpbmcoSSkpe2lmKEIuaXNTdHJpbmcoZSkpcmV0dXJuIEkuaW5kZXhPZihlKSE9PS0xO2lmKEIuaXNSZWdFeHAoZSkpcmV0dXJuIGUudGVzdChJKX19ZnVuY3Rpb24gQ2UoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLChJLHQsZSk9PnQudG9VcHBlckNhc2UoKStlKX1mdW5jdGlvbiBzZShBLEkpe2xldCB0PUIudG9DYW1lbENhc2UoIiAiK0kpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChlPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsZSt0LHt2YWx1ZTpmdW5jdGlvbihnLHIsaSl7cmV0dXJuIHRoaXNbZV0uY2FsbCh0aGlzLEksZyxyLGkpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBUPWNsYXNze2NvbnN0cnVjdG9yKEkpe0kmJnRoaXMuc2V0KEkpfXNldChJLHQsZSl7bGV0IGc9dGhpcztmdW5jdGlvbiByKHMsYSxRKXtsZXQgQz16KGEpO2lmKCFDKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgbz1CLmZpbmRLZXkoZyxDKTsoIW98fGdbb109PT12b2lkIDB8fFE9PT0hMHx8UT09PXZvaWQgMCYmZ1tvXSE9PSExKSYmKGdbb3x8YV09ZkEocykpfWxldCBpPShzLGEpPT5CLmZvckVhY2gocywoUSxDKT0+cihRLEMsYSkpO3JldHVybiBCLmlzUGxhaW5PYmplY3QoSSl8fEkgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yP2koSSx0KTpCLmlzU3RyaW5nKEkpJiYoST1JLnRyaW0oKSkmJiFCZShJKT9pKEZJKEkpLHQpOkkhPW51bGwmJnIodCxJLGUpLHRoaXN9Z2V0KEksdCl7aWYoST16KEkpLEkpe2xldCBlPUIuZmluZEtleSh0aGlzLEkpO2lmKGUpe2xldCBnPXRoaXNbZV07aWYoIXQpcmV0dXJuIGc7aWYodD09PSEwKXJldHVybiBvZShnKTtpZihCLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLGcsZSk7aWYoQi5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKGcpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoSSx0KXtpZihJPXooSSksSSl7bGV0IGU9Qi5maW5kS2V5KHRoaXMsSSk7cmV0dXJuISEoZSYmdGhpc1tlXSE9PXZvaWQgMCYmKCF0fHxZQSh0aGlzLHRoaXNbZV0sZSx0KSkpfXJldHVybiExfWRlbGV0ZShJLHQpe2xldCBlPXRoaXMsZz0hMTtmdW5jdGlvbiByKGkpe2lmKGk9eihpKSxpKXtsZXQgcz1CLmZpbmRLZXkoZSxpKTtzJiYoIXR8fFlBKGUsZVtzXSxzLHQpKSYmKGRlbGV0ZSBlW3NdLGc9ITApfX1yZXR1cm4gQi5pc0FycmF5KEkpP0kuZm9yRWFjaChyKTpyKEkpLGd9Y2xlYXIoSSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcyksZT10Lmxlbmd0aCxnPSExO2Zvcig7ZS0tOyl7bGV0IHI9dFtlXTsoIUl8fFlBKHRoaXMsdGhpc1tyXSxyLEksITApKSYmKGRlbGV0ZSB0aGlzW3JdLGc9ITApfXJldHVybiBnfW5vcm1hbGl6ZShJKXtsZXQgdD10aGlzLGU9e307cmV0dXJuIEIuZm9yRWFjaCh0aGlzLChnLHIpPT57bGV0IGk9Qi5maW5kS2V5KGUscik7aWYoaSl7dFtpXT1mQShnKSxkZWxldGUgdFtyXTtyZXR1cm59bGV0IHM9ST9DZShyKTpTdHJpbmcocikudHJpbSgpO3MhPT1yJiZkZWxldGUgdFtyXSx0W3NdPWZBKGcpLGVbc109ITB9KSx0aGlzfWNvbmNhdCguLi5JKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5JKX10b0pTT04oSSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gQi5mb3JFYWNoKHRoaXMsKGUsZyk9PntlIT1udWxsJiZlIT09ITEmJih0W2ddPUkmJkIuaXNBcnJheShlKT9lLmpvaW4oIiwgIik6ZSl9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtJLHRdKT0+SSsiOiAiK3QpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oSSl7cmV0dXJuIEkgaW5zdGFuY2VvZiB0aGlzP0k6bmV3IHRoaXMoSSl9c3RhdGljIGNvbmNhdChJLC4uLnQpe2xldCBlPW5ldyB0aGlzKEkpO3JldHVybiB0LmZvckVhY2goZz0+ZS5zZXQoZykpLGV9c3RhdGljIGFjY2Vzc29yKEkpe2xldCBlPSh0aGlzW1NJXT10aGlzW1NJXT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLGc9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gcihpKXtsZXQgcz16KGkpO2Vbc118fChzZShnLGkpLGVbc109ITApfXJldHVybiBCLmlzQXJyYXkoSSk/SS5mb3JFYWNoKHIpOnIoSSksdGhpc319O1QuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO0IucmVkdWNlRGVzY3JpcHRvcnMoVC5wcm90b3R5cGUsKHt2YWx1ZTpBfSxJKT0+e2xldCB0PUlbMF0udG9VcHBlckNhc2UoKStJLnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KGUpe3RoaXNbdF09ZX19fSk7Qi5mcmVlemVNZXRob2RzKFQpO3ZhciBtPVQ7ZnVuY3Rpb24gXyhBLEkpe2xldCB0PXRoaXN8fE8sZT1JfHx0LGc9bS5mcm9tKGUuaGVhZGVycykscj1lLmRhdGE7cmV0dXJuIEIuZm9yRWFjaChBLGZ1bmN0aW9uKHMpe3I9cy5jYWxsKHQscixnLm5vcm1hbGl6ZSgpLEk/SS5zdGF0dXM6dm9pZCAwKX0pLGcubm9ybWFsaXplKCkscn1mdW5jdGlvbiB2KEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gUkkoQSxJLHQpe2wuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsbC5FUlJfQ0FOQ0VMRUQsSSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifUIuaW5oZXJpdHMoUkksbCx7X19DQU5DRUxfXzohMH0pO3ZhciBKPVJJO2Z1bmN0aW9uIGJBKEEsSSx0KXtsZXQgZT10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFlfHxlKHQuc3RhdHVzKT9BKHQpOkkobmV3IGwoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbbC5FUlJfQkFEX1JFUVVFU1QsbC5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX12YXIgTkk9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsSSx0LGUsZyxyKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KEkpXTtCLmlzTnVtYmVyKHQpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxCLmlzU3RyaW5nKGUpJiZpLnB1c2goInBhdGg9IitlKSxCLmlzU3RyaW5nKGcpJiZpLnB1c2goImRvbWFpbj0iK2cpLHI9PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBJPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gST9kZWNvZGVVUklDb21wb25lbnQoSVszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBNQShBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiBxQShBLEkpe3JldHVybiBJP0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrSS5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gJChBLEkpe3JldHVybiBBJiYhTUEoSSk/cUEoQSxJKTpJfXZhciBVST13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCBJPS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksZTtmdW5jdGlvbiBnKHIpe2xldCBpPXI7cmV0dXJuIEkmJih0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSksaT10LmhyZWYpLHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSx7aHJlZjp0LmhyZWYscHJvdG9jb2w6dC5wcm90b2NvbD90LnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDp0Lmhvc3Qsc2VhcmNoOnQuc2VhcmNoP3Quc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOnQuaG9zdG5hbWUscG9ydDp0LnBvcnQscGF0aG5hbWU6dC5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/dC5wYXRobmFtZToiLyIrdC5wYXRobmFtZX19cmV0dXJuIGU9Zyh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oaSl7bGV0IHM9Qi5pc1N0cmluZyhpKT9nKGkpOmk7cmV0dXJuIHMucHJvdG9jb2w9PT1lLnByb3RvY29sJiZzLmhvc3Q9PT1lLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO2Z1bmN0aW9uIEtBKEEpe2xldCBJPS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiBJJiZJWzFdfHwiIn1mdW5jdGlvbiBuZShBLEkpe0E9QXx8MTA7bGV0IHQ9bmV3IEFycmF5KEEpLGU9bmV3IEFycmF5KEEpLGc9MCxyPTAsaTtyZXR1cm4gST1JIT09dm9pZCAwP0k6MWUzLGZ1bmN0aW9uKGEpe2xldCBRPURhdGUubm93KCksQz1lW3JdO2l8fChpPVEpLHRbZ109YSxlW2ddPVE7bGV0IG89cixmPTA7Zm9yKDtvIT09ZzspZis9dFtvKytdLG89byVBO2lmKGc9KGcrMSklQSxnPT09ciYmKHI9KHIrMSklQSksUS1pPEkpcmV0dXJuO2xldCBuPUMmJlEtQztyZXR1cm4gbj9NYXRoLnJvdW5kKGYqMWUzL24pOnZvaWQgMH19dmFyIEdJPW5lO2Z1bmN0aW9uIGtJKEEsSSl7bGV0IHQ9MCxlPUdJKDUwLDI1MCk7cmV0dXJuIGc9PntsZXQgcj1nLmxvYWRlZCxpPWcubGVuZ3RoQ29tcHV0YWJsZT9nLnRvdGFsOnZvaWQgMCxzPXItdCxhPWUocyksUT1yPD1pO3Q9cjtsZXQgQz17bG9hZGVkOnIsdG90YWw6aSxwcm9ncmVzczppP3IvaTp2b2lkIDAsYnl0ZXM6cyxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmaSYmUT8oaS1yKS9hOnZvaWQgMCxldmVudDpnfTtDW0k/ImRvd25sb2FkIjoidXBsb2FkIl09ITAsQShDKX19dmFyIFFlPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsTEk9UWUmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LGUpe2xldCBnPUEuZGF0YSxyPW0uZnJvbShBLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6aSx3aXRoWFNSRlRva2VuOnN9PUEsYTtmdW5jdGlvbiBRKCl7QS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxBLnNpZ25hbCYmQS5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBDO2lmKEIuaXNGb3JtRGF0YShnKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KXIuc2V0Q29udGVudFR5cGUoITEpO2Vsc2UgaWYoKEM9ci5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYywuLi51XT1DP0Muc3BsaXQoIjsiKS5tYXAoZD0+ZC50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtyLnNldENvbnRlbnRUeXBlKFtjfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4udV0uam9pbigiOyAiKSl9fWxldCBvPW5ldyBYTUxIdHRwUmVxdWVzdDtpZihBLmF1dGgpe2xldCBjPUEuYXV0aC51c2VybmFtZXx8IiIsdT1BLmF1dGgucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEEuYXV0aC5wYXNzd29yZCkpOiIiO3Iuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKGMrIjoiK3UpKX1sZXQgZj0kKEEuYmFzZVVSTCxBLnVybCk7by5vcGVuKEEubWV0aG9kLnRvVXBwZXJDYXNlKCksWChmLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksITApLG8udGltZW91dD1BLnRpbWVvdXQ7ZnVuY3Rpb24gbigpe2lmKCFvKXJldHVybjtsZXQgYz1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBvJiZvLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxkPXtkYXRhOiFpfHxpPT09InRleHQifHxpPT09Impzb24iP28ucmVzcG9uc2VUZXh0Om8ucmVzcG9uc2Usc3RhdHVzOm8uc3RhdHVzLHN0YXR1c1RleHQ6by5zdGF0dXNUZXh0LGhlYWRlcnM6Yyxjb25maWc6QSxyZXF1ZXN0Om99O2JBKGZ1bmN0aW9uKE4pe3QoTiksUSgpfSxmdW5jdGlvbihOKXtlKE4pLFEoKX0sZCksbz1udWxsfWlmKCJvbmxvYWRlbmQiaW4gbz9vLm9ubG9hZGVuZD1uOm8ub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IW98fG8ucmVhZHlTdGF0ZSE9PTR8fG8uc3RhdHVzPT09MCYmIShvLnJlc3BvbnNlVVJMJiZvLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChuKX0sby5vbmFib3J0PWZ1bmN0aW9uKCl7byYmKGUobmV3IGwoIlJlcXVlc3QgYWJvcnRlZCIsbC5FQ09OTkFCT1JURUQsQSxvKSksbz1udWxsKX0sby5vbmVycm9yPWZ1bmN0aW9uKCl7ZShuZXcgbCgiTmV0d29yayBFcnJvciIsbC5FUlJfTkVUV09SSyxBLG8pKSxvPW51bGx9LG8ub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IHU9QS50aW1lb3V0PyJ0aW1lb3V0IG9mICIrQS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLGQ9QS50cmFuc2l0aW9uYWx8fGFBO0EudGltZW91dEVycm9yTWVzc2FnZSYmKHU9QS50aW1lb3V0RXJyb3JNZXNzYWdlKSxlKG5ldyBsKHUsZC5jbGFyaWZ5VGltZW91dEVycm9yP2wuRVRJTUVET1VUOmwuRUNPTk5BQk9SVEVELEEsbykpLG89bnVsbH0sdy5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihzJiZCLmlzRnVuY3Rpb24ocykmJihzPXMoQSkpLHN8fHMhPT0hMSYmVUkoZikpKXtsZXQgYz1BLnhzcmZIZWFkZXJOYW1lJiZBLnhzcmZDb29raWVOYW1lJiZOSS5yZWFkKEEueHNyZkNvb2tpZU5hbWUpO2MmJnIuc2V0KEEueHNyZkhlYWRlck5hbWUsYyl9Zz09PXZvaWQgMCYmci5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBvJiZCLmZvckVhY2goci50b0pTT04oKSxmdW5jdGlvbih1LGQpe28uc2V0UmVxdWVzdEhlYWRlcihkLHUpfSksQi5pc1VuZGVmaW5lZChBLndpdGhDcmVkZW50aWFscyl8fChvLndpdGhDcmVkZW50aWFscz0hIUEud2l0aENyZWRlbnRpYWxzKSxpJiZpIT09Impzb24iJiYoby5yZXNwb25zZVR5cGU9QS5yZXNwb25zZVR5cGUpLHR5cGVvZiBBLm9uRG93bmxvYWRQcm9ncmVzcz09ImZ1bmN0aW9uIiYmby5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsa0koQS5vbkRvd25sb2FkUHJvZ3Jlc3MsITApKSx0eXBlb2YgQS5vblVwbG9hZFByb2dyZXNzPT0iZnVuY3Rpb24iJiZvLnVwbG9hZCYmby51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGtJKEEub25VcGxvYWRQcm9ncmVzcykpLChBLmNhbmNlbFRva2VufHxBLnNpZ25hbCkmJihhPWM9PntvJiYoZSghY3x8Yy50eXBlP25ldyBKKG51bGwsQSxvKTpjKSxvLmFib3J0KCksbz1udWxsKX0sQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksQS5zaWduYWwmJihBLnNpZ25hbC5hYm9ydGVkP2EoKTpBLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRT1LQShmKTtpZihFJiZ3LnByb3RvY29scy5pbmRleE9mKEUpPT09LTEpe2UobmV3IGwoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrRSsiOiIsbC5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1vLnNlbmQoZ3x8bnVsbCl9KX07dmFyIE9BPXtodHRwOlFBLHhocjpMSX07Qi5mb3JFYWNoKE9BLChBLEkpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6SX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTpJfSl9fSk7dmFyIEpJPUE9PmAtICR7QX1gLEVlPUE9PkIuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxsQT17Z2V0QWRhcHRlcjpBPT57QT1CLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDpJfT1BLHQsZSxnPXt9O2ZvcihsZXQgcj0wO3I8STtyKyspe3Q9QVtyXTtsZXQgaTtpZihlPXQsIUVlKHQpJiYoZT1PQVsoaT1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLGU9PT12b2lkIDApKXRocm93IG5ldyBsKGBVbmtub3duIGFkYXB0ZXIgXCcke2l9XCdgKTtpZihlKWJyZWFrO2dbaXx8IiUyMyIrcl09ZX1pZighZSl7bGV0IHI9T2JqZWN0LmVudHJpZXMoZykubWFwKChbcyxhXSk9PmBhZGFwdGVyICR7c30gYCsoYT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ST9yLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtyLm1hcChKSSkuam9pbihgJTBBYCk6IiAiK0pJKHJbMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IGwoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitpLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gZX0sYWRhcHRlcnM6T0F9O2Z1bmN0aW9uIFRBKEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBKKG51bGwsQSl9ZnVuY3Rpb24gREEoQSl7cmV0dXJuIFRBKEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9Xy5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksbEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fE8uYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gVEEoQSksZS5kYXRhPV8uY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsZSksZS5oZWFkZXJzPW0uZnJvbShlLmhlYWRlcnMpLGV9LGZ1bmN0aW9uKGUpe3JldHVybiB2KGUpfHwoVEEoQSksZSYmZS5yZXNwb25zZSYmKGUucmVzcG9uc2UuZGF0YT1fLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLGUucmVzcG9uc2UpLGUucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oZS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KGUpfSl9dmFyIEhJPUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIEcoQSxJKXtJPUl8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIGUoUSxDLG8pe3JldHVybiBCLmlzUGxhaW5PYmplY3QoUSkmJkIuaXNQbGFpbk9iamVjdChDKT9CLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOm99LFEsQyk6Qi5pc1BsYWluT2JqZWN0KEMpP0IubWVyZ2Uoe30sQyk6Qi5pc0FycmF5KEMpP0Muc2xpY2UoKTpDfWZ1bmN0aW9uIGcoUSxDLG8pe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRLG8pfWVsc2UgcmV0dXJuIGUoUSxDLG8pfWZ1bmN0aW9uIHIoUSxDKXtpZighQi5pc1VuZGVmaW5lZChDKSlyZXR1cm4gZSh2b2lkIDAsQyl9ZnVuY3Rpb24gaShRLEMpe2lmKEIuaXNVbmRlZmluZWQoQykpe2lmKCFCLmlzVW5kZWZpbmVkKFEpKXJldHVybiBlKHZvaWQgMCxRKX1lbHNlIHJldHVybiBlKHZvaWQgMCxDKX1mdW5jdGlvbiBzKFEsQyxvKXtpZihvIGluIEkpcmV0dXJuIGUoUSxDKTtpZihvIGluIEEpcmV0dXJuIGUodm9pZCAwLFEpfWxldCBhPXt1cmw6cixtZXRob2Q6cixkYXRhOnIsYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOnMsaGVhZGVyczooUSxDKT0+ZyhISShRKSxISShDKSwhMCl9O3JldHVybiBCLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLEkpKSxmdW5jdGlvbihDKXtsZXQgbz1hW0NdfHxnLGY9byhBW0NdLElbQ10sQyk7Qi5pc1VuZGVmaW5lZChmKSYmbyE9PXN8fCh0W0NdPWYpfSksdH12YXIgdUE9IjEuNi44Ijt2YXIgeEE9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLEkpPT57eEFbQV09ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT09QXx8ImEiKyhJPDE/Im4gIjoiICIpK0F9fSk7dmFyIFlJPXt9O3hBLnRyYW5zaXRpb25hbD1mdW5jdGlvbihJLHQsZSl7ZnVuY3Rpb24gZyhyLGkpe3JldHVybiJbQXhpb3MgdiIrdUErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrcisiXCciK2krKGU/Ii4gIitlOiIiKX1yZXR1cm4ocixpLHMpPT57aWYoST09PSExKXRocm93IG5ldyBsKGcoaSwiIGhhcyBiZWVuIHJlbW92ZWQiKyh0PyIgaW4gIit0OiIiKSksbC5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIHQmJiFZSVtpXSYmKFlJW2ldPSEwLGNvbnNvbGUud2FybihnKGksIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK3QrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksST9JKHIsaSxzKTohMH19O2Z1bmN0aW9uIGFlKEEsSSx0KXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IGwoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLGwuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBlPU9iamVjdC5rZXlzKEEpLGc9ZS5sZW5ndGg7Zm9yKDtnLS0gPjA7KXtsZXQgcj1lW2ddLGk9SVtyXTtpZihpKXtsZXQgcz1BW3JdLGE9cz09PXZvaWQgMHx8aShzLHIsQSk7aWYoYSE9PSEwKXRocm93IG5ldyBsKCJvcHRpb24gIityKyIgbXVzdCBiZSAiK2EsbC5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYodCE9PSEwKXRocm93IG5ldyBsKCJVbmtub3duIG9wdGlvbiAiK3IsbC5FUlJfQkFEX09QVElPTil9fXZhciBoQT17YXNzZXJ0T3B0aW9uczphZSx2YWxpZGF0b3JzOnhBfTt2YXIgSD1oQS52YWxpZGF0b3JzLHg9Y2xhc3N7Y29uc3RydWN0b3IoSSl7dGhpcy5kZWZhdWx0cz1JLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBrQSxyZXNwb25zZTpuZXcga0F9fWFzeW5jIHJlcXVlc3QoSSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoSSx0KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBnO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGc9e30pOmc9bmV3IEVycm9yO2xldCByPWcuc3RhY2s/Zy5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjtlLnN0YWNrP3ImJiFTdHJpbmcoZS5zdGFjaykuZW5kc1dpdGgoci5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKGUuc3RhY2srPWAlMEFgK3IpOmUuc3RhY2s9cn10aHJvdyBlfX1fcmVxdWVzdChJLHQpe3R5cGVvZiBJPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1JKTp0PUl8fHt9LHQ9Ryh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6ZSxwYXJhbXNTZXJpYWxpemVyOmcsaGVhZGVyczpyfT10O2UhPT12b2lkIDAmJmhBLmFzc2VydE9wdGlvbnMoZSx7c2lsZW50SlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKX0sITEpLGchPW51bGwmJihCLmlzRnVuY3Rpb24oZyk/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6Z306aEEuYXNzZXJ0T3B0aW9ucyhnLHtlbmNvZGU6SC5mdW5jdGlvbixzZXJpYWxpemU6SC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1yJiZCLm1lcmdlKHIuY29tbW9uLHJbdC5tZXRob2RdKTtyJiZCLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSByW0VdfSksdC5oZWFkZXJzPW0uY29uY2F0KGkscik7bGV0IHM9W10sYT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oYyl7dHlwZW9mIGMucnVuV2hlbj09ImZ1bmN0aW9uIiYmYy5ydW5XaGVuKHQpPT09ITF8fChhPWEmJmMuc3luY2hyb25vdXMscy51bnNoaWZ0KGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpKX0pO2xldCBRPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oYyl7US5wdXNoKGMuZnVsZmlsbGVkLGMucmVqZWN0ZWQpfSk7bGV0IEMsbz0wLGY7aWYoIWEpe2xldCBFPVtEQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLHMpLEUucHVzaC5hcHBseShFLFEpLGY9RS5sZW5ndGgsQz1Qcm9taXNlLnJlc29sdmUodCk7bzxmOylDPUMudGhlbihFW28rK10sRVtvKytdKTtyZXR1cm4gQ31mPXMubGVuZ3RoO2xldCBuPXQ7Zm9yKG89MDtvPGY7KXtsZXQgRT1zW28rK10sYz1zW28rK107dHJ5e249RShuKX1jYXRjaCh1KXtjLmNhbGwodGhpcyx1KTticmVha319dHJ5e0M9REEuY2FsbCh0aGlzLG4pfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iobz0wLGY9US5sZW5ndGg7bzxmOylDPUMudGhlbihRW28rK10sUVtvKytdKTtyZXR1cm4gQ31nZXRVcmkoSSl7ST1HKHRoaXMuZGVmYXVsdHMsSSk7bGV0IHQ9JChJLmJhc2VVUkwsSS51cmwpO3JldHVybiBYKHQsSS5wYXJhbXMsSS5wYXJhbXNTZXJpYWxpemVyKX19O0IuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oSSl7eC5wcm90b3R5cGVbSV09ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoZXx8e30se21ldGhvZDpJLHVybDp0LGRhdGE6KGV8fHt9KS5kYXRhfSkpfX0pO0IuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKEkpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KEcoc3x8e30se21ldGhvZDpJLGhlYWRlcnM6ZT97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6cixkYXRhOml9KSl9fXgucHJvdG90eXBlW0ldPXQoKSx4LnByb3RvdHlwZVtJKyJGb3JtIl09dCghMCl9KTt2YXIgQUE9eDt2YXIgUEE9Y2xhc3MgQXtjb25zdHJ1Y3RvcihJKXtpZih0eXBlb2YgSSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHIpe3Q9cn0pO2xldCBlPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4oZz0+e2lmKCFlLl9saXN0ZW5lcnMpcmV0dXJuO2xldCByPWUuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtyLS0gPjA7KWUuX2xpc3RlbmVyc1tyXShnKTtlLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPWc9PntsZXQgcixpPW5ldyBQcm9taXNlKHM9PntlLnN1YnNjcmliZShzKSxyPXN9KS50aGVuKGcpO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe2UudW5zdWJzY3JpYmUocil9LGl9LEkoZnVuY3Rpb24ocixpLHMpe2UucmVhc29ufHwoZS5yZWFzb249bmV3IEoocixpLHMpLHQoZS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoSSl7aWYodGhpcy5yZWFzb24pe0kodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goSSk6dGhpcy5fbGlzdGVuZXJzPVtJXX11bnN1YnNjcmliZShJKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihJKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IEk7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKGcpe0k9Z30pLGNhbmNlbDpJfX19LGJJPVBBO2Z1bmN0aW9uIGpBKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBXQShBKXtyZXR1cm4gQi5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgWkE9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKFpBKS5mb3JFYWNoKChbQSxJXSk9PntaQVtJXT1BfSk7dmFyIE1JPVpBO2Z1bmN0aW9uIHFJKEEpe2xldCBJPW5ldyBBQShBKSx0PVcoQUEucHJvdG90eXBlLnJlcXVlc3QsSSk7cmV0dXJuIEIuZXh0ZW5kKHQsQUEucHJvdG90eXBlLEkse2FsbE93bktleXM6ITB9KSxCLmV4dGVuZCh0LEksbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKGcpe3JldHVybiBxSShHKEEsZykpfSx0fXZhciBoPXFJKE8pO2guQXhpb3M9QUE7aC5DYW5jZWxlZEVycm9yPUo7aC5DYW5jZWxUb2tlbj1iSTtoLmlzQ2FuY2VsPXY7aC5WRVJTSU9OPXVBO2gudG9Gb3JtRGF0YT1MO2guQXhpb3NFcnJvcj1sO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbihJKXtyZXR1cm4gUHJvbWlzZS5hbGwoSSl9O2guc3ByZWFkPWpBO2guaXNBeGlvc0Vycm9yPVdBO2gubWVyZ2VDb25maWc9RztoLkF4aW9zSGVhZGVycz1tO2guZm9ybVRvSlNPTj1BPT5jQShCLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1sQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9TUk7aC5kZWZhdWx0PWg7dmFyIGRBPWg7dmFye0F4aW9zOm9pLEF4aW9zRXJyb3I6QmksQ2FuY2VsZWRFcnJvcjpDaSxpc0NhbmNlbDpzaSxDYW5jZWxUb2tlbjpuaSxWRVJTSU9OOlFpLGFsbDpFaSxDYW5jZWw6YWksaXNBeGlvc0Vycm9yOmNpLHNwcmVhZDpmaSx0b0Zvcm1EYXRhOmxpLEF4aW9zSGVhZGVyczpEaSxIdHRwU3RhdHVzQ29kZTp1aSxmb3JtVG9KU09OOmhpLGdldEFkYXB0ZXI6ZGksbWVyZ2VDb25maWc6eWl9PWRBO3ZhciBJQSxrLFhBLFZBPXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7WEE9bmV3IFVpbnQ4QXJyYXkoay5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LHlBPWNsYXNze2luaXQoKXtyZXR1cm4gSUF8fCh0eXBlb2YgZmV0Y2g8InUiP0lBPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrS0kpLnRoZW4oST0+SS5hcnJheUJ1ZmZlcigpKS50aGVuKEk9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEksVkEpKS50aGVuKHRoaXMuX2luaXQpOklBPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKEtJLCJiYXNlNjQiKSxWQSkudGhlbih0aGlzLl9pbml0KSxJQSl9X2luaXQoSSl7az1JLmluc3RhbmNlLFZBLmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZShJLHQ9MCl7aWYoIWspdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IGU9SS5ieXRlTGVuZ3RoLGc9ay5leHBvcnRzLm1hbGxvYyhlKTtYQS5zZXQoSSxnKSx0PXR8fE51bWJlcihrLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShnLGUpKTtsZXQgcj1rLmV4cG9ydHMubWFsbG9jKHQpLGk9ay5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhyLHQsZyxlKSxzPVhBLnNsaWNlKHIscitpKTtyZXR1cm4gay5leHBvcnRzLmZyZWUoZyksay5leHBvcnRzLmZyZWUociksc319LEtJPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIE9JPW5ldyB5QSxUST0hMTthc3luYyBmdW5jdGlvbiBjZShBLEksdCl7bGV0IGU9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ZT1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ZT1BOmU9YCR7SX0vJHtBfWAsZS5lbmRzV2l0aCgiLmpzIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtMykpLGUuZW5kc1dpdGgoIi53YXNtIikmJihlPWUuc3Vic3RyaW5nKDAsZS5sZW5ndGgtNSkpO2xldCBnPWAke2V9Lndhc21gLHI9YXdhaXQgZEEuZ2V0KGAke2d9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSk7VEl8fChhd2FpdCBPSS5pbml0KCksVEk9ITApO2xldCBzPU9JLmRlY29kZShuZXcgVWludDhBcnJheShyLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtlfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OnN9KX12YXIgeEk9Y2U7dmFyIHdBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gZmUoQSxJLHQpe2xldCBlPUEsZz1BLHI9bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoZT1uZXcgVVJMKEEuaHJlZiksZz1lLmhyZWYpLHdBLmhhcyhnKT9yPWF3YWl0IHdBLmdldChnKTood0Euc2V0KGcseEkoZSxJLHQpKSxyPWF3YWl0IHdBLmdldChnKSkscn12YXIgUEk9ZmU7dmFyIGxlPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtOiJUcmFuc2Zvcm0iLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEQ9bGU7dmFyIERlPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1EZTt2YXIgdWU9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFA9dWU7ZnVuY3Rpb24gaGUoQSxJKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDg6e3Q9bmV3IEludDhBcnJheShJKTticmVha31jYXNlIHAuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShJKTticmVha31jYXNlIHAuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KEkpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KEkpOnQ9bmV3IFVpbnQ4QXJyYXkoSSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoSSk6dD1uZXcgVWludDhBcnJheShJKTticmVha31jYXNlIFAuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KEkpO2JyZWFrfWNhc2UgUC5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoSSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFk9aGU7dmFyIFpJPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLGpJPW5ldyBUZXh0RW5jb2RlcixXST1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gZGUoQSxJKXtsZXQgdD17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxlPUEuZnNfb3BlbihJLHQuZmxhZ3MpLHI9QS5mc19zdGF0KEkpLnNpemUsaT1udWxsO1pJP2k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOmk9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBzPW5ldyBVaW50OEFycmF5KGkpO3JldHVybiBBLmZzX3JlYWQoZSxzLDAsciwwKSxBLmZzX2Nsb3NlKGUpLHN9ZnVuY3Rpb24gVkkoQSxJLHQpe2xldCBlPW51bGw7Wkk/ZT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIodCk6ZT1uZXcgQXJyYXlCdWZmZXIodCk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoZSkscj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsSSx0KTtyZXR1cm4gZy5zZXQociksZ31mdW5jdGlvbiB5KEEsSSx0LGUpe2xldCBnPTA7cmV0dXJuIEkhPT1udWxsJiYoZz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGUsSS5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheShJLmJ1ZmZlciksZykpLGd9ZnVuY3Rpb24gaihBLEksdCl7bGV0IGU9SlNPTi5zdHJpbmdpZnkoSSksZz1BLmxlbmd0aEJ5dGVzVVRGOChlKSsxLHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGddKTtBLnN0cmluZ1RvVVRGOChlLHIsZyl9ZnVuY3Rpb24gRihBLEksdCxlKXtsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxJLHRdKSxyPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEksdF0pLGk9VkkoQSxnLHIpO3JldHVybiBZKGUsaS5idWZmZXIpfWZ1bmN0aW9uIHpBKEEsSSl7bGV0IHQ9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCxJXSksZT1BLlVURjhUb1N0cmluZyh0KTtyZXR1cm4gSlNPTi5wYXJzZShlKX1mdW5jdGlvbiB5ZShBLEksdCxlKXtlIT1udWxsJiZlLmxlbmd0aD4wJiZlLmZvckVhY2goZnVuY3Rpb24oUSxDKXtzd2l0Y2goUS50eXBlKXtjYXNlIEQuVGV4dFN0cmVhbTp7bGV0IG89akkuZW5jb2RlKFEuZGF0YS5kYXRhKSxmPXkoQSxvLEMsMCksbj17c2l6ZTpvLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O2ooQSxuLEMpO2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG89akkuZW5jb2RlKEpTT04uc3RyaW5naWZ5KFEuZGF0YSkpLGY9eShBLG8sQywwKSxuPXtzaXplOm8uYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07aihBLG4sQyk7YnJlYWt9Y2FzZSBELkJpbmFyeVN0cmVhbTp7bGV0IG89US5kYXRhLmRhdGEsZj15KEEsbyxDLDApLG49e3NpemU6by5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtqKEEsbixDKTticmVha31jYXNlIEQuVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKFEuZGF0YS5wYXRoLFEuZGF0YS5kYXRhKTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoUS5kYXRhLnBhdGgsUS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRC5JbWFnZTp7bGV0IG89US5kYXRhLGY9eShBLG8uZGF0YSxDLDApLG49eShBLG8uZGlyZWN0aW9uLEMsMSksRT10eXBlb2Ygby5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShvLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sYz17aW1hZ2VUeXBlOm8uaW1hZ2VUeXBlLG5hbWU6by5uYW1lLG9yaWdpbjpvLm9yaWdpbixzcGFjaW5nOm8uc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsc2l6ZTpvLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtqKEEsYyxDKTticmVha31jYXNlIEQuTWVzaDp7bGV0IG89US5kYXRhLGY9eShBLG8ucG9pbnRzLEMsMCksbj15KEEsby5jZWxscyxDLDEpLEU9eShBLG8ucG9pbnREYXRhLEMsMiksYz15KEEsby5jZWxsRGF0YSxDLDMpLHU9e21lc2hUeXBlOm8ubWVzaFR5cGUsbmFtZTpvLm5hbWUsbnVtYmVyT2ZQb2ludHM6by5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpvLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtufWAsY2VsbEJ1ZmZlclNpemU6by5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gfTtqKEEsdSxDKTticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBvPVEuZGF0YSxmPXkoQSxvLnBvaW50cyxDLDApLG49eShBLG8udmVydGljZXMsQywxKSxFPXkoQSxvLmxpbmVzLEMsMiksYz15KEEsby5wb2x5Z29ucyxDLDMpLHU9eShBLG8udHJpYW5nbGVTdHJpcHMsQyw0KSxkPXkoQSxvLnBvaW50RGF0YSxDLDUpLFI9eShBLG8ucG9pbnREYXRhLEMsNiksTj17cG9seURhdGFUeXBlOm8ucG9seURhdGFUeXBlLG5hbWU6by5uYW1lLG51bWJlck9mUG9pbnRzOm8ubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpvLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke259YCxsaW5lc0J1ZmZlclNpemU6by5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOm8ucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpvLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOm8ubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtkfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOm8ubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Un1gfTtqKEEsTixDKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgZz1BLnN0YWNrU2F2ZSgpLHI9MDt0cnl7cj1BLmNhbGxNYWluKEkuc2xpY2UoKSl9Y2F0Y2goUSl7dGhyb3cgdHlwZW9mIFE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoUSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksUX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKGcpfWxldCBpPUEuZ2V0TW9kdWxlU3Rkb3V0KCkscz1BLmdldE1vZHVsZVN0ZGVycigpLGE9W107cmV0dXJuIHQhPW51bGwmJnQubGVuZ3RoPjAmJnI9PT0wJiZ0LmZvckVhY2goZnVuY3Rpb24oUSxDKXtsZXQgbz1udWxsO3N3aXRjaChRLnR5cGUpe2Nhc2UgRC5UZXh0U3RyZWFtOntsZXQgbj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLGM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLG4sRSk7bz17ZGF0YTpXSS5kZWNvZGUoYyl9O2JyZWFrfWNhc2UgRC5Kc29uQ29tcGF0aWJsZTp7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxDLDBdKSxjPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixuLEUpO289SlNPTi5wYXJzZShXSS5kZWNvZGUoYykpO2JyZWFrfWNhc2UgRC5CaW5hcnlTdHJlYW06e2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsQywwXSk7bz17ZGF0YTpWSShBLG4sRSl9O2JyZWFrfWNhc2UgRC5UZXh0RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoUS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIEQuQmluYXJ5RmlsZTp7bz17cGF0aDpRLmRhdGEucGF0aCxkYXRhOmRlKEEsUS5kYXRhLnBhdGgpfTticmVha31jYXNlIEQuSW1hZ2U6e2xldCBuPXpBKEEsQyk7bi5kYXRhPUYoQSxDLDAsbi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksbi5kaXJlY3Rpb249RihBLEMsMSxQLkZsb2F0NjQpLG4ubWV0YWRhdGE9bmV3IE1hcChuLm1ldGFkYXRhKSxvPW47YnJlYWt9Y2FzZSBELk1lc2g6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsbi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOm4ucG9pbnRzPVkobi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mQ2VsbHM+MD9uLmNlbGxzPUYoQSxDLDEsbi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6bi5jZWxscz1ZKG4ubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQywyLG4ubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOm4ucG9pbnREYXRhPVkobi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG4ubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/bi5jZWxsRGF0YT1GKEEsQywzLG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLG89bjticmVha31jYXNlIEQuUG9seURhdGE6e2xldCBuPXpBKEEsQyk7bi5udW1iZXJPZlBvaW50cz4wP24ucG9pbnRzPUYoQSxDLDAsUC5GbG9hdDMyKTpuLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LG4udmVydGljZXNCdWZmZXJTaXplPjA/bi52ZXJ0aWNlcz1GKEEsQywxLHAuVUludDMyKTpuLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxuLmxpbmVzQnVmZmVyU2l6ZT4wP24ubGluZXM9RihBLEMsMixwLlVJbnQzMik6bi5saW5lcz1uZXcgVWludDMyQXJyYXksbi5wb2x5Z29uc0J1ZmZlclNpemU+MD9uLnBvbHlnb25zPUYoQSxDLDMscC5VSW50MzIpOm4ucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LG4udHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bi50cmlhbmdsZVN0cmlwcz1GKEEsQyw0LHAuVUludDMyKTpuLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxuLm51bWJlck9mUG9pbnRQaXhlbHM+MD9uLnBvaW50RGF0YT1GKEEsQyw1LG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpuLnBvaW50RGF0YT1ZKG4ucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbi5udW1iZXJPZkNlbGxQaXhlbHM+MD9uLmNlbGxEYXRhPUYoQSxDLDYsbi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bi5jZWxsRGF0YT1ZKG4ucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxvPW47YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpRLnR5cGUsZGF0YTpvfTthLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6cixzdGRvdXQ6aSxzdGRlcnI6cyxvdXRwdXRzOmF9fXZhciBYST15ZTt2YXIgd2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIG1lKEEsSSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IGU9MDtlPEEubGVuZ3RoO2UrKyl7bGV0IGc9cGUoQVtlXSxJKTtnIT09bnVsbCYmdC5wdXNoKGcpfXJldHVybiB0fWZ1bmN0aW9uIHBlKEEsSSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksd2UmJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOkk/dDp0LnNsaWNlKDApfXZhciB6ST1tZTtmdW5jdGlvbiBGZShBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgX0k9RmU7ZnVuY3Rpb24gU2UoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIHZJPVNlO2Z1bmN0aW9uIFJlKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciAkST1SZTthc3luYyBmdW5jdGlvbiBOZShBLEksdCxlKXtsZXQgZz1YSShBLEksdCxlKSxyPVtdO3JldHVybiBnLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihpKXtpZihpLnR5cGU9PT1ELkJpbmFyeVN0cmVhbXx8aS50eXBlPT09RC5CaW5hcnlGaWxlKXtsZXQgcz1pLmRhdGE7ci5wdXNoKHMpfWVsc2UgaWYoaS50eXBlPT09RC5JbWFnZSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi5fSShzKSl9ZWxzZSBpZihpLnR5cGU9PT1ELk1lc2gpe2xldCBzPWkuZGF0YTtyLnB1c2goLi4udkkocykpfWVsc2UgaWYoaS50eXBlPT09RC5Qb2x5RGF0YSl7bGV0IHM9aS5kYXRhO3IucHVzaCguLi4kSShzKSl9fSksRkEoZyx6SShyLCEwKSl9dmFyIEF0PU5lO3ZhciBVZT17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSxJLHQsZSxnLHIpe2xldCBpPWF3YWl0IFBJKEEsSSxyKTtyZXR1cm4gYXdhaXQgQXQoaSx0LGUsZyl9fTtvQShVZSk7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJztXdChHdCk7ZXhwb3J0e2hlIGFzIGJ5dVJlYWRNZXNoLHllIGFzIGJ5dVdyaXRlTWVzaCxUIGFzIGV4dGVuc2lvblRvTWVzaElvLHdlIGFzIGZyZWVTdXJmZXJBc2NpaVJlYWRNZXNoLERlIGFzIGZyZWVTdXJmZXJBc2NpaVdyaXRlTWVzaCxiZSBhcyBmcmVlU3VyZmVyQmluYXJ5UmVhZE1lc2gsUmUgYXMgZnJlZVN1cmZlckJpbmFyeVdyaXRlTWVzaCxoIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsUSBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxkIGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsZ2UgYXMgb2JqUmVhZE1lc2gsbGUgYXMgb2JqV3JpdGVNZXNoLENlIGFzIG9mZlJlYWRNZXNoLGZlIGFzIG9mZldyaXRlTWVzaCxqaSBhcyByZWFkTWVzaCxvSSBhcyBzZXREZWZhdWx0V2ViV29ya2VyLFd0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLFhhIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsdWUgYXMgc3RsUmVhZE1lc2gsQmUgYXMgc3RsV3JpdGVNZXNoLG1lIGFzIHN3Y1JlYWRNZXNoLGRlIGFzIHN3Y1dyaXRlTWVzaCxhZSBhcyB2dGtQb2x5RGF0YVJlYWRNZXNoLEllIGFzIHZ0a1BvbHlEYXRhV3JpdGVNZXNoLGNlIGFzIHdhc21SZWFkTWVzaCxwZSBhcyB3YXNtV3JpdGVNZXNoLEVlIGFzIHdhc21ac3RkUmVhZE1lc2gsUWUgYXMgd2FzbVpzdGRXcml0ZU1lc2gsX2kgYXMgd3JpdGVNZXNofTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py b/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py index a955fdae1..67bc602ab 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.2.1" +__version__ = "1.3.0" diff --git a/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py b/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py index a955fdae1..67bc602ab 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py @@ -1 +1 @@ -__version__ = "1.2.1" +__version__ = "1.3.0" diff --git a/packages/mesh-io/typescript/README.md b/packages/mesh-io/typescript/README.md index bebe647c6..28b364b08 100644 --- a/packages/mesh-io/typescript/README.md +++ b/packages/mesh-io/typescript/README.md @@ -4,10 +4,10 @@ > Input and output for mesh file formats. -[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/itk-wasm/mesh-io/ts/docs/ +[💻 **Live API Demo** ✨](https://insightsoftwareconsortium.github.io/ITK-Wasm/mesh-io/ts/docs/ ':include :type=iframe width=100% height=800px') -[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/itk-wasm/mesh-io/ts/docs/) +[🕮 **Documentation** 📚](https://insightsoftwareconsortium.github.io/ITK-Wasm/mesh-io/ts/docs/) ## Installation diff --git a/packages/mesh-io/typescript/package.json b/packages/mesh-io/typescript/package.json index 18382e96a..e7ac0781e 100644 --- a/packages/mesh-io/typescript/package.json +++ b/packages/mesh-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/mesh-io", - "version": "1.2.1", + "version": "1.3.0", "packageManager": "pnpm@9.6.0", "description": "Input and output for scientific and medical image file formats.", "type": "module", diff --git a/packages/mesh-io/typescript/src/index-worker-embedded.ts b/packages/mesh-io/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/mesh-io/typescript/src/index-worker-embedded.ts +++ b/packages/mesh-io/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js' diff --git a/packages/transform-io/typescript/src/index-worker-embedded.ts b/packages/transform-io/typescript/src/index-worker-embedded.ts index 9009807e7..554a8b1a2 100644 --- a/packages/transform-io/typescript/src/index-worker-embedded.ts +++ b/packages/transform-io/typescript/src/index-worker-embedded.ts @@ -4,6 +4,6 @@ import { setPipelineWorkerUrl } from './index.js' import pipelineWorker from '../node_modules/itk-wasm/dist/pipeline/web-workers/bundles/itk-wasm-pipeline.worker.js' -setPipelineWorkerUrl(pipelineWorker) +setPipelineWorkerUrl(pipelineWorker as string) -export * from './index.js' \ No newline at end of file +export * from './index.js'