public static final java.lang.String |
omsdkjs |
"OyhmdW5jdGlvbihvbWlkR2xvYmFsKSB7CiAgJ3VzZSBzdHJpY3QnO3ZhciBuO2Z1bmN0aW9uIGFhKGEpe3ZhciBiPTA7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGI8YS5sZW5ndGg/e2RvbmU6ITEsdmFsdWU6YVtiKytdfTp7ZG9uZTohMH19fWZ1bmN0aW9uIHAoYSl7dmFyIGI9J3VuZGVmaW5lZCchPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvciYmYVtTeW1ib2wuaXRlcmF0b3JdO3JldHVybiBiP2IuY2FsbChhKTp7bmV4dDphYShhKX19ZnVuY3Rpb24gcShhKXtpZighKGEgaW5zdGFuY2VvZiBBcnJheSkpe2E9cChhKTtmb3IodmFyIGIsYz1bXTshKGI9YS5uZXh0KCkpLmRvbmU7KWMucHVzaChiLnZhbHVlKTthPWN9cmV0dXJuIGF9dmFyIGJhPSdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3QuY3JlYXRlP09iamVjdC5jcmVhdGU6ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe31iLnByb3RvdHlwZT1hO3JldHVybiBuZXcgYn0sY2E7CmlmKCdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3Quc2V0UHJvdG90eXBlT2YpY2E9T2JqZWN0LnNldFByb3RvdHlwZU9mO2Vsc2V7dmFyIGRhO2E6e3ZhciBlYT17UzohMH0sZmE9e307dHJ5e2ZhLl9fcHJvdG9fXz1lYTtkYT1mYS5TO2JyZWFrIGF9Y2F0Y2goYSl7fWRhPSExfWNhPWRhP2Z1bmN0aW9uKGEsYil7YS5fX3Byb3RvX189YjtpZihhLl9fcHJvdG9fXyE9PWIpdGhyb3cgbmV3IFR5cGVFcnJvcihhKycgaXMgbm90IGV4dGVuc2libGUnKTtyZXR1cm4gYX06bnVsbH12YXIgaGE9Y2E7CmZ1bmN0aW9uIHIoYSxiKXthLnByb3RvdHlwZT1iYShiLnByb3RvdHlwZSk7YS5wcm90b3R5cGUuY29uc3RydWN0b3I9YTtpZihoYSloYShhLGIpO2Vsc2UgZm9yKHZhciBjIGluIGIpaWYoJ3Byb3RvdHlwZSchPWMpaWYoT2JqZWN0LmRlZmluZVByb3BlcnRpZXMpe3ZhciBkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYixjKTtkJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxjLGQpfWVsc2UgYVtjXT1iW2NdfWZ1bmN0aW9uIGlhKGEpe2E9WydvYmplY3QnPT10eXBlb2Ygd2luZG93JiZ3aW5kb3csJ29iamVjdCc9PXR5cGVvZiBzZWxmJiZzZWxmLCdvYmplY3QnPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwsYV07Zm9yKHZhciBiPTA7YjxhLmxlbmd0aDsrK2Ipe3ZhciBjPWFbYl07aWYoYyYmYy5NYXRoPT1NYXRoKXJldHVybiBjfXJldHVybiBnbG9iYWxUaGlzfQp2YXIgdD1pYSh0aGlzKSx2PSdmdW5jdGlvbic9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydGllcz9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oYSxiLGMpe2EhPUFycmF5LnByb3RvdHlwZSYmYSE9T2JqZWN0LnByb3RvdHlwZSYmKGFbYl09Yy52YWx1ZSl9O2Z1bmN0aW9uIHgoYSxiKXtpZihiKXt2YXIgYz10O2E9YS5zcGxpdCgnLicpO2Zvcih2YXIgZD0wO2Q8YS5sZW5ndGgtMTtkKyspe3ZhciBlPWFbZF07ZSBpbiBjfHwoY1tlXT17fSk7Yz1jW2VdfWE9YVthLmxlbmd0aC0xXTtkPWNbYV07Yj1iKGQpO2IhPWQmJm51bGwhPWImJnYoYyxhLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6Yn0pfX14KCdnbG9iYWxUaGlzJyxmdW5jdGlvbihhKXtyZXR1cm4gYXx8dH0pO2Z1bmN0aW9uIHkoYSxiKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYil9CnZhciBqYT0nZnVuY3Rpb24nPT10eXBlb2YgT2JqZWN0LmFzc2lnbj9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7dmFyIGQ9YXJndW1lbnRzW2NdO2lmKGQpZm9yKHZhciBlIGluIGQpeShkLGUpJiYoYVtlXT1kW2VdKX1yZXR1cm4gYX07eCgnT2JqZWN0LmFzc2lnbicsZnVuY3Rpb24oYSl7cmV0dXJuIGF8fGphfSk7ZnVuY3Rpb24ga2EoKXtrYT1mdW5jdGlvbigpe307dC5TeW1ib2x8fCh0LlN5bWJvbD1sYSl9ZnVuY3Rpb24gbWEoYSxiKXt0aGlzLmE9YTt2KHRoaXMsJ2Rlc2NyaXB0aW9uJyx7Y29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmJ9KX1tYS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hfTsKdmFyIGxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gYShjKXtpZih0aGlzIGluc3RhbmNlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtyZXR1cm4gbmV3IG1hKCdqc2NvbXBfc3ltYm9sXycrKGN8fCcnKSsnXycrYisrLGMpfXZhciBiPTA7cmV0dXJuIGF9KCk7ZnVuY3Rpb24geigpe2thKCk7dmFyIGE9dC5TeW1ib2wuaXRlcmF0b3I7YXx8KGE9dC5TeW1ib2wuaXRlcmF0b3I9dC5TeW1ib2woJ1N5bWJvbC5pdGVyYXRvcicpKTsnZnVuY3Rpb24nIT10eXBlb2YgQXJyYXkucHJvdG90eXBlW2FdJiZ2KEFycmF5LnByb3RvdHlwZSxhLHtjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmEoYWEodGhpcykpfX0pO3o9ZnVuY3Rpb24oKXt9fWZ1bmN0aW9uIG5hKGEpe3ooKTthPXtuZXh0OmF9O2FbdC5TeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3JldHVybiBhfQp4KCdXZWFrTWFwJyxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKGgpe3RoaXMuYT0oZys9TWF0aC5yYW5kb20oKSsxKS50b1N0cmluZygpO2lmKGgpe2g9cChoKTtmb3IodmFyIGs7IShrPWgubmV4dCgpKS5kb25lOylrPWsudmFsdWUsdGhpcy5zZXQoa1swXSxrWzFdKX19ZnVuY3Rpb24gYygpe31mdW5jdGlvbiBkKGgpe3ZhciBrPXR5cGVvZiBoO3JldHVybidvYmplY3QnPT09ayYmbnVsbCE9PWh8fCdmdW5jdGlvbic9PT1rfWZ1bmN0aW9uIGUoaCl7aWYoIXkoaCxsKSl7dmFyIGs9bmV3IGM7dihoLGwse3ZhbHVlOmt9KX19ZnVuY3Rpb24gZihoKXt2YXIgaz1PYmplY3RbaF07ayYmKE9iamVjdFtoXT1mdW5jdGlvbihtKXtpZihtIGluc3RhbmNlb2YgYylyZXR1cm4gbTtlKG0pO3JldHVybiBrKG0pfSl9aWYoZnVuY3Rpb24oKXtpZighYXx8IU9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgaD1PYmplY3Quc2VhbCh7fSksaz1PYmplY3Quc2VhbCh7fSksbT1uZXcgYShbW2gsMl0sW2ssCjNdXSk7aWYoMiE9bS5nZXQoaCl8fDMhPW0uZ2V0KGspKXJldHVybiExO20uZGVsZXRlKGgpO20uc2V0KGssNCk7cmV0dXJuIW0uaGFzKGgpJiY0PT1tLmdldChrKX1jYXRjaCh1KXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7dmFyIGw9JyRqc2NvbXBfaGlkZGVuXycrTWF0aC5yYW5kb20oKTtmKCdmcmVlemUnKTtmKCdwcmV2ZW50RXh0ZW5zaW9ucycpO2YoJ3NlYWwnKTt2YXIgZz0wO2IucHJvdG90eXBlLnNldD1mdW5jdGlvbihoLGspe2lmKCFkKGgpKXRocm93IEVycm9yKCdJbnZhbGlkIFdlYWtNYXAga2V5Jyk7ZShoKTtpZigheShoLGwpKXRocm93IEVycm9yKCdXZWFrTWFwIGtleSBmYWlsOiAnK2gpO2hbbF1bdGhpcy5hXT1rO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oaCl7cmV0dXJuIGQoaCkmJnkoaCxsKT9oW2xdW3RoaXMuYV06dm9pZCAwfTtiLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oaCl7cmV0dXJuIGQoaCkmJnkoaCxsKSYmeShoW2xdLHRoaXMuYSl9OwpiLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oaCl7cmV0dXJuIGQoaCkmJnkoaCxsKSYmeShoW2xdLHRoaXMuYSk/ZGVsZXRlIGhbbF1bdGhpcy5hXTohMX07cmV0dXJuIGJ9KTsKeCgnTWFwJyxmdW5jdGlvbihhKXtmdW5jdGlvbiBiKCl7dmFyIGc9e307cmV0dXJuIGcuQT1nLm5leHQ9Zy5oZWFkPWd9ZnVuY3Rpb24gYyhnLGgpe3ZhciBrPWcuYTtyZXR1cm4gbmEoZnVuY3Rpb24oKXtpZihrKXtmb3IoO2suaGVhZCE9Zy5hOylrPWsuQTtmb3IoO2submV4dCE9ay5oZWFkOylyZXR1cm4gaz1rLm5leHQse2RvbmU6ITEsdmFsdWU6aChrKX07az1udWxsfXJldHVybntkb25lOiEwLHZhbHVlOnZvaWQgMH19KX1mdW5jdGlvbiBkKGcsaCl7dmFyIGs9aCYmdHlwZW9mIGg7J29iamVjdCc9PWt8fCdmdW5jdGlvbic9PWs/Zi5oYXMoaCk/az1mLmdldChoKTooaz0nJysgKytsLGYuc2V0KGgsaykpOms9J3BfJytoO3ZhciBtPWcuYltrXTtpZihtJiZ5KGcuYixrKSlmb3IoZz0wO2c8bS5sZW5ndGg7ZysrKXt2YXIgdT1tW2ddO2lmKGghPT1oJiZ1LmtleSE9PXUua2V5fHxoPT09dS5rZXkpcmV0dXJue2lkOmssbGlzdDptLGluZGV4Omcsczp1fX1yZXR1cm57aWQ6ayxsaXN0Om0sCmluZGV4Oi0xLHM6dm9pZCAwfX1mdW5jdGlvbiBlKGcpe3RoaXMuYj17fTt0aGlzLmE9YigpO3RoaXMuc2l6ZT0wO2lmKGcpe2c9cChnKTtmb3IodmFyIGg7IShoPWcubmV4dCgpKS5kb25lOyloPWgudmFsdWUsdGhpcy5zZXQoaFswXSxoWzFdKX19aWYoZnVuY3Rpb24oKXtpZighYXx8J2Z1bmN0aW9uJyE9dHlwZW9mIGF8fCFhLnByb3RvdHlwZS5lbnRyaWVzfHwnZnVuY3Rpb24nIT10eXBlb2YgT2JqZWN0LnNlYWwpcmV0dXJuITE7dHJ5e3ZhciBnPU9iamVjdC5zZWFsKHt4OjR9KSxoPW5ldyBhKHAoW1tnLCdzJ11dKSk7aWYoJ3MnIT1oLmdldChnKXx8MSE9aC5zaXplfHxoLmdldCh7eDo0fSl8fGguc2V0KHt4OjR9LCd0JykhPWh8fDIhPWguc2l6ZSlyZXR1cm4hMTt2YXIgaz1oLmVudHJpZXMoKSxtPWsubmV4dCgpO2lmKG0uZG9uZXx8bS52YWx1ZVswXSE9Z3x8J3MnIT1tLnZhbHVlWzFdKXJldHVybiExO209ay5uZXh0KCk7cmV0dXJuIG0uZG9uZXx8NCE9bS52YWx1ZVswXS54fHwKJ3QnIT1tLnZhbHVlWzFdfHwhay5uZXh0KCkuZG9uZT8hMTohMH1jYXRjaCh1KXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7eigpO3ZhciBmPW5ldyBXZWFrTWFwO2UucHJvdG90eXBlLnNldD1mdW5jdGlvbihnLGgpe2c9MD09PWc/MDpnO3ZhciBrPWQodGhpcyxnKTtrLmxpc3R8fChrLmxpc3Q9dGhpcy5iW2suaWRdPVtdKTtrLnM/ay5zLnZhbHVlPWg6KGsucz17bmV4dDp0aGlzLmEsQTp0aGlzLmEuQSxoZWFkOnRoaXMuYSxrZXk6Zyx2YWx1ZTpofSxrLmxpc3QucHVzaChrLnMpLHRoaXMuYS5BLm5leHQ9ay5zLHRoaXMuYS5BPWsucyx0aGlzLnNpemUrKyk7cmV0dXJuIHRoaXN9O2UucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihnKXtnPWQodGhpcyxnKTtyZXR1cm4gZy5zJiZnLmxpc3Q/KGcubGlzdC5zcGxpY2UoZy5pbmRleCwxKSxnLmxpc3QubGVuZ3RofHxkZWxldGUgdGhpcy5iW2cuaWRdLGcucy5BLm5leHQ9Zy5zLm5leHQsZy5zLm5leHQuQT1nLnMuQSxnLnMuaGVhZD1udWxsLAp0aGlzLnNpemUtLSwhMCk6ITF9O2UucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5iPXt9O3RoaXMuYT10aGlzLmEuQT1iKCk7dGhpcy5zaXplPTB9O2UucHJvdG90eXBlLmhhcz1mdW5jdGlvbihnKXtyZXR1cm4hIWQodGhpcyxnKS5zfTtlLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZyl7cmV0dXJuKGc9ZCh0aGlzLGcpLnMpJiZnLnZhbHVlfTtlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIGModGhpcyxmdW5jdGlvbihnKXtyZXR1cm5bZy5rZXksZy52YWx1ZV19KX07ZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIGcua2V5fSl9O2UucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiBjKHRoaXMsZnVuY3Rpb24oZyl7cmV0dXJuIGcudmFsdWV9KX07ZS5wcm90b3R5cGUuZm9yRWFjaD1mdW5jdGlvbihnLGgpe2Zvcih2YXIgaz10aGlzLmVudHJpZXMoKSxtOyEobT1rLm5leHQoKSkuZG9uZTspbT0KbS52YWx1ZSxnLmNhbGwoaCxtWzFdLG1bMF0sdGhpcyl9O2UucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl09ZS5wcm90b3R5cGUuZW50cmllczt2YXIgbD0wO3JldHVybiBlfSk7eCgnT2JqZWN0LnZhbHVlcycsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiKXt2YXIgYz1bXSxkO2ZvcihkIGluIGIpeShiLGQpJiZjLnB1c2goYltkXSk7cmV0dXJuIGN9fSk7CngoJ1NldCcsZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYihjKXt0aGlzLmE9bmV3IE1hcDtpZihjKXtjPXAoYyk7Zm9yKHZhciBkOyEoZD1jLm5leHQoKSkuZG9uZTspdGhpcy5hZGQoZC52YWx1ZSl9dGhpcy5zaXplPXRoaXMuYS5zaXplfWlmKGZ1bmN0aW9uKCl7aWYoIWF8fCdmdW5jdGlvbichPXR5cGVvZiBhfHwhYS5wcm90b3R5cGUuZW50cmllc3x8J2Z1bmN0aW9uJyE9dHlwZW9mIE9iamVjdC5zZWFsKXJldHVybiExO3RyeXt2YXIgYz1PYmplY3Quc2VhbCh7eDo0fSksZD1uZXcgYShwKFtjXSkpO2lmKCFkLmhhcyhjKXx8MSE9ZC5zaXplfHxkLmFkZChjKSE9ZHx8MSE9ZC5zaXplfHxkLmFkZCh7eDo0fSkhPWR8fDIhPWQuc2l6ZSlyZXR1cm4hMTt2YXIgZT1kLmVudHJpZXMoKSxmPWUubmV4dCgpO2lmKGYuZG9uZXx8Zi52YWx1ZVswXSE9Y3x8Zi52YWx1ZVsxXSE9YylyZXR1cm4hMTtmPWUubmV4dCgpO3JldHVybiBmLmRvbmV8fGYudmFsdWVbMF09PWN8fDQhPWYudmFsdWVbMF0ueHx8CmYudmFsdWVbMV0hPWYudmFsdWVbMF0/ITE6ZS5uZXh0KCkuZG9uZX1jYXRjaChsKXtyZXR1cm4hMX19KCkpcmV0dXJuIGE7eigpO2IucHJvdG90eXBlLmFkZD1mdW5jdGlvbihjKXtjPTA9PT1jPzA6Yzt0aGlzLmEuc2V0KGMsYyk7dGhpcy5zaXplPXRoaXMuYS5zaXplO3JldHVybiB0aGlzfTtiLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24oYyl7Yz10aGlzLmEuZGVsZXRlKGMpO3RoaXMuc2l6ZT10aGlzLmEuc2l6ZTtyZXR1cm4gY307Yi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmEuY2xlYXIoKTt0aGlzLnNpemU9MH07Yi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLmEuaGFzKGMpfTtiLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYS5lbnRyaWVzKCl9O2IucHJvdG90eXBlLnZhbHVlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmEudmFsdWVzKCl9O2IucHJvdG90eXBlLmtleXM9Yi5wcm90b3R5cGUudmFsdWVzOwpiLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdPWIucHJvdG90eXBlLnZhbHVlcztiLnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGMsZCl7dmFyIGU9dGhpczt0aGlzLmEuZm9yRWFjaChmdW5jdGlvbihmKXtyZXR1cm4gYy5jYWxsKGQsZixmLGUpfSl9O3JldHVybiBifSk7eCgnT2JqZWN0LmlzJyxmdW5jdGlvbihhKXtyZXR1cm4gYT9hOmZ1bmN0aW9uKGIsYyl7cmV0dXJuIGI9PT1jPzAhPT1ifHwxL2I9PT0xL2M6YiE9PWImJmMhPT1jfX0pO3goJ0FycmF5LnByb3RvdHlwZS5pbmNsdWRlcycsZnVuY3Rpb24oYSl7cmV0dXJuIGE/YTpmdW5jdGlvbihiLGMpe3ZhciBkPXRoaXM7ZCBpbnN0YW5jZW9mIFN0cmluZyYmKGQ9U3RyaW5nKGQpKTt2YXIgZT1kLmxlbmd0aDtjPWN8fDA7Zm9yKDA+YyYmKGM9TWF0aC5tYXgoYytlLDApKTtjPGU7YysrKXt2YXIgZj1kW2NdO2lmKGY9PT1ifHxPYmplY3QuaXMoZixiKSlyZXR1cm4hMH1yZXR1cm4hMX19KTsKeCgnT2JqZWN0LmVudHJpZXMnLGZ1bmN0aW9uKGEpe3JldHVybiBhP2E6ZnVuY3Rpb24oYil7dmFyIGM9W10sZDtmb3IoZCBpbiBiKXkoYixkKSYmYy5wdXNoKFtkLGJbZF1dKTtyZXR1cm4gY319KTsKdmFyIEE9e3FhOidsb2FkZWQnLHhhOidzdGFydCcsa2E6J2ZpcnN0UXVhcnRpbGUnLHNhOidtaWRwb2ludCcseWE6J3RoaXJkUXVhcnRpbGUnLGlhOidjb21wbGV0ZScsdGE6J3BhdXNlJyx2YToncmVzdW1lJyxoYTonYnVmZmVyU3RhcnQnLGdhOididWZmZXJGaW5pc2gnLHdhOidza2lwcGVkJyxBYTondm9sdW1lQ2hhbmdlJyx1YToncGxheWVyU3RhdGVDaGFuZ2UnLGRhOidhZFVzZXJJbnRlcmFjdGlvbid9LG9hPXtuYTonZ2VuZXJpYycsemE6J3ZpZGVvJyxyYTonbWVkaWEnfSxwYT17UjonbmF0aXZlJyxvYTonaHRtbCcsUDonamF2YXNjcmlwdCd9LHJhPXtSOiduYXRpdmUnLFA6J2phdmFzY3JpcHQnLE5PTkU6J25vbmUnfSxzYT17bWE6J2Z1bGwnLGphOidkb21haW4nLHBhOidsaW1pdGVkJ30sdGE9e2ZhOidiYWNrZ3JvdW5kZWQnLGxhOidmb3JlZ3JvdW5kZWQnfSx1YT17ZWE6J2FwcCcsQmE6J3dlYid9O2Z1bmN0aW9uIEIoYSxiKXt0aGlzLng9bnVsbCE9YS54P2EueDphLmxlZnQ7dGhpcy55PW51bGwhPWEueT9hLnk6YS50b3A7dGhpcy53aWR0aD1hLndpZHRoO3RoaXMuaGVpZ2h0PWEuaGVpZ2h0O3RoaXMuZW5kWD10aGlzLngrdGhpcy53aWR0aDt0aGlzLmVuZFk9dGhpcy55K3RoaXMuaGVpZ2h0O3RoaXMuYWRTZXNzaW9uSWQ9YS5hZFNlc3Npb25JZHx8dm9pZCAwO3RoaXMuaXNGcmllbmRseU9ic3RydWN0aW9uRm9yPWEuaXNGcmllbmRseU9ic3RydWN0aW9uRm9yfHxbXTt0aGlzLmI9YS5mcmllbmRseU9ic3RydWN0aW9uQ2xhc3N8fHZvaWQgMDt0aGlzLmM9YS5mcmllbmRseU9ic3RydWN0aW9uUHVycG9zZXx8dm9pZCAwO3RoaXMuZj1hLmZyaWVuZGx5T2JzdHJ1Y3Rpb25SZWFzb258fHZvaWQgMDt0aGlzLmNsaXBzVG9Cb3VuZHM9dm9pZCAwIT09YS5jbGlwc1RvQm91bmRzPyEwPT09YS5jbGlwc1RvQm91bmRzOiEwO3RoaXMuZz12b2lkIDAhPT1hLmhhc1dpbmRvd0ZvY3VzPyEwPT09CmEuaGFzV2luZG93Rm9jdXM6ITA7dGhpcy5ub3RWaXNpYmxlUmVhc29uPWEubm90VmlzaWJsZVJlYXNvbnx8dm9pZCAwO3RoaXMuY2hpbGRWaWV3cz1hLmNoaWxkVmlld3N8fFtdO3RoaXMuaXNDcmVhdGl2ZT1hLmlzQ3JlYXRpdmV8fCExO3RoaXMuYT1ifWZ1bmN0aW9uIHZhKGEpe3ZhciBiPXt9O3JldHVybiBiLndpZHRoPWEud2lkdGgsYi5oZWlnaHQ9YS5oZWlnaHQsYn1mdW5jdGlvbiBDKGEpe3ZhciBiPXt9O3JldHVybiBPYmplY3QuYXNzaWduKHt9LHZhKGEpLChiLng9YS54LGIueT1hLnksYikpfWZ1bmN0aW9uIHdhKGEpe3ZhciBiPUMoYSksYz17fTtyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSxiLChjLmVuZFg9YS5lbmRYLGMuZW5kWT1hLmVuZFksYykpfWZ1bmN0aW9uIHhhKGEsYixjKXthLngrPWI7YS55Kz1jO2EuZW5kWCs9YjthLmVuZFkrPWN9CkIucHJvdG90eXBlLko9ZnVuY3Rpb24oYSl7aWYobnVsbD09YSlyZXR1cm4hMTthPUMoYSk7dmFyIGI9YS55LGM9YS53aWR0aCxkPWEuaGVpZ2h0O3JldHVybiB0aGlzLng9PT1hLngmJnRoaXMueT09PWImJnRoaXMud2lkdGg9PT1jJiZ0aGlzLmhlaWdodD09PWR9O2Z1bmN0aW9uIHlhKGEpe3JldHVybiBhLndpZHRoKmEuaGVpZ2h0fWZ1bmN0aW9uIHphKGEpe3JldHVybiAwPT09YS53aWR0aHx8MD09PWEuaGVpZ2h0fTtmdW5jdGlvbiBBYShhLGIpe3ZhciBjPTA7aWYoMDxiLmxlbmd0aCl7dmFyIGQ9QmEoYSxiKTthPWQuYmE7ZD1kLmNhO2Zvcih2YXIgZT0wO2U8YS5sZW5ndGgtMTtlKyspZm9yKHZhciBmPShhW2VdKyhhW2VdKzEpKS8yLGw9YVtlKzFdLWFbZV0sZz0wO2c8ZC5sZW5ndGgtMTtnKyspe2Zvcih2YXIgaD0oZFtnXSsoZFtnXSsxKSkvMixrPWRbZysxXS1kW2ddLG09ITEsdT0wO3U8Yi5sZW5ndGg7dSsrKXt2YXIgdz1DKGJbdV0pO2lmKHcueDxmJiZ3Lngrdy53aWR0aD5mJiZ3Lnk8aCYmdy55K3cuaGVpZ2h0Pmgpe209ITA7YnJlYWt9fW0mJihjKz1NYXRoLnJvdW5kKGwpKk1hdGgucm91bmQoaykpfX1yZXR1cm4gY30KZnVuY3Rpb24gQmEoYSxiKXthPUMoYSk7Zm9yKHZhciBjPVtdLGQ9W10sZT0wO2U8Yi5sZW5ndGg7ZSsrKXt2YXIgZj1DKGJbZV0pO2Y9Q2EoYSxmKTtEYShjLGYueCk7RGEoYyxmLmVuZFgpO0RhKGQsZi55KTtEYShkLGYuZW5kWSl9Yz1jLnNvcnQoZnVuY3Rpb24obCxnKXtyZXR1cm4gbC1nfSk7ZD1kLnNvcnQoZnVuY3Rpb24obCxnKXtyZXR1cm4gbC1nfSk7cmV0dXJue2JhOmMsY2E6ZH19ZnVuY3Rpb24gQ2EoYSxiKXtyZXR1cm57eDpNYXRoLm1heChhLngsYi54KSx5Ok1hdGgubWF4KGEueSxiLnkpLGVuZFg6TWF0aC5taW4oYS54K2Eud2lkdGgsYi54K2Iud2lkdGgpLGVuZFk6TWF0aC5taW4oYS55K2EuaGVpZ2h0LGIueStiLmhlaWdodCl9fWZ1bmN0aW9uIERhKGEsYil7LTE9PT1hLmluZGV4T2YoYikmJmEucHVzaChiKX07ZnVuY3Rpb24gRWEoKXt0aGlzLmI9dGhpcy5hPXRoaXMudj10aGlzLmw9dGhpcy5nPXRoaXMuaj12b2lkIDA7dGhpcy5tPTA7dGhpcy5oPVtdO3RoaXMubz1bXTt0aGlzLnU9MDt0aGlzLmk9W107dGhpcy5jPVtdO3RoaXMuZj1bXX1FYS5wcm90b3R5cGUuSj1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbD09YT8hMTpKU09OLnN0cmluZ2lmeShGYSh0aGlzKSk9PT1KU09OLnN0cmluZ2lmeShGYShhKSl9OwpmdW5jdGlvbiBGYShhKXt2YXIgYj1bXSxjPVtdLGQ9e3ZpZXdwb3J0OmEuaixhZFZpZXc6e3BlcmNlbnRhZ2VJblZpZXc6YS5tLHBpeGVsc0luVmlldzphLnUscmVhc29uczphLmZ9LGRlY2xhcmVkRnJpZW5kbHlPYnN0cnVjdGlvbnM6YS5oLmxlbmd0aH07aWYodm9pZCAwIT09YS5hKXtkLmFkVmlldy5nZW9tZXRyeT1DKGEuYSk7ZC5hZFZpZXcuZ2VvbWV0cnkucGl4ZWxzPXlhKGEuYSk7ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeT1DKGEuYik7ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeS5waXhlbHM9TWF0aC5tYXgoMCx5YShhLmIpLUFhKGEuYixhLmMpKTtmb3IodmFyIGU9MDtlPGEuYy5sZW5ndGg7ZSsrKWIucHVzaChDKGEuY1tlXSkpO2ZvcihlPTA7ZTxhLm8ubGVuZ3RoO2UrKyl7dmFyIGY9YS5vW2VdLGw9ZixnPXt9O2wuYiYmKGcub2JzdHJ1Y3Rpb25DbGFzcz1sLmIpO2wuYyYmKGcub2JzdHJ1Y3Rpb25QdXJwb3NlPWwuYyk7bC5mJiYoZy5vYnN0cnVjdGlvblJlYXNvbj0KbC5mKTtmPUNhKGEuYSxmKTtjLnB1c2goT2JqZWN0LmFzc2lnbih7fSx7eDpmLngseTpmLnksd2lkdGg6Zi5lbmRYLWYueCxoZWlnaHQ6Zi5lbmRZLWYueX0sZykpfWQuYWRWaWV3Lm9uU2NyZWVuR2VvbWV0cnkub2JzdHJ1Y3Rpb25zPWI7ZC5hZFZpZXcub25TY3JlZW5HZW9tZXRyeS5mcmllbmRseU9ic3RydWN0aW9ucz1jO3ZvaWQgMCE9PWEubCYmdm9pZCAwIT09YS52JiYoZC5hZFZpZXcuY29udGFpbmVyR2VvbWV0cnk9QyhhLmwpLGQuYWRWaWV3Lm9uU2NyZWVuQ29udGFpbmVyR2VvbWV0cnk9QyhhLnYpLGQuYWRWaWV3Lm1lYXN1cmluZ0VsZW1lbnQ9ITApfXJldHVybiBkfWZ1bmN0aW9uIEdhKGEsYil7Yj12YShiKTthLmo9e307YS5qLndpZHRoPWIud2lkdGg7YS5qLmhlaWdodD1iLmhlaWdodDthLmc9e307YS5nLng9MDthLmcueT0wO2EuZy53aWR0aD1iLndpZHRoO2EuZy5oZWlnaHQ9Yi5oZWlnaHQ7YS5nLmVuZFg9Yi53aWR0aDthLmcuZW5kWT1iLmhlaWdodH0KZnVuY3Rpb24gSGEoKXtyZXR1cm57eDowLHk6MCxlbmRYOjAsZW5kWTowLHdpZHRoOjAsaGVpZ2h0OjB9fWZ1bmN0aW9uIElhKGEsYil7dmFyIGM9e307Yy54PU1hdGgubWF4KGEueCxiLngpO2MueT1NYXRoLm1heChhLnksYi55KTtjLmVuZFg9TWF0aC5taW4oYS5lbmRYLGIuZW5kWCk7Yy5lbmRZPU1hdGgubWluKGEuZW5kWSxiLmVuZFkpO2Mud2lkdGg9TWF0aC5tYXgoMCxjLmVuZFgtYy54KTtjLmhlaWdodD1NYXRoLm1heCgwLGMuZW5kWS1jLnkpO3JldHVybiBjfWZ1bmN0aW9uIEphKGEsYil7cmV0dXJuLjAxPGIud2lkdGgtYS53aWR0aHx8LjAxPGIuaGVpZ2h0LWEuaGVpZ2h0fWZ1bmN0aW9uIEthKGEpe2lmKC0xIT09YS5mLmluZGV4T2YoJ2JhY2tncm91bmRlZCcpKWEubT0wLGEudT0wO2Vsc2V7dmFyIGI9eWEoYS5hKTtpZigwIT09Yil7dmFyIGM9TWF0aC5tYXgoMCx5YShhLmIpLUFhKGEuYixhLmMpKTthLm09TWF0aC5yb3VuZChjL2IqMTAwKTthLnU9Y319fQpmdW5jdGlvbiBMYShhLGIpe2lmKHphKGIpfHwhYS5iKWI9ITE7ZWxzZXt2YXIgYz13YShhLmIpLGQ9Yy55LGU9Yy5lbmRYO2E9Yy5lbmRZO3ZhciBmPWIuZW5kWDtjPWMueDsoZj1mPGN8fC4wMT5NYXRoLmFicyhmLWMpKXx8KGY9Yi54LGY9Zj5lfHwuMDE+TWF0aC5hYnMoZi1lKSk7KGU9Zil8fChlPWIuZW5kWSxlPWU8ZHx8LjAxPk1hdGguYWJzKGUtZCkpOyhkPWUpfHwoYj1iLnksZD1iPmF8fC4wMT5NYXRoLmFicyhiLWEpKTtiPSFkfXJldHVybiBifWZ1bmN0aW9uIEQoYSxiKXtmb3IodmFyIGM9ITEsZD0wO2Q8YS5mLmxlbmd0aDtkKyspYS5mW2RdPT09YiYmKGM9ITApO2N8fGEuZi5wdXNoKGIpfTtmdW5jdGlvbiBNYShhLGIsYyxkLGUpe3ZhciBmPW5ldyBFYTtiPW5ldyBCKGIsITEpO0dhKGYsYik7TmEoYSxiLGYsZCk7aWYoIWUpcmV0dXJuIGYuZj1bJ3VubWVhc3VyYWJsZSddLGYuaj12b2lkIDAsZi5tPTAsZi5jPVtdLGYuYSYmKGE9Zi5hLGM9e30sYT1uZXcgQigoYy54PTAsYy55PTAsYy53aWR0aD1hLndpZHRoLGMuaGVpZ2h0PWEuaGVpZ2h0LGMpLGEuYSksZi5hPWEpLGYuYj1IYSgpLGY7aWYoJ2JhY2tncm91bmRlZCc9PT1jKUQoZiwnYmFja2dyb3VuZGVkJyk7ZWxzZSBpZih2b2lkIDAhPT1mLmEpe2ZvcihhPTA7YTxmLmgubGVuZ3RoO2ErKylMYShmLGYuaFthXSkmJmYuby5wdXNoKGYuaFthXSk7Zm9yKGE9MDthPGYuaS5sZW5ndGg7YSsrKXtpZihjPUxhKGYsZi5pW2FdKSl7YTp7Yz1mLmlbYV07Zm9yKGQ9MDtkPGYuYy5sZW5ndGg7ZCsrKWlmKGYuY1tkXS5KKGMpKXtjPSEwO2JyZWFrIGF9Yz0hMX1jPSFjfWMmJihEKGYsJ29ic3RydWN0ZWQnKSxmLmMucHVzaChmLmlbYV0pKX1LYShmKX1lbHNlIEQoZiwKJ25vdEZvdW5kJyk7cmV0dXJuIGZ9CmZ1bmN0aW9uIE5hKGEsYixjLGQpe3ZhciBlPWIuaXNDcmVhdGl2ZT8hMDpiLmFkU2Vzc2lvbklkPT09ZDtpZihlKXtjLmE9Yjt2YXIgZj13YShjLmEpO2E9SWEoYy5nLGYpO3ZhciBsPWMuYTsnbm90QXR0YWNoZWQnPT09bC5ub3RWaXNpYmxlUmVhc29ufHwnbm9XaW5kb3dGb2N1cyc9PT1sLm5vdFZpc2libGVSZWFzb258fCdub0FkVmlldyc9PT1sLm5vdFZpc2libGVSZWFzb24/KEQoYywnbm90Rm91bmQnKSxjLmI9bmV3IEIoSGEoKSwhMSkpOihsPWMuYSwndmlld0ludmlzaWJsZSc9PT1sLm5vdFZpc2libGVSZWFzb258fCd2aWV3R29uZSc9PT1sLm5vdFZpc2libGVSZWFzb258fCd2aWV3Tm90VmlzaWJsZSc9PT1sLm5vdFZpc2libGVSZWFzb258fCd2aWV3QWxwaGFaZXJvJz09PWwubm90VmlzaWJsZVJlYXNvbnx8J3ZpZXdIaWRkZW4nPT09bC5ub3RWaXNpYmxlUmVhc29ufHx2b2lkIDAhPT1jLmEubm90VmlzaWJsZVJlYXNvbnx8emEoYy5hKT8oRChjLCdoaWRkZW4nKSxjLmI9bmV3IEIoSGEoKSwKITEpKTooYy5hLmd8fChEKGMsJ2JhY2tncm91bmRlZCcpLEQoYywnbm9XaW5kb3dGb2N1cycpKSxKYShhLGYpJiZEKGMsJ2NsaXBwZWQnKSxjLmI9bmV3IEIoYSwhMSkpKX1lbHNlIGlmKGY9ITAsYi5hJiYoZj0tMSE9PWIuaXNGcmllbmRseU9ic3RydWN0aW9uRm9yLmluZGV4T2YoZCk/ITE6ITE9PT1iLmNsaXBzVG9Cb3VuZHMpLGYpe2w9Yi5jaGlsZFZpZXdzO2Zvcih2YXIgZz0wO2c8bC5sZW5ndGg7ZysrKWY9dm9pZCAwIT09Yy5hLE5hKGEsbmV3IEIobFtnXSxmKSxjLGQpfWV8fHZvaWQgMD09PWMuYXx8KGIuYT8tMSE9PWIuaXNGcmllbmRseU9ic3RydWN0aW9uRm9yLmluZGV4T2YoZCk/Yy5oLnB1c2goYik6Yy5pLnB1c2goYik6KGU9d2EoYiksZD13YShjLmIpLEMoYy5iKSwhemEoYy5iKSYmYi5jbGlwc1RvQm91bmRzJiYoYj1JYShkLGUpLEphKGIsZCkmJihEKGMsJ2NsaXBwZWQnKSxjLmI9bmV3IEIoYiwhMSkpKSkpfTtmdW5jdGlvbiBPYShhLGIpe3RoaXMueT10aGlzLng9MDt0aGlzLndpZHRoPWE7dGhpcy5oZWlnaHQ9Yn07ZnVuY3Rpb24gUGEoKXtyZXR1cm57YXBpVmVyc2lvbjonMS4wJyxhY2Nlc3NNb2RlOidsaW1pdGVkJyxlbnZpcm9ubWVudDonYXBwJyxvbWlkSnNJbmZvOntvbWlkSW1wbGVtZW50ZXI6J29tc2RrJyxzZXJ2aWNlVmVyc2lvbjonMS4zLjI4LWlhYjMyNzEnfX19ZnVuY3Rpb24gUWEoKXt0aGlzLmFkU2Vzc2lvbklkPW51bGw7dGhpcy5jPVBhKCk7dGhpcy5vPW51bGw7dGhpcy5tPSdmb3JlZ3JvdW5kZWQnO3RoaXMubD10aGlzLmk9J25vbmUnO3RoaXMuaj10aGlzLmc9dGhpcy5mPXRoaXMuaD10aGlzLmE9dGhpcy5iPXRoaXMuQj10aGlzLnU9bnVsbDt0aGlzLkM9ITA7dGhpcy52PW5ldyBNYXB9dmFyIEc7ZnVuY3Rpb24gSCgpe0d8fChHPW5ldyBRYSk7cmV0dXJuIEd9O3ZhciBJPWZ1bmN0aW9uKCl7aWYoJ3VuZGVmaW5lZCchPT10eXBlb2Ygb21pZEdsb2JhbCYmb21pZEdsb2JhbClyZXR1cm4gb21pZEdsb2JhbDtpZigndW5kZWZpbmVkJyE9PXR5cGVvZiBnbG9iYWwmJmdsb2JhbClyZXR1cm4gZ2xvYmFsO2lmKCd1bmRlZmluZWQnIT09dHlwZW9mIHdpbmRvdyYmd2luZG93KXJldHVybiB3aW5kb3c7aWYoJ3VuZGVmaW5lZCchPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt2YXIgYT1GdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO2lmKGEpcmV0dXJuIGE7dGhyb3cgRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgZ2xvYmFsIG9iamVjdCBjb250ZXh0LicpO30oKTtmdW5jdGlvbiBSYShhLGIpe3RoaXMuYT1hO3RoaXMuYj1ifXQuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmEucHJvdG90eXBlLHtldmVudDp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX19LG9yaWdpbjp7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYn19fSk7ZnVuY3Rpb24gSihhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107U2EoZnVuY3Rpb24oKXt0aHJvdyBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KEVycm9yLFtudWxsLCdDb3VsZCBub3QgY29tcGxldGUgdGhlIHRlc3Qgc3VjY2Vzc2Z1bGx5IC0gJ10uY29uY2F0KHEoYikpKSk7fSxmdW5jdGlvbigpe3JldHVybiBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUscShiKSl9KX1mdW5jdGlvbiBUYShhKXtmb3IodmFyIGI9W10sYz0wO2M8YXJndW1lbnRzLmxlbmd0aDsrK2MpYltjXT1hcmd1bWVudHNbY107U2EoZnVuY3Rpb24oKXt9LGZ1bmN0aW9uKCl7cmV0dXJuIGNvbnNvbGUuZXJyb3IuYXBwbHkoY29uc29sZSxxKGIpKX0pfQpmdW5jdGlvbiBTYShhLGIpeyd1bmRlZmluZWQnIT09dHlwZW9mIGphc21pbmUmJmphc21pbmU/YSgpOid1bmRlZmluZWQnIT09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUmJmNvbnNvbGUuZXJyb3ImJmIoKX07ZnVuY3Rpb24gVWEoKXt0aGlzLmY9W107dGhpcy5iPVtdO3RoaXMuYz1bXTt0aGlzLmc9W107dGhpcy5pPXt9O3RoaXMuYT1IKCl9ZnVuY3Rpb24gVmEoYSl7YS5mPVtdO2EuYj1bXTthLmM9W107YS5nPVtdO2EuaT17fTtHLmFkU2Vzc2lvbklkPW51bGw7Ry5jPVBhKCk7Ry5vPW51bGw7Ry5HPXZvaWQgMDtHLks9dm9pZCAwO0cuSD1udWxsO0cuST1udWxsO0cuRD1udWxsO0cubT0nZm9yZWdyb3VuZGVkJztHLmk9J25vbmUnO0cubD0nbm9uZSc7Ry51PW51bGw7Ry5CPW51bGw7Ry5iPW51bGw7Ry5hPW51bGw7Ry5oPW51bGw7Ry5mPW51bGw7Ry5nPW51bGw7Ry5qPW51bGw7Ry5DPSEwO0cudj1uZXcgTWFwfQpmdW5jdGlvbiBXYShhLGIpe3ZvaWQgMCE9PWEuYSYmYS5hLmFkU2Vzc2lvbklkJiYhMSE9PVhhKGEsYikmJmEuYy5maWx0ZXIoZnVuY3Rpb24oYyl7cmV0dXJuIGMudHlwZT09PWIuZXZlbnQudHlwZX0pLmZvckVhY2goZnVuY3Rpb24oYyl7cmV0dXJuIGEuaChjLkYsYi5ldmVudCl9KX1mdW5jdGlvbiBZYShhLGIpe2EuZi5wdXNoKGIpO1dhKGEsYil9ZnVuY3Rpb24gWmEoYSxiLGMpe3ZvaWQgMCE9PWEuYSYmYS5hLmFkU2Vzc2lvbklkJiZhLmYuZmlsdGVyKGZ1bmN0aW9uKGQpe3JldHVybiBkLmV2ZW50LnR5cGU9PT1iJiZYYShhLGQpfSkubWFwKGZ1bmN0aW9uKGQpe3JldHVybiBkLmV2ZW50fSkuZm9yRWFjaChjKX0KZnVuY3Rpb24gWGEoYSxiKXt2YXIgYz1iLmV2ZW50LnR5cGUsZD0tMSE9PU9iamVjdC52YWx1ZXMoQSkuaW5kZXhPZihjKSYmJ3ZvbHVtZUNoYW5nZSchPT1jO3JldHVybidpbXByZXNzaW9uJz09PWN8fCdsb2FkZWQnPT09YyYmYS5hLmE/Yi5vcmlnaW49PT1IKCkubDpkP2Iub3JpZ2luPT09SCgpLmk6ITB9ZnVuY3Rpb24gJGEoYSxiLGMpeydtZWRpYSc9PT1ifHwndmlkZW8nPT09Yj9hYihhLGMpOihhLmMucHVzaCh7dHlwZTpiLEY6Y30pLFphKGEsYixjKSl9ZnVuY3Rpb24gYWIoYSxiKXtPYmplY3Qua2V5cyhBKS5mb3JFYWNoKGZ1bmN0aW9uKGMpe2M9QVtjXTthLmMucHVzaCh7dHlwZTpjLEY6Yn0pO1phKGEsYyxiKX0pfWZ1bmN0aW9uIGJiKGEsYixjLGQpe3ZhciBlPXtPOmMsTDpkLEY6Yn07YS5nLnB1c2goZSk7YS5iLmZvckVhY2goZnVuY3Rpb24oZil7dmFyIGw9Y2IoZik7J3Nlc3Npb25TdGFydCc9PT1mLmV2ZW50LnR5cGUmJmRiKGEsbCxlKTthLmgoYixsKX0pfQpmdW5jdGlvbiBlYihhLGIsYyl7dmFyIGQ9SyhhLCdzZXNzaW9uRXJyb3InLCduYXRpdmUnLHtlcnJvclR5cGU6YixtZXNzYWdlOmN9KTthLmIucHVzaChkKTthLmcuZm9yRWFjaChmdW5jdGlvbihlKXthLmgoZS5GLGQuZXZlbnQpfSl9ZnVuY3Rpb24gZmIoYSxiKXthLmk9T2JqZWN0LmFzc2lnbihhLmksYik7Yj1hLmEuYztpZih2b2lkIDAhPT1iKXtiPU9iamVjdC5hc3NpZ24oe30sZ2IoYSxoYihhLHtjb250ZXh0OmJ9KSwhMCkse3N1cHBvcnRzTG9hZGVkRXZlbnQ6ISFhLmEuYXx8J3ZpZGVvJz09YS5hLmJ9KTtPYmplY3QuYXNzaWduKGIse3BhZ2VVcmw6bnVsbCxjb250ZW50VXJsOmEuYS5vfSk7dmFyIGM9SyhhLCdzZXNzaW9uU3RhcnQnLCduYXRpdmUnLGIpO2EuYi5wdXNoKGMpO2EuZy5mb3JFYWNoKGZ1bmN0aW9uKGQpe3ZhciBlPWQuRixmPWNiKGMpO2RiKGEsZixkKTthLmgoZSxmKX0sYSk7aWIoYSl9fQpmdW5jdGlvbiBkYihhLGIsYyl7Yy5PJiYoYi5kYXRhLnZlcmlmaWNhdGlvblBhcmFtZXRlcnM9YS5pW2MuT10pO2MuTCYmKGM9YS5hLnYuZ2V0KGMuTCkpJiYoYi5kYXRhLnZlcmlmaWNhdGlvblBhcmFtZXRlcnM9Yy52ZXJpZmljYXRpb25QYXJhbWV0ZXJzLGIuZGF0YS5jb250ZXh0LmFjY2Vzc01vZGU9Yy5hY2Nlc3NNb2RlLCdmdWxsJz09PWMuYWNjZXNzTW9kZSYmKGEuYS5nJiYoYi5kYXRhLmNvbnRleHQudmlkZW9FbGVtZW50PWEuYS5nKSxhLmEuZiYmKGIuZGF0YS5jb250ZXh0LnNsb3RFbGVtZW50PWEuYS5mKSkpfWZ1bmN0aW9uIGpiKGEpe3ZhciBiPWEuZyxjPUsoYSwnc2Vzc2lvbkZpbmlzaCcsJ25hdGl2ZScpO2EuYi5wdXNoKGMpO3ZhciBkPWEuYS5jO2QmJiduYXRpdmUnPT1kLmFkU2Vzc2lvblR5cGV8fFZhKGEpO2IuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gYS5oKGUuRixjLmV2ZW50KX0pfQpVYS5wcm90b3R5cGUuaD1mdW5jdGlvbihhLGIpe2Zvcih2YXIgYz1bXSxkPTE7ZDxhcmd1bWVudHMubGVuZ3RoOysrZCljW2QtMV09YXJndW1lbnRzW2RdO3RyeXthLmFwcGx5KG51bGwscShjKSl9Y2F0Y2goZSl7VGEoZSl9fTtmdW5jdGlvbiBrYihhLGIpe3ZhciBjPShjPUgoKS5EKT9GYShjKTp2b2lkIDA7Yz1nYihhLGhiKGEsYykpO1lhKGEsSyhhLCdpbXByZXNzaW9uJyxiLGMpKX1mdW5jdGlvbiBsYihhLGIsYyl7aWYoYS5hLmF8fCdkaXNwbGF5JyE9YS5hLmIpYj1LKGEsJ2xvYWRlZCcsYixnYihhLGhiKGEsdm9pZCAwPT09Yz9udWxsOmMpKSksWWEoYSxiKX0KZnVuY3Rpb24gbWIoYSxiLGMsZCl7J3N0YXJ0JyE9PWImJid2b2x1bWVDaGFuZ2UnIT09Ynx8bnVsbCE9KGQmJmQuZGV2aWNlVm9sdW1lKXx8KGQuZGV2aWNlVm9sdW1lPWEuYS51KTtpZihkJiYoJ3N0YXJ0Jz09PWJ8fCd2b2x1bWVDaGFuZ2UnPT09Yikpe3ZhciBlPWQudmlkZW9QbGF5ZXJWb2x1bWUsZj1kLm1lZGlhUGxheWVyVm9sdW1lO251bGwhPWU/KE9iamVjdC5hc3NpZ24oZCx7bWVkaWFQbGF5ZXJWb2x1bWU6ZX0pLGEuYS5CPWUpOm51bGwhPWYmJihPYmplY3QuYXNzaWduKGQse3ZpZGVvUGxheWVyVm9sdW1lOmZ9KSxhLmEuQj1mKX1ZYShhLEsoYSxiLGMsZCkpfQpmdW5jdGlvbiBpYihhKXt2YXIgYj1hLmYuZmlsdGVyKGZ1bmN0aW9uKGYpe3JldHVybiBPYmplY3QudmFsdWVzKEEpLmluY2x1ZGVzKGYuZXZlbnQudHlwZSkmJid2aWRlbyc9PWEuYS5iJiZmLm9yaWdpbj09PWEuYS5pfHwnbG9hZGVkJz09Zi5ldmVudC50eXBlJiYnZGlzcGxheSc9PWEuYS5iJiZmLm9yaWdpbj09PWEuYS5sPyEwOiExfSkubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLmV2ZW50fSksYz1hLmEuYWRTZXNzaW9uSWR8fCcnLGQ9e307Yj1wKGIpO2Zvcih2YXIgZT1iLm5leHQoKTshZS5kb25lO2Q9e3c6ZC53fSxlPWIubmV4dCgpKXtkLnc9ZS52YWx1ZTtkLncuYWRTZXNzaW9uSWR8fChkLncuYWRTZXNzaW9uSWQ9Yyk7aWYoJ2xvYWRlZCc9PWQudy50eXBlKXtpZighYS5hLmEmJidkaXNwbGF5Jz09YS5hLmIpY29udGludWU7ZC53LmRhdGE9Z2IoYSxoYihhLGQudy5kYXRhKSl9YS5jLmZpbHRlcihmdW5jdGlvbihmKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwudHlwZT09PQpmLncudHlwZX19KGQpKS5mb3JFYWNoKGZ1bmN0aW9uKGYpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5GKGYudyl9fShkKSl9fWZ1bmN0aW9uIG5iKGEsYixjKXthOntjPW5ldyBTZXQoYyk7YT1wKGEuZi5jb25jYXQoYS5iKSk7Zm9yKHZhciBkPWEubmV4dCgpOyFkLmRvbmU7ZD1hLm5leHQoKSlpZihkPWQudmFsdWUsYy5oYXMoZC5ldmVudC50eXBlKSYmZC5vcmlnaW4hPWIpe2I9ITA7YnJlYWsgYX1iPSExfXJldHVybiBiPyhKKCdFdmVudCBvd25lciBjYW5ub3QgYmUgcmVnaXN0ZXJlZCBhZnRlciBpdHMgZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIHB1Ymxpc2hlZC4nKSwhMSk6ITB9ZnVuY3Rpb24gb2IoYSxiKXtuYihhLGIsT2JqZWN0LnZhbHVlcyhBKSkmJkwoYSxiKSYmKGEuYS5pPWIpfWZ1bmN0aW9uIHBiKGEsYil7bmIoYSxiLFsnaW1wcmVzc2lvbiddKSYmcWIoYSxiKSYmKGEuYS5sPWIpfQpmdW5jdGlvbiBxYihhLGIpe3ZhciBjPWEuYS5sO3JldHVybidub25lJyE9YyYmYyE9Yj8oSignSW1wcmVzc2lvbiBldmVudCBpcyBvd25lZCBieSAnKyhhLmEubCsnLCBub3QgJykrKGIrJy4nKSksITEpOiEwfWZ1bmN0aW9uIEwoYSxiKXt2YXIgYz1hLmEuaTtyZXR1cm4nbm9uZSchPWMmJmMhPWI/KEooJ01lZGlhIGV2ZW50cyBhcmUgb3duZWQgYnkgJysoYS5hLmkrJywgbm90ICcrYisnLicpKSwhMSk6ITB9ZnVuY3Rpb24gZ2IoYSxiLGMpe2M9dm9pZCAwPT09Yz8hMTpjO2I9T2JqZWN0LmFzc2lnbih7fSxiKTthLmEuYiYmT2JqZWN0LmFzc2lnbihiLHttZWRpYVR5cGU6YS5hLmJ9KTthLmEuYSYmKGN8fCdkZWZpbmVkQnlKYXZhU2NyaXB0JyE9PWEuYS5hKSYmT2JqZWN0LmFzc2lnbihiLHtjcmVhdGl2ZVR5cGU6YS5hLmF9KTtyZXR1cm4gYn1mdW5jdGlvbiBoYihhLGIpe3JldHVybiBhLmEuaD9PYmplY3QuYXNzaWduKHt9LGIse2ltcHJlc3Npb25UeXBlOmEuYS5ofSk6Yn0KZnVuY3Rpb24gSyhhLGIsYyxkKXtyZXR1cm4gbmV3IFJhKHthZFNlc3Npb25JZDphLmEuYWRTZXNzaW9uSWR8fCcnLHRpbWVzdGFtcDoobmV3IERhdGUpLmdldFRpbWUoKSx0eXBlOmIsZGF0YTpkfSxjKX1mdW5jdGlvbiBjYihhKXthPWEuZXZlbnQ7cmV0dXJue2FkU2Vzc2lvbklkOmEuYWRTZXNzaW9uSWQsdGltZXN0YW1wOmEudGltZXN0YW1wLHR5cGU6YS50eXBlLGRhdGE6YS5kYXRhfX07ZnVuY3Rpb24gcmIoYSxiLGMpeydjb250YWluZXInPT09YiYmdm9pZCAwIT09YS5hLkcmJnZvaWQgMCE9PWEuYSYmbnVsbCE9YS5hLmFkU2Vzc2lvbklkJiYoYS5hLkg9TWEoYS5jLGEuYS5HLGEuYS5tLGEuYS5hZFNlc3Npb25JZCwhMCkpO2I9YS5hO3ZhciBkPWIuSCxlPWIuSTtpZihkKWlmKGUpe2I9bmV3IEVhO3ZhciBmPWQuaixsPWQuYSxnPWQuYixoPWUuYSxrPWUuYjtmJiZsJiZnJiZoJiZrJiYoR2EoYixmKSxiLmw9bmV3IEIobCwhMSksYi52PW5ldyBCKGcsITEpLGIuaT1PYmplY3QuYXNzaWduKFtdLGQuaSksYi5jPU9iamVjdC5hc3NpZ24oW10sZC5jKSxiLmg9T2JqZWN0LmFzc2lnbihbXSxkLmgpLGIubz1PYmplY3QuYXNzaWduKFtdLGQubyksYi5mPU9iamVjdC5hc3NpZ24oW10sZS5mLGQuZiksZD1iLmwueCxlPWIubC55LGg9bmV3IEIoaCwhMSksaz1uZXcgQihrLCExKSx4YShoLGQsZSkseGEoayxkLGUpLGIuYT1oLGIuYj1JYShrLGcpLEthKGIpKX1lbHNlIGI9ZDtlbHNlIGI9Cm51bGw7Zz1hLmEuRDtpZihiJiYhYi5KKGcpfHxjKWc9RmEoYiksYyYmKGcuYWRWaWV3LnJlYXNvbnM9Zy5hZFZpZXcucmVhc29uc3x8W2NdKSxjPWEuYiwnYXVkaW8nIT1jLmEuYSYmWWEoYyxLKGMsJ2dlb21ldHJ5Q2hhbmdlJywnbmF0aXZlJyxnKSksYS5hLkQ9Yn07ZnVuY3Rpb24gTShhKXtyZXR1cm4nb2JqZWN0Jz09PXR5cGVvZiBhfWZ1bmN0aW9uIHNiKGEpe3JldHVybidudW1iZXInPT09dHlwZW9mIGEmJiFpc05hTihhKSYmMDw9YX1mdW5jdGlvbiBOKGEpe3JldHVybidzdHJpbmcnPT09dHlwZW9mIGF9ZnVuY3Rpb24gTyhhLGIpe3JldHVybiBOKGEpJiYtMSE9PU9iamVjdC52YWx1ZXMoYikuaW5kZXhPZihhKX1mdW5jdGlvbiB0YihhKXtyZXR1cm4hKCFhfHwhYS50YWdOYW1lfHwnaWZyYW1lJyE9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpKX07ZnVuY3Rpb24gUChhLGIsYyl7dGhpcy5mPWE7dGhpcy5LPWI7dGhpcy5HPWM7dGhpcy5jPUgoKTt0aGlzLmI9bnVsbDt0aGlzLmE9dGhpcy5nPXRoaXMudT12b2lkIDA7dGhpcy5JPSEwO3RoaXMuQj12b2lkIDA7USh0aGlzKX1mdW5jdGlvbiBRKGEpe2lmKCFhLmIpe3ZhciBiO2E6e2lmKChiPWEuZi5kb2N1bWVudCkmJmIuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSYmKGI9Yi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdvbWlkLWVsZW1lbnQnKSkpe2lmKDE9PWIubGVuZ3RoKXtiPWJbMF07YnJlYWsgYX0xPGIubGVuZ3RoJiZhLkkmJihlYihhLkcsJ2dlbmVyaWMnLCJNb3JlIHRoYW4gb25lIGVsZW1lbnQgd2l0aCAnb21pZC1lbGVtZW50JyBjbGFzcyBuYW1lLiIpLGEuST0hMSl9Yj1udWxsfWlmKGImJmIudGFnTmFtZSYmJ3ZpZGVvJz09PWIudGFnTmFtZS50b0xvd2VyQ2FzZSgpKWEuYy5nPWI7ZWxzZSBpZihiJiZiLnRhZ05hbWUpYS5jLmY9YjtlbHNlIHJldHVybjt1YihhKX19CmZ1bmN0aW9uIHViKGEpe2EuYy5nPyhhLmI9YS5jLmcsYS5pKCkpOmEuYy5mJiYoYS5iPWEuYy5mLHRiKGEuYik/YS5jLmomJmEuaSgpOmEuaSgpKX1mdW5jdGlvbiB2YihhKXthLmEmJih0YihhLmIpP2EuYy5qJiYoYS5EKCksd2IoYSkpOihhLkQoKSx3YihhKSkpfVAucHJvdG90eXBlLm09ZnVuY3Rpb24oKXt0aGlzLkImJih0aGlzLmYuZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsdGhpcy5CKSx0aGlzLkI9dm9pZCAwKX07UC5wcm90b3R5cGUuaT1mdW5jdGlvbigpe307ZnVuY3Rpb24gd2IoYSl7YS51JiYoYS5jLkk9YS51LHJiKGEuSywnY3JlYXRpdmUnKSl9ZnVuY3Rpb24geGIoYSl7aWYoYS5hJiZhLmMuail7dmFyIGI9bmV3IEIoYS5jLmosITEpO3hhKGIsYS5hLngsYS5hLnkpO2IuY2xpcHNUb0JvdW5kcz0hMDtyZXR1cm4gYn19O2Z1bmN0aW9uIHliKGEsYixjKXtyZXR1cm4gemIoYSwnc2V0SW50ZXJ2YWwnKShiLGMpfWZ1bmN0aW9uIEFiKGEsYil7emIoYSwnY2xlYXJJbnRlcnZhbCcpKGIpfWZ1bmN0aW9uIEJiKGEsYil7emIoYSwnY2xlYXJUaW1lb3V0JykoYil9ZnVuY3Rpb24gemIoYSxiKXtyZXR1cm4gYS5hJiZhLmFbYl0/YS5hW2JdOkNiKGEsYil9CmZ1bmN0aW9uIERiKGEsYixjLGQpe2lmKGEuYS5kb2N1bWVudCYmYS5hLmRvY3VtZW50LmJvZHkpe3ZhciBlPWEuYS5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtlLndpZHRoPTE7ZS5oZWlnaHQ9MTtlLnN0eWxlLmRpc3BsYXk9J25vbmUnO2Uuc3JjPWI7YyYmZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJyxmdW5jdGlvbigpe3JldHVybiBjKCl9KTtkJiZlLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJyxmdW5jdGlvbigpe3JldHVybiBkKCl9KTthLmEuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKX1lbHNlIENiKGEsJ3NlbmRVcmwnKShiLGMsZCl9ZnVuY3Rpb24gQ2IoYSxiKXtpZihhLmEmJmEuYS5vbWlkTmF0aXZlJiZhLmEub21pZE5hdGl2ZVtiXSlyZXR1cm4gYS5hLm9taWROYXRpdmVbYl0uYmluZChhLmEub21pZE5hdGl2ZSk7dGhyb3cgRXJyb3IoJ05hdGl2ZSBpbnRlcmZhY2UgbWV0aG9kICInK2IrJyIgbm90IGZvdW5kLicpO307ZnVuY3Rpb24gUihhLGIsYyxkLGUpe1AuY2FsbCh0aGlzLGEsYyxlKTt0aGlzLmw9Yjt0aGlzLmg9dm9pZCAwO3RoaXMuaj1kfXIoUixQKTtSLnByb3RvdHlwZS5tPWZ1bmN0aW9uKCl7dm9pZCAwIT09dGhpcy5oJiYoQWIodGhpcy5qLHRoaXMuaCksdGhpcy5oPXZvaWQgMCk7UC5wcm90b3R5cGUubS5jYWxsKHRoaXMpfTtSLnByb3RvdHlwZS5pPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcztQLnByb3RvdHlwZS5pLmNhbGwodGhpcyk7bnVsbD09dGhpcy5iP3RoaXMuaD12b2lkIDA6dm9pZCAwPT09dGhpcy5oJiYodGhpcy5oPXliKHRoaXMuaixmdW5jdGlvbigpe3JldHVybiBFYihhKX0sMjAwKSxFYih0aGlzKSl9OwpSLnByb3RvdHlwZS5EPWZ1bmN0aW9uKCl7aWYodGhpcy5nKXt2YXIgYT14Yih0aGlzKTtpZihhKXt0aGlzLmEuaXNDcmVhdGl2ZT0hMTthLmlzQ3JlYXRpdmU9ITA7Zm9yKHZhciBiPSExLGM9MDtjPHRoaXMuYS5jaGlsZFZpZXdzLmxlbmd0aDtjKyspaWYodGhpcy5hLmNoaWxkVmlld3NbY10uaXNDcmVhdGl2ZSl7dGhpcy5hLmNoaWxkVmlld3NbY109YTtiPSEwO2JyZWFrfWJ8fHRoaXMuYS5jaGlsZFZpZXdzLnB1c2goYSl9ZWxzZSB0aGlzLmEuaXNDcmVhdGl2ZT0hMDt0aGlzLnU9TWEodGhpcy5sLHRoaXMuZyx0aGlzLmMubSx0aGlzLmMuYWRTZXNzaW9uSWQsdGhpcy5DKCkpfX07Ui5wcm90b3R5cGUuQz1mdW5jdGlvbigpe3JldHVybiEwfTsKZnVuY3Rpb24gRWIoYSl7aWYodm9pZCAwIT09YS5oKXtiOnt0cnl7dmFyIGI9YS5mLnRvcDt2YXIgYz0wPD1iLmlubmVySGVpZ2h0JiYwPD1iLmlubmVyV2lkdGg7YnJlYWsgYn1jYXRjaChkKXt9Yz0hMX1jPyhjPWEuZi50b3AsYz1uZXcgQihuZXcgT2EoYy5pbm5lcldpZHRoLGMuaW5uZXJIZWlnaHQpLCExKSk6Yz1uZXcgQihuZXcgT2EoMCwwKSwhMSk7Yj1hLmIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYobnVsbD09Yi54fHxpc05hTihiLngpKWIueD1iLmxlZnQ7aWYobnVsbD09Yi55fHxpc05hTihiLnkpKWIueT1iLnRvcDtiPW5ldyBCKGIsITEpO2MuSihhLmcpJiZiLkooYS5hKXx8KGEuYT1iLGEuYS5jbGlwc1RvQm91bmRzPSEwLGEuZz1jLGEuZy5jaGlsZFZpZXdzLnB1c2goYS5hKSx2YihhKSl9fTtmdW5jdGlvbiBTKGEsYixjLGQpe1AuY2FsbCh0aGlzLGEsYyxkKTt0aGlzLm89dGhpcy5qPXRoaXMubD10aGlzLmg9dm9pZCAwO3RoaXMuSD0hMTt0aGlzLnY9dm9pZCAwfXIoUyxQKTtTLnByb3RvdHlwZS5tPWZ1bmN0aW9uKCl7dGhpcy5oJiZ0aGlzLmguZGlzY29ubmVjdCgpO0ZiKHRoaXMpO1AucHJvdG90eXBlLm0uY2FsbCh0aGlzKX07Uy5wcm90b3R5cGUuaT1mdW5jdGlvbigpe1AucHJvdG90eXBlLmkuY2FsbCh0aGlzKTt0aGlzLmImJih0aGlzLmh8fCh0aGlzLmg9R2IodGhpcykpLEhiKHRoaXMpLEliKHRoaXMuYikmJkpiKHRoaXMpKX07ClMucHJvdG90eXBlLkQ9ZnVuY3Rpb24oKXtpZih0aGlzLmEmJnRoaXMudil7dmFyIGE9eGIodGhpcyk7aWYoYSl7dmFyIGI9YTt2YXIgYz10aGlzLnY7dmFyIGQ9TWF0aC5tYXgoYS54LGMueCk7dmFyIGU9TWF0aC5tYXgoYS55LGMueSksZj1NYXRoLm1pbihhLmVuZFgsYy5lbmRYKTthPU1hdGgubWluKGEuZW5kWSxjLmVuZFkpO2Y8PWR8fGE8PWU/ZD1udWxsOihjPXt9LGQ9bmV3IEIoKGMueD1kLGMueT1lLGMud2lkdGg9TWF0aC5hYnMoZi1kKSxjLmhlaWdodD1NYXRoLmFicyhhLWUpLGMpLCExKSk7ZHx8KGQ9bmV3IEIoe3g6MCx5OjAsd2lkdGg6MCxoZWlnaHQ6MH0sITEpKX1lbHNlIGI9dGhpcy5hLGQ9dGhpcy52O2U9bmV3IEVhO3RoaXMuZyYmR2EoZSx0aGlzLmcpO2UuYT1iO2UuYj1kO0thKGUpO3RoaXMuSD96YShlLmEpP0QoZSwnaGlkZGVuJyk6MTAwPT09ZS5tfHxEKGUsJ2NsaXBwZWQnKTpEKGUsJ3ZpZXdwb3J0Jyk7dGhpcy51PWV9fTtTLnByb3RvdHlwZS5DPWZ1bmN0aW9uKCl7cmV0dXJuITB9OwpmdW5jdGlvbiBGYihhKXthLmwmJihhLmwuZGlzY29ubmVjdCgpLGEubD12b2lkIDApO2EuaiYmKGEuai5kaXNjb25uZWN0KCksYS5qPXZvaWQgMCk7YS5vJiYoKDAsYS5mLnJlbW92ZUV2ZW50TGlzdGVuZXIpKCdyZXNpemUnLGEubyksYS5vPXZvaWQgMCl9ZnVuY3Rpb24gSGIoYSl7YS5oJiZhLmImJihhLmgudW5vYnNlcnZlKGEuYiksYS5oLm9ic2VydmUoYS5iKSl9ZnVuY3Rpb24gSWIoYSl7YT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybiAwPT1hLndpZHRofHwwPT1hLmhlaWdodH0KZnVuY3Rpb24gR2IoYSl7cmV0dXJuIG5ldyBhLmYuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oYil7dHJ5e2lmKGIubGVuZ3RoKXtmb3IodmFyIGMsZD1iWzBdLGU9MTtlPGIubGVuZ3RoO2UrKyliW2VdLnRpbWU+ZC50aW1lJiYoZD1iW2VdKTtjPWQ7YS5nPUtiKGMucm9vdEJvdW5kcyk7YS5hPUtiKGMuYm91bmRpbmdDbGllbnRSZWN0KTthLnY9S2IoYy5pbnRlcnNlY3Rpb25SZWN0KTthLkg9ISFjLmlzSW50ZXJzZWN0aW5nO3ZiKGEpfX1jYXRjaChmKXthLm0oKSxlYihhLkcsJ2dlbmVyaWMnLCdQcm9ibGVtIGhhbmRsaW5nIEludGVyc2VjdGlvbk9ic2VydmVyIGNhbGxiYWNrOiAnK2YubWVzc2FnZSl9fSx7cm9vdDpudWxsLHJvb3RNYXJnaW46JzBweCcsdGhyZXNob2xkOlswLC4xLC4yLC4zLC40LC41LC42LC43LC44LC45LDFdfSl9CmZ1bmN0aW9uIEpiKGEpe2EuZi5SZXNpemVPYnNlcnZlcj9hLmx8fChhLmw9TWIoYSxmdW5jdGlvbigpe3JldHVybiBOYihhKX0pLGEubC5vYnNlcnZlKGEuYikpOihhLm98fChhLm89ZnVuY3Rpb24oKXtyZXR1cm4gTmIoYSl9LCgwLGEuZi5hZGRFdmVudExpc3RlbmVyKSgncmVzaXplJyxhLm8pKSxhLmp8fChhLmo9bmV3IE11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtyZXR1cm4gTmIoYSl9KSxhLmoub2JzZXJ2ZShhLmIse2NoaWxkTGlzdDohMSxhdHRyaWJ1dGVzOiEwLHN1YnRyZWU6ITF9KSkpfWZ1bmN0aW9uIE5iKGEpe2EuYiYmIUliKGEuYikmJihIYihhKSxGYihhKSl9ZnVuY3Rpb24gTWIoYSxiKXtyZXR1cm4gbmV3IGEuZi5SZXNpemVPYnNlcnZlcihiKX1mdW5jdGlvbiBLYihhKXtpZihhJiZudWxsIT09YS54JiZudWxsIT09YS55JiZudWxsIT09YS53aWR0aCYmbnVsbCE9PWEuaGVpZ2h0KXJldHVybiBuZXcgQihhLCExKX07ZnVuY3Rpb24gT2IoYSl7cmV0dXJuIGEmJk0oYSk/T2JqZWN0LmVudHJpZXMoYSkucmVkdWNlKGZ1bmN0aW9uKGIsYyl7dmFyIGQ9cChjKTtjPWQubmV4dCgpLnZhbHVlO2Q9ZC5uZXh0KCkudmFsdWU7cmV0dXJuIGImJk4oYykmJm51bGwhPWQmJk0oZCkmJk4oZC5yZXNvdXJjZVVybCl9LCEwKTohMX07ZnVuY3Rpb24gVChhLGIsYyxkKXt0aGlzLmI9YTt0aGlzLm1ldGhvZD1iO3RoaXMudmVyc2lvbj1jO3RoaXMuYT1kfWZ1bmN0aW9uIFBiKGEpe3JldHVybiEhYSYmdm9pZCAwIT09YS5vbWlkX21lc3NhZ2VfZ3VpZCYmdm9pZCAwIT09YS5vbWlkX21lc3NhZ2VfbWV0aG9kJiZ2b2lkIDAhPT1hLm9taWRfbWVzc2FnZV92ZXJzaW9uJiYnc3RyaW5nJz09PXR5cGVvZiBhLm9taWRfbWVzc2FnZV9ndWlkJiYnc3RyaW5nJz09PXR5cGVvZiBhLm9taWRfbWVzc2FnZV9tZXRob2QmJidzdHJpbmcnPT09dHlwZW9mIGEub21pZF9tZXNzYWdlX3ZlcnNpb24mJih2b2lkIDA9PT1hLm9taWRfbWVzc2FnZV9hcmdzfHx2b2lkIDAhPT1hLm9taWRfbWVzc2FnZV9hcmdzKX1mdW5jdGlvbiBRYihhKXtyZXR1cm4gbmV3IFQoYS5vbWlkX21lc3NhZ2VfZ3VpZCxhLm9taWRfbWVzc2FnZV9tZXRob2QsYS5vbWlkX21lc3NhZ2VfdmVyc2lvbixhLm9taWRfbWVzc2FnZV9hcmdzKX0KZnVuY3Rpb24gUmIoYSl7dmFyIGI9e307Yj0oYi5vbWlkX21lc3NhZ2VfZ3VpZD1hLmIsYi5vbWlkX21lc3NhZ2VfbWV0aG9kPWEubWV0aG9kLGIub21pZF9tZXNzYWdlX3ZlcnNpb249YS52ZXJzaW9uLGIpO3ZvaWQgMCE9PWEuYSYmKGIub21pZF9tZXNzYWdlX2FyZ3M9YS5hKTtyZXR1cm4gYn07ZnVuY3Rpb24gU2IoYSl7dGhpcy5jPWF9O2Z1bmN0aW9uIFUoYSl7dGhpcy5jPWE7dGhpcy5oYW5kbGVFeHBvcnRlZE1lc3NhZ2U9VS5wcm90b3R5cGUuZi5iaW5kKHRoaXMpfXIoVSxTYik7VS5wcm90b3R5cGUuYj1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj90aGlzLmM6YjtpZighYil0aHJvdyBFcnJvcignTWVzc2FnZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGRlZmluZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgb3Igd2hlbiBzZW5kaW5nIHRoZSBtZXNzYWdlLicpO2IuaGFuZGxlRXhwb3J0ZWRNZXNzYWdlKFJiKGEpLHRoaXMpfTtVLnByb3RvdHlwZS5mPWZ1bmN0aW9uKGEsYil7UGIoYSkmJnRoaXMuYSYmdGhpcy5hKFFiKGEpLGIpfTtmdW5jdGlvbiBUYihhLGIpe3RoaXMuYz1iPXZvaWQgMD09PWI/STpiO3ZhciBjPXRoaXM7YS5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJyxmdW5jdGlvbihkKXtpZignb2JqZWN0Jz09PXR5cGVvZiBkLmRhdGEpe3ZhciBlPWQuZGF0YTtQYihlKSYmZC5zb3VyY2UmJmMuYSYmYy5hKFFiKGUpLGQuc291cmNlKX19KX1yKFRiLFNiKTtUYi5wcm90b3R5cGUuYj1mdW5jdGlvbihhLGIpe2I9dm9pZCAwPT09Yj90aGlzLmM6YjtpZighYil0aHJvdyBFcnJvcignTWVzc2FnZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGRlZmluZWQgYXQgY29uc3RydWN0aW9uIHRpbWUgb3Igd2hlbiBzZW5kaW5nIHRoZSBtZXNzYWdlLicpO2IucG9zdE1lc3NhZ2UoUmIoYSksJyonKX07ZnVuY3Rpb24gVWIoKXtyZXR1cm4neHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csZnVuY3Rpb24oYSl7dmFyIGI9MTYqTWF0aC5yYW5kb20oKXwwO3JldHVybid5Jz09PWE/KGImM3w4KS50b1N0cmluZygxNik6Yi50b1N0cmluZygxNil9KX07ZnVuY3Rpb24gVmIoYSl7aWYoIWEuYXx8IWEuYS5kb2N1bWVudCl0aHJvdyBFcnJvcignT01JRCBTZXJ2aWNlIFNjcmlwdCBpcyBub3QgcnVubmluZyB3aXRoaW4gYSB3aW5kb3cuJyk7dmFyIGI9YS5iO2EuYj1bXTtiLmZvckVhY2goZnVuY3Rpb24oYyl7dHJ5e3ZhciBkPWEuYy5DPydsaW1pdGVkJzonZnVsbCcsZT1PKGMuYWNjZXNzTW9kZSxzYSk/Yy5hY2Nlc3NNb2RlOm51bGw7dmFyIGY9ZT8nZnVsbCc9PWUmJidsaW1pdGVkJz09ZD9kOidkb21haW4nPT1lPydsaW1pdGVkJzplOmQ7Yy5hY2Nlc3NNb2RlPWY7YTp7dmFyIGw9Yy5yZXNvdXJjZVVybCxnPWEuYS5sb2NhdGlvbi5vcmlnaW47dHJ5e3ZhciBoPW5ldyBVUkwobCxnKTticmVhayBhfWNhdGNoKFYpe310cnl7aD1uZXcgVVJMKGwpO2JyZWFrIGF9Y2F0Y2goVil7fWg9bnVsbH1pZihkPWgpe3ZhciBrPVViKCksbT1hLmEuZG9jdW1lbnQsdT1tLmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpO3UuaWQ9J29taWQtdmVyaWZpY2F0aW9uLXNjcmlwdC1mcmFtZS0nKwprO3Uuc3R5bGUuZGlzcGxheT0nbm9uZSc7WydmdWxsJywnbGltaXRlZCddLmluY2x1ZGVzKGYpP3Uuc3JjZG9jPSI8aHRtbD48aGVhZD5cbjxzY3JpcHQgdHlwZT1cInRleHQvamF2YXNjcmlwdFwiPndpbmRvd1snb21pZFZlcmlmaWNhdGlvblByb3BlcnRpZXMnXSA9IHtcbidzZXJ2aWNlV2luZG93Jzogd2luZG93LnBhcmVudCxcbidpbmplY3Rpb25Tb3VyY2UnOiAnYXBwJyxcbidpbmplY3Rpb25JZCc6ICciKyhrKydcJyxcbn07XHgzYy9zY3JpcHQ+XG48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInKStkLmhyZWYrJyI+XHgzYy9zY3JpcHQ+XG48L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4nOidkb21haW4nPT1mJiYodS5zcmM9V2IoYSxrLGQpLmhyZWYpO1snZG9tYWluJywnbGltaXRlZCddLmluY2x1ZGVzKGYpJiYodS5zYW5kYm94PSdhbGxvdy1zY3JpcHRzJyk7bS5ib2R5LmFwcGVuZENoaWxkKHUpO3ZhciB3PWMudmVuZG9yS2V5LEU9Yy52ZXJpZmljYXRpb25QYXJhbWV0ZXJzOwp3PXZvaWQgMD09PXc/Jyc6dztFPXZvaWQgMD09PUU/Jyc6RTt3JiYnc3RyaW5nJz09PXR5cGVvZiB3JiYnJyE9PXcmJkUmJidzdHJpbmcnPT09dHlwZW9mIEUmJicnIT09RSYmKGEuZi5pW3ddPUUpO2EuYy52LnNldChrLGMpfX1jYXRjaChWKXtUYSgnT01JRCB2ZXJpZmljYXRpb24gc2NyaXB0ICcrYy5yZXNvdXJjZVVybCsnIGZhaWxlZCB0byBsb2FkOiAnK1YpfX0pfQpmdW5jdGlvbiBXYihhLGIsYyl7dmFyIGQ9Jy8ud2VsbC1rbm93bi9vbWlkL29tbG9hZGVyLXYxLmh0bWwjJzsobmV3IE1hcChbWyd2ZXJpZmljYXRpb25TY3JpcHRVcmwnLGMuaHJlZl0sWydpbmplY3Rpb25JZCcsYl1dKSkuZm9yRWFjaChmdW5jdGlvbihlLGYpe2QrPWVuY29kZVVSSUNvbXBvbmVudChmKSsnPScrZW5jb2RlVVJJQ29tcG9uZW50KGUpKycmJ30pO2I9bnVsbDt0cnl7Yj1uZXcgVVJMKGQsYS5hLnBhcmVudC5sb2NhdGlvbi5vcmlnaW4pfWNhdGNoKGUpe3Rocm93IEVycm9yKCdPTUlEIFNlcnZpY2UgU2NyaXB0IGNhbm5vdCBhY2Nlc3MgdGhlIHBhcmVudCB3aW5kb3cuJyk7fXJldHVybiBifTtmdW5jdGlvbiBYYigpe3ZhciBhPVliLGI9WmIsYz10aGlzO3RoaXMuYz1YO3RoaXMuYj1hO3RoaXMuYT1IKCk7dGhpcy5nPWI7dGhpcy5mPSExO3RoaXMucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXIoZnVuY3Rpb24oZCl7cmV0dXJuICRiKGMsZCl9KX1uPVhiLnByb3RvdHlwZTtuLnJlZ2lzdGVyU2Vzc2lvbk9ic2VydmVyPWZ1bmN0aW9uKGEpe2JiKHRoaXMuYyxhKX07bi5zZXRTbG90RWxlbWVudD1mdW5jdGlvbihhKXthJiZhLnRhZ05hbWU/KHRoaXMuYS5mPWEsdGhpcy5iJiZ1Yih0aGlzLmIpKTpKKCdzZXRTbG90RWxlbWVudCBjYWxsZWQgd2l0aCBhIG5vbi1IVE1MRWxlbWVudC4gIEl0IHdpbGwgYmUgaWdub3JlZC4nKX07bi5zZXRFbGVtZW50Qm91bmRzPWZ1bmN0aW9uKGEpe3RoaXMuYS5qPWE7dGhpcy5iJiZ1Yih0aGlzLmIpO3RoaXMuYiYmdmIodGhpcy5iKX07bi5lcnJvcj1mdW5jdGlvbihhLGIpe2ViKHRoaXMuYyxhLGIpfTsKbi5yZWdpc3RlckFkRXZlbnRzPWZ1bmN0aW9uKCl7cGIodGhpcy5jLCdqYXZhc2NyaXB0Jyl9O24ucmVnaXN0ZXJNZWRpYUV2ZW50cz1mdW5jdGlvbigpe29iKHRoaXMuYywnamF2YXNjcmlwdCcpfTtmdW5jdGlvbiBZKGEsYixjKXsnaW1wcmVzc2lvbic9PWI/cWIoYS5jLCdqYXZhc2NyaXB0JykmJihrYihhLmMsJ2phdmFzY3JpcHQnKSxhLmImJlEoYS5iKSk6KCdsb2FkZWQnPT1iPyhjPXZvaWQgMD09PWM/bnVsbDpjLEwoYS5jLCdqYXZhc2NyaXB0JykmJmxiKGEuYywnamF2YXNjcmlwdCcsYykpOkwoYS5jLCdqYXZhc2NyaXB0JykmJm1iKGEuYyxiLCdqYXZhc2NyaXB0JyxjKSxbJ2xvYWRlZCcsJ3N0YXJ0J10uaW5jbHVkZXMoYikmJmEuYiYmUShhLmIpKX1uLmluamVjdFZlcmlmaWNhdGlvblNjcmlwdFJlc291cmNlcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLmc7Yi5iLnB1c2guYXBwbHkoYi5iLHEoYSkpO2lmKHRoaXMuZil0cnl7VmIodGhpcy5nKX1jYXRjaChjKXtKKGMubWVzc2FnZSl9fTsKbi5zZXRDcmVhdGl2ZVR5cGU9ZnVuY3Rpb24oYSxiKXtiPXZvaWQgMD09PWI/bnVsbDpiO2lmKCF0aGlzLmEuYnx8dGhpcy5hLmEpdGhpcy5hLmE9YSwndmlkZW8nPT1hfHwnYXVkaW8nPT1hP3RoaXMuYS5iPSd2aWRlbyc6J2h0bWxEaXNwbGF5Jz09YXx8J25hdGl2ZURpc3BsYXknPT1hP3RoaXMuYS5iPSdkaXNwbGF5JzonZGVmaW5lZEJ5SmF2YVNjcmlwdCc9PWEmJmImJih0aGlzLmEuYj0nbm9uZSc9PWI/J2Rpc3BsYXknOid2aWRlbycpfTtuLnNldEltcHJlc3Npb25UeXBlPWZ1bmN0aW9uKGEpe2lmKCF0aGlzLmEuYnx8dGhpcy5hLmEpdGhpcy5hLmg9YX07CmZ1bmN0aW9uICRiKGEsYil7aWYoJ3Nlc3Npb25TdGFydCc9PT1iLnR5cGUpe2EuZj0hMDt0cnl7VmIoYS5nKX1jYXRjaChjKXtKKGMubWVzc2FnZSl9fSdzZXNzaW9uRmluaXNoJz09PWIudHlwZSYmKGEuZj0hMSwoYj1IKCkuYykmJiduYXRpdmUnPT1iLmFkU2Vzc2lvblR5cGV8fGEucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXIoZnVuY3Rpb24oYyl7cmV0dXJuICRiKGEsYyl9KSl9bi5zZXRDbGllbnRJbmZvPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD10aGlzLmEuY3x8e307ZC5vbWlkSnNJbmZvPU9iamVjdC5hc3NpZ24oe30sZC5vbWlkSnNJbmZvLHtzZXNzaW9uQ2xpZW50VmVyc2lvbjphLHBhcnRuZXJOYW1lOmIscGFydG5lclZlcnNpb246Y30pO3RoaXMuYS5jPWQ7cmV0dXJuIHRoaXMuYS5jLm9taWRKc0luZm8uc2VydmljZVZlcnNpb259O2Z1bmN0aW9uIGFjKGEpe3JldHVybi9cZCtcLlxkK1wuXGQrKC0uKik/Ly50ZXN0KGEpfWZ1bmN0aW9uIGJjKGEpe2E9YS5zcGxpdCgnLScpWzBdLnNwbGl0KCcuJyk7Zm9yKHZhciBiPVsnMScsJzAnLCczJ10sYz0wOzM+YztjKyspe3ZhciBkPXBhcnNlSW50KGFbY10sMTApLGU9cGFyc2VJbnQoYltjXSwxMCk7aWYoZD5lKWJyZWFrO2Vsc2UgaWYoZDxlKXJldHVybiExfXJldHVybiEwfTtmdW5jdGlvbiBjYyhhLGIpe3JldHVybiBhYyhhKSYmYmMoYSk/Yj9iOltdOmImJidzdHJpbmcnPT09dHlwZW9mIGI/SlNPTi5wYXJzZShiKTpbXX07ZnVuY3Rpb24gZGMoKXt2YXIgYT1lYzt2YXIgYj12b2lkIDA9PT1iP29taWRHbG9iYWw6Yjt0aGlzLmE9YTt0aGlzLmY9Yjt0aGlzLmI9bmV3IFU7dGhpcy5mLm9taWQ9dGhpcy5mLm9taWR8fHt9O3RoaXMuZi5vbWlkLnYxX1Nlc3Npb25TZXJ2aWNlQ29tbXVuaWNhdGlvbj10aGlzLmI7dGhpcy5jPWImJmIuYWRkRXZlbnRMaXN0ZW5lciYmYi5wb3N0TWVzc2FnZT9uZXcgVGIoYik6bnVsbDt0aGlzLmc9bnVsbDt0aGlzLmIuYT10aGlzLmguYmluZCh0aGlzKTt0aGlzLmMmJih0aGlzLmMuYT10aGlzLmkuYmluZCh0aGlzKSl9ZGMucHJvdG90eXBlLmg9ZnVuY3Rpb24oYSxiKXtmYyh0aGlzLGEsYix0aGlzLmIpfTsKZGMucHJvdG90eXBlLmk9ZnVuY3Rpb24oYSxiKXt0aGlzLmd8fCh0aGlzLmc9Yik7dGhpcy5nIT1iP0ooJ1RoZSBzb3VyY2Ugd2luZG93IG9mIHNlc3Npb24gY2xpZW50IHBvc3QgbWVzc2FnZXMgY2Fubm90IGJlIGNoYW5nZWQgZnJvbSB0aGUgc291cmNlIG9mIHRoZSBmaXJzdCBtZXNzYWdlLicpOmZjKHRoaXMsYSxiLHRoaXMuYyl9OwpmdW5jdGlvbiBmYyhhLGIsYyxkKXtmdW5jdGlvbiBlKGgpe2Zvcih2YXIgaz1bXSxtPTA7bTxhcmd1bWVudHMubGVuZ3RoOysrbSlrW21dPWFyZ3VtZW50c1ttXTtrPW5ldyBUKGYsJ3Jlc3BvbnNlJyxnLGFjKGcpJiZiYyhnKT9rOkpTT04uc3RyaW5naWZ5KGspKTtkLmIoayxjKX12YXIgZj1iLmIsbD1iLm1ldGhvZCxnPWIudmVyc2lvbjtiPWNjKGcsYi5hKTt0cnl7Z2MoYSxsLGUsYil9Y2F0Y2goaCl7ZC5iKG5ldyBUKGYsJ2Vycm9yJyxnLCdcbiAgICAgICAgbmFtZTogJytoLm5hbWUrJ1xuICAgICAgICBtZXNzYWdlOiAnK2gubWVzc2FnZSsnXG4gICAgICAgIGZpbGVuYW1lOiAnK2guZmlsZW5hbWUrJ1xuICAgICAgICBsaW5lTnVtYmVyOiAnK2gubGluZU51bWJlcisnXG4gICAgICAgIGNvbHVtbk51bWJlcjogJytoLmNvbHVtbk51bWJlcisnXG4gICAgICAgIHN0YWNrOiAnK2guc3RhY2srJ1xuICAgICAgICB0b1N0cmluZygpOiAnK2gudG9TdHJpbmcoKSksYyl9fQpmdW5jdGlvbiBnYyhhLGIsYyxkKXtzd2l0Y2goYil7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucmVnaXN0ZXJBZEV2ZW50cyc6YS5hLnJlZ2lzdGVyQWRFdmVudHMoKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5yZWdpc3Rlck1lZGlhRXZlbnRzJzphLmEucmVnaXN0ZXJNZWRpYUV2ZW50cygpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2Vzc2lvbk9ic2VydmVyJzphLmEucmVnaXN0ZXJTZXNzaW9uT2JzZXJ2ZXIoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0U2xvdEVsZW1lbnQnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLnNldFNsb3RFbGVtZW50KGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldFZpZGVvRWxlbWVudCc6Yz1wKGQpLm5leHQoKS52YWx1ZTthPWEuYTtjJiZjLnRhZ05hbWUmJid2aWRlbyc9PT1jLnRhZ05hbWUudG9Mb3dlckNhc2UoKT8oYS5hLmc9YyxhLmImJnViKGEuYikpOkooJ3NldFZpZGVvRWxlbWVudCBjYWxsZWQgd2l0aCBhIG5vbi1IVE1MVmlkZW9FbGVtZW50LiBJdCB3aWxsIGJlIGlnbm9yZWQuJyk7CmJyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldEVsZW1lbnRCb3VuZHMnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLnNldEVsZW1lbnRCb3VuZHMoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc3RhcnRTZXNzaW9uJzpKKCdTZXNzaW9uIHN0YXJ0IGZyb20gSlMgaXMgbm90IHN1cHBvcnRlZCBpbiBtb2JpbGUgYXBwLicpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmZpbmlzaFNlc3Npb24nOkooJ1Nlc3Npb24gZmluaXNoIGZyb20gSlMgaXMgbm90IHN1cHBvcnRlZCBpbiBtb2JpbGUgYXBwLicpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmltcHJlc3Npb25PY2N1cnJlZCc6WShhLmEsJ2ltcHJlc3Npb24nKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5sb2FkZWQnOihjPXAoZCkubmV4dCgpLnZhbHVlKT8oYj17c2tpcHBhYmxlOmMuaXNTa2lwcGFibGUsYXV0b1BsYXk6Yy5pc0F1dG9QbGF5LHBvc2l0aW9uOmMucG9zaXRpb259LGMuaXNTa2lwcGFibGUmJgooYi5za2lwT2Zmc2V0PWMuc2tpcE9mZnNldCksWShhLmEsJ2xvYWRlZCcsYikpOlkoYS5hLCdsb2FkZWQnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zdGFydCc6Yj1wKGQpO2M9Yi5uZXh0KCkudmFsdWU7Yj1iLm5leHQoKS52YWx1ZTtZKGEuYSwnc3RhcnQnLHtkdXJhdGlvbjpjLG1lZGlhUGxheWVyVm9sdW1lOmJ9KTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5maXJzdFF1YXJ0aWxlJzpZKGEuYSwnZmlyc3RRdWFydGlsZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLm1pZHBvaW50JzpZKGEuYSwnbWlkcG9pbnQnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS50aGlyZFF1YXJ0aWxlJzpZKGEuYSwndGhpcmRRdWFydGlsZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmNvbXBsZXRlJzpZKGEuYSwnY29tcGxldGUnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5wYXVzZSc6WShhLmEsJ3BhdXNlJyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UucmVzdW1lJzpZKGEuYSwKJ3Jlc3VtZScpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLmJ1ZmZlclN0YXJ0JzpZKGEuYSwnYnVmZmVyU3RhcnQnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5idWZmZXJGaW5pc2gnOlkoYS5hLCdidWZmZXJGaW5pc2gnKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5za2lwcGVkJzpZKGEuYSwnc2tpcHBlZCcpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnZvbHVtZUNoYW5nZSc6Yz17bWVkaWFQbGF5ZXJWb2x1bWU6cChkKS5uZXh0KCkudmFsdWV9O1koYS5hLCd2b2x1bWVDaGFuZ2UnLGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnBsYXllclN0YXRlQ2hhbmdlJzpjPXtzdGF0ZTpwKGQpLm5leHQoKS52YWx1ZX07WShhLmEsJ3BsYXllclN0YXRlQ2hhbmdlJyxjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5hZFVzZXJJbnRlcmFjdGlvbic6Yz17aW50ZXJhY3Rpb25UeXBlOnAoZCkubmV4dCgpLnZhbHVlfTtZKGEuYSwnYWRVc2VySW50ZXJhY3Rpb24nLApjKTticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXRDbGllbnRJbmZvJzp2YXIgZT1wKGQpO2I9ZS5uZXh0KCkudmFsdWU7ZD1lLm5leHQoKS52YWx1ZTtlPWUubmV4dCgpLnZhbHVlO2E9YS5hLnNldENsaWVudEluZm8oYixkLGUpO2MoYSk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2UuaW5qZWN0VmVyaWZpY2F0aW9uU2NyaXB0UmVzb3VyY2VzJzpjPXAoZCkubmV4dCgpLnZhbHVlO2EuYS5pbmplY3RWZXJpZmljYXRpb25TY3JpcHRSZXNvdXJjZXMoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0Q3JlYXRpdmVUeXBlJzpjPXAoZCkubmV4dCgpLnZhbHVlO2EuYS5zZXRDcmVhdGl2ZVR5cGUoYyk7YnJlYWs7Y2FzZSAnU2Vzc2lvblNlcnZpY2Uuc2V0SW1wcmVzc2lvblR5cGUnOmM9cChkKS5uZXh0KCkudmFsdWU7YS5hLnNldEltcHJlc3Npb25UeXBlKGMpO2JyZWFrO2Nhc2UgJ1Nlc3Npb25TZXJ2aWNlLnNldENvbnRlbnRVcmwnOmM9cChkKS5uZXh0KCkudmFsdWU7CmEuYS5hLm89YzticmVhaztjYXNlICdTZXNzaW9uU2VydmljZS5zZXNzaW9uRXJyb3InOmI9cChkKSxjPWIubmV4dCgpLnZhbHVlLGI9Yi5uZXh0KCkudmFsdWUsYS5hLmVycm9yKGMsYil9fTtmdW5jdGlvbiBaKCl7dmFyIGE9WCxiPWhjLGM9aWMsZD1ZYjt0aGlzLmY9ZWM7dGhpcy5hPWE7dGhpcy5jPWI7dGhpcy5oPWM7dGhpcy5nPWQ7dGhpcy5iPUgoKX1uPVoucHJvdG90eXBlOwpuLlQ9ZnVuY3Rpb24oYSl7aWYoISghKGEmJk0oYSkmJk8oYS5pbXByZXNzaW9uT3duZXIscmEpKXx8J3ZpZGVvRXZlbnRzT3duZXInaW4gYSYmbnVsbCE9YS52aWRlb0V2ZW50c093bmVyJiYhTyhhLnZpZGVvRXZlbnRzT3duZXIscmEpfHwnbWVkaWFFdmVudHNPd25lcidpbiBhJiZudWxsIT1hLm1lZGlhRXZlbnRzT3duZXImJiFPKGEubWVkaWFFdmVudHNPd25lcixyYSkpKXtpZihhLmNyZWF0aXZlVHlwZSYmYS5pbXByZXNzaW9uVHlwZSl7dmFyIGI9YS5tZWRpYUV2ZW50c093bmVyO251bGw9PXRoaXMuYi5hJiZ0aGlzLmYuc2V0Q3JlYXRpdmVUeXBlKGEuY3JlYXRpdmVUeXBlLGIpO251bGw9PXRoaXMuYi5oJiYodGhpcy5iLmg9YS5pbXByZXNzaW9uVHlwZSk7b2IodGhpcy5hLGIpfWVsc2UgYj1hLnZpZGVvRXZlbnRzT3duZXIsdGhpcy5iLmI9bnVsbD09Ynx8J25vbmUnPT09Yj8nZGlzcGxheSc6J3ZpZGVvJyx0aGlzLmIuYT1udWxsLHRoaXMuYi5oPW51bGwsb2IodGhpcy5hLGIpOwpwYih0aGlzLmEsYS5pbXByZXNzaW9uT3duZXIpO2EmJm51bGwhPWEuaXNvbGF0ZVZlcmlmaWNhdGlvblNjcmlwdHMmJidib29sZWFuJz09PXR5cGVvZiBhLmlzb2xhdGVWZXJpZmljYXRpb25TY3JpcHRzJiYodGhpcy5iLkM9YS5pc29sYXRlVmVyaWZpY2F0aW9uU2NyaXB0cyl9fTsKbi5XPWZ1bmN0aW9uKGEsYixjLGQpe3ZhciBlO2lmKE0oYikpe2lmKGU9TyhiLmVudmlyb25tZW50LHVhKSYmTyhiLmFkU2Vzc2lvblR5cGUscGEpKWU9Yi5vbWlkTmF0aXZlSW5mbyxlPU0oZSk/TihlLnBhcnRuZXJOYW1lKSYmTihlLnBhcnRuZXJWZXJzaW9uKTohMTtlJiYoZT1iLmFwcCxlPU0oZSk/TihlLmxpYnJhcnlWZXJzaW9uKSYmTihlLmFwcElkKTohMSl9ZWxzZSBlPSExO2UmJihPYihkKSYmKHRoaXMuYi52PW5ldyBNYXAoT2JqZWN0LmVudHJpZXMoZCkpKSxkPXRoaXMuZixjPXZvaWQgMD09PWM/bnVsbDpjLG51bGw9PWEmJihhPVViKCkpLGIuY2FuTWVhc3VyZVZpc2liaWxpdHk9ZC5iLkMoKSxkLmEuYWRTZXNzaW9uSWQ9YSxhPWQuYSxlPWIsdm9pZCAwIT09ZS5jb250ZW50VXJsJiYoYS5vPWUuY29udGVudFVybCxlLmNvbnRlbnRVcmw9dm9pZCAwKSxlPWEuY3x8e30sYi5vbWlkSnNJbmZvPU9iamVjdC5hc3NpZ24oe30sZS5vbWlkSnNJbmZvfHx7fSxiLm9taWRKc0luZm98fAp7fSksZT1iPU9iamVjdC5hc3NpZ24oe30sZSxiKSxhLkN8fChudWxsIT1hLmc/KGUudmlkZW9FbGVtZW50PWEuZyxlLmFjY2Vzc01vZGU9J2Z1bGwnKTpudWxsIT1hLmYmJihlLnNsb3RFbGVtZW50PWEuZixlLmFjY2Vzc01vZGU9J2Z1bGwnKSksYS5jPWIsZmIoZC5jLGMpLGQuYiYmUShkLmIpKX07bi5VPWZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5mO2piKGEuYyk7YS5iLm0oKX07bi4kPWZ1bmN0aW9uKGEpe00oYSkmJnNiKGEueCkmJnNiKGEueSkmJnNiKGEud2lkdGgpJiZzYihhLmhlaWdodCkmJih0aGlzLmIuRz1hLHJiKHRoaXMuYywnY29udGFpbmVyJykpfTtuLmFhPWZ1bmN0aW9uKGEpe08oYSx0YSkmJih0aGlzLmIubT1hLCdiYWNrZ3JvdW5kZWQnPT09YT9yYih0aGlzLmMsJ2NvbnRhaW5lcicsJ2JhY2tncm91bmRlZCcpOnJiKHRoaXMuYywnY29udGFpbmVyJykpfTtuLlg9ZnVuY3Rpb24oYSl7J2ltcHJlc3Npb24nPT09YSYmKHRoaXMuTSgpLHRoaXMuZyYmUSh0aGlzLmcpKX07Cm4uTT1mdW5jdGlvbigpe3FiKHRoaXMuYSwnbmF0aXZlJykmJmtiKHRoaXMuYSwnbmF0aXZlJyl9O24uVj1mdW5jdGlvbihhKXthPXZvaWQgMD09PWE/bnVsbDphO0wodGhpcy5hLCduYXRpdmUnKSYmbGIodGhpcy5hLCduYXRpdmUnLGEpfTtuLmVycm9yPWZ1bmN0aW9uKGEsYil7TyhhLG9hKSYmZWIodGhpcy5hLGEsYil9O24uWT1mdW5jdGlvbihhLGIpe3RoaXMuTihhLGIpfTtuLk49ZnVuY3Rpb24oYSxiKXtMKHRoaXMuYSwnbmF0aXZlJykmJk8oYSxBKSYmKHZvaWQgMD09PWJ8fE0oYikpJiYoJ2xvYWRlZCc9PWE/bGIodGhpcy5hLCduYXRpdmUnLGIpOm1iKHRoaXMuYSxhLCduYXRpdmUnLGIpKX07Cm4uWj1mdW5jdGlvbihhKXtpZignbm9uZSchPT10aGlzLmEuYS5pJiYnbnVtYmVyJz09PXR5cGVvZiBhJiYhaXNOYU4oYSkpe3RoaXMuYi51PWE7YT10aGlzLmg7dmFyIGI9YS5hLkI7bnVsbCE9YiYmbWIoYS5iLCd2b2x1bWVDaGFuZ2UnLCduYXRpdmUnLHttZWRpYVBsYXllclZvbHVtZTpiLGRldmljZVZvbHVtZTphLmEudX0pfX07Wi5wcm90b3R5cGUuc3RhcnRTZXNzaW9uPVoucHJvdG90eXBlLlc7Wi5wcm90b3R5cGUuZXJyb3I9Wi5wcm90b3R5cGUuZXJyb3I7Wi5wcm90b3R5cGUuZmluaXNoU2Vzc2lvbj1aLnByb3RvdHlwZS5VO1oucHJvdG90eXBlLnB1Ymxpc2hBZEV2ZW50PVoucHJvdG90eXBlLlg7Wi5wcm90b3R5cGUucHVibGlzaEltcHJlc3Npb25FdmVudD1aLnByb3RvdHlwZS5NO1oucHJvdG90eXBlLnB1Ymxpc2hWaWRlb0V2ZW50PVoucHJvdG90eXBlLlk7Wi5wcm90b3R5cGUucHVibGlzaE1lZGlhRXZlbnQ9Wi5wcm90b3R5cGUuTjsKWi5wcm90b3R5cGUucHVibGlzaExvYWRlZEV2ZW50PVoucHJvdG90eXBlLlY7Wi5wcm90b3R5cGUuc2V0TmF0aXZlVmlld0hpZXJhcmNoeT1aLnByb3RvdHlwZS4kO1oucHJvdG90eXBlLnNldFN0YXRlPVoucHJvdG90eXBlLmFhO1oucHJvdG90eXBlLnNldERldmljZVZvbHVtZT1aLnByb3RvdHlwZS5aO1oucHJvdG90eXBlLmluaXQ9Wi5wcm90b3R5cGUuVDtmdW5jdGlvbiBqYygpe3ZhciBhPVgsYj1rYzt2YXIgYz12b2lkIDA9PT1jP0k6Yzt0aGlzLmc9YTt0aGlzLmE9Yjt0aGlzLmg9e307dGhpcy5mPXt9O3RoaXMuYz1uZXcgVTtjLm9taWQ9Yy5vbWlkfHx7fTtjLm9taWQudjFfVmVyaWZpY2F0aW9uU2VydmljZUNvbW11bmljYXRpb249dGhpcy5jO3RoaXMuYj1udWxsO2MmJmMuYWRkRXZlbnRMaXN0ZW5lciYmYy5wb3N0TWVzc2FnZSYmKHRoaXMuYj1uZXcgVGIoYykpO3RoaXMuYy5hPXRoaXMuaS5iaW5kKHRoaXMpO3RoaXMuYiYmKHRoaXMuYi5hPXRoaXMuai5iaW5kKHRoaXMpKX1mdW5jdGlvbiBsYyhhLGIsYyxkKXtEYihhLmEsYixjLGQpfWZ1bmN0aW9uIG1jKGEsYixjLGQpe0NiKGEuYSwnZG93bmxvYWRKYXZhU2NyaXB0UmVzb3VyY2UnKShiLGMsZCl9amMucHJvdG90eXBlLmo9ZnVuY3Rpb24oYSxiKXt0aGlzLmImJm5jKHRoaXMsYSxiLHRoaXMuYil9O2pjLnByb3RvdHlwZS5pPWZ1bmN0aW9uKGEsYil7bmModGhpcyxhLGIsdGhpcy5jKX07CmZ1bmN0aW9uIG5jKGEsYixjLGQpe2Z1bmN0aW9uIGUoRil7Zm9yKHZhciBXPVtdLHFhPTA7cWE8YXJndW1lbnRzLmxlbmd0aDsrK3FhKVdbcWFdPWFyZ3VtZW50c1txYV07Vz1uZXcgVChmLCdyZXNwb25zZScsZyxhYyhnKSYmYmMoZyk/VzpKU09OLnN0cmluZ2lmeShXKSk7ZC5iKFcsYyl9dmFyIGY9Yi5iLGw9Yi5tZXRob2QsZz1iLnZlcnNpb247Yj1jYyhnLGIuYSk7dHJ5e3N3aXRjaChsKXtjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLmFkZEV2ZW50TGlzdGVuZXInOnZhciBoPXAoYikubmV4dCgpLnZhbHVlOyRhKGEuZyxoLGUpO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2UuYWRkU2Vzc2lvbkxpc3RlbmVyJzp2YXIgaz1wKGIpLG09ay5uZXh0KCkudmFsdWUsdT1rLm5leHQoKS52YWx1ZTtiYihhLmcsZSxtLHUpO2JyZWFrO2Nhc2UgJ1ZlcmlmaWNhdGlvblNlcnZpY2Uuc2VuZFVybCc6dmFyIHc9cChiKS5uZXh0KCkudmFsdWU7bGMoYSx3LGZ1bmN0aW9uKCl7cmV0dXJuIGUoITApfSwKZnVuY3Rpb24oKXtyZXR1cm4gZSghMSl9KTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLnNldFRpbWVvdXQnOnZhciBFPXAoYiksVj1FLm5leHQoKS52YWx1ZSxzYz1FLm5leHQoKS52YWx1ZTthLmhbVl09emIoYS5hLCdzZXRUaW1lb3V0JykoZSxzYyk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5jbGVhclRpbWVvdXQnOnZhciB0Yz1wKGIpLm5leHQoKS52YWx1ZTtCYihhLmEsYS5oW3RjXSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5zZXRJbnRlcnZhbCc6dmFyIExiPXAoYiksdWM9TGIubmV4dCgpLnZhbHVlLHZjPUxiLm5leHQoKS52YWx1ZTthLmZbdWNdPXliKGEuYSxlLHZjKTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLmNsZWFySW50ZXJ2YWwnOnZhciB3Yz1wKGIpLm5leHQoKS52YWx1ZTtBYihhLmEsYS5mW3djXSk7YnJlYWs7Y2FzZSAnVmVyaWZpY2F0aW9uU2VydmljZS5pbmplY3RKYXZhU2NyaXB0UmVzb3VyY2UnOnZhciB4Yz0KcChiKS5uZXh0KCkudmFsdWU7bWMoYSx4YyxmdW5jdGlvbihGKXtyZXR1cm4gZSghMCxGKX0sZnVuY3Rpb24oKXtyZXR1cm4gZSghMSl9KTticmVhaztjYXNlICdWZXJpZmljYXRpb25TZXJ2aWNlLmdldFZlcnNpb24nOnAoYikubmV4dCgpO3ZhciB5Yz1IKCkuYy5vbWlkSnNJbmZvO2UoeWMuc2VydmljZVZlcnNpb24pfX1jYXRjaChGKXtkLmIobmV3IFQoZiwnZXJyb3InLGcsJ1xuICAgICAgICAgICAgICBuYW1lOiAnK0YubmFtZSsnXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICcrRi5tZXNzYWdlKydcbiAgICAgICAgICAgICAgZmlsZW5hbWU6ICcrRi5maWxlbmFtZSsnXG4gICAgICAgICAgICAgIGxpbmVOdW1iZXI6ICcrRi5saW5lTnVtYmVyKydcbiAgICAgICAgICAgICAgY29sdW1uTnVtYmVyOiAnK0YuY29sdW1uTnVtYmVyKydcbiAgICAgICAgICAgICAgc3RhY2s6ICcrRi5zdGFjaysnXG4gICAgICAgICAgICAgIHRvU3RyaW5nKCk6ICcrRi50b1N0cmluZygpKydcbiAgICAgICAgICAnKSwKYyl9fTtmdW5jdGlvbiBvYygpe3ZhciBhPUkuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7YS5pZD0nb21pZF92MV9wcmVzZW50JzthLm5hbWU9J29taWRfdjFfcHJlc2VudCc7YS5zdHlsZS5kaXNwbGF5PSdub25lJztJLmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSl9ZnVuY3Rpb24gcGMoKXt2YXIgYT1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihiKXtiLmZvckVhY2goZnVuY3Rpb24oYyl7J0JPRFknPT09Yy5hZGRlZE5vZGVzWzBdLm5vZGVOYW1lJiYob2MoKSxhLmRpc2Nvbm5lY3QoKSl9KX0pO2Eub2JzZXJ2ZShJLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx7Y2hpbGRMaXN0OiEwfSl9O3ZhciBYPW5ldyBVYSxrYz1uZXcgZnVuY3Rpb24oKXt2YXIgYTt0aGlzLmE9YT12b2lkIDA9PT1hP29taWRHbG9iYWw6YX07bmV3IGpjO3ZhciBxYz1uZXcgZnVuY3Rpb24oKXt9LHJjPW5ldyBmdW5jdGlvbigpe30saGM9bmV3IGZ1bmN0aW9uKCl7dGhpcy5iPVg7dGhpcy5jPXJjO3RoaXMuYT1IKCl9LHpjO0k/emM9SS5JbnRlcnNlY3Rpb25PYnNlcnZlciYmKEkuTXV0YXRpb25PYnNlcnZlcnx8SS5SZXNpemVPYnNlcnZlcik/bmV3IFMoSSxxYyxoYyxYKTpuZXcgUihJLHJjLGhjLGtjLFgpOnpjPW51bGw7dmFyIFliPXpjLFpiPW5ldyBmdW5jdGlvbigpe3ZhciBhPVg7dmFyIGI9dm9pZCAwPT09Yj9JOmI7dGhpcy5mPWE7dGhpcy5hPWI7dGhpcy5jPUgoKTt0aGlzLmI9W119LGVjPW5ldyBYYixpYz1uZXcgZnVuY3Rpb24oKXt2YXIgYT1YLGI9SCgpO3RoaXMuYj1hO3RoaXMuYT1ifTtJLm9taWRCcmlkZ2U9bmV3IFo7bmV3IGRjOwppZihJLmZyYW1lcyYmSS5kb2N1bWVudCYmISgnb21pZF92MV9wcmVzZW50J2luIEkuZnJhbWVzKSl7dmFyIEFjO2lmKEFjPW51bGw9PUkuZG9jdW1lbnQuYm9keSlBYz0nTXV0YXRpb25PYnNlcnZlcidpbiBJO0FjP3BjKCk6SS5kb2N1bWVudC5ib2R5P29jKCk6SS5kb2N1bWVudC53cml0ZSgnPGlmcmFtZSBzdHlsZT0iZGlzcGxheTpub25lIiBpZD0ib21pZF92MV9wcmVzZW50IiBuYW1lPSJvbWlkX3YxX3ByZXNlbnQiPjwvaWZyYW1lPicpfTsKfSkuY2FsbCh0aGlzLCB0aGlzKTsK" |