@vtj/designer 0.9.0-alpha.1 → 0.9.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +0,0 @@
1
- const c = "KGZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO2NsYXNzIFhye2NvbnN0cnVjdG9yKCl7dGhpcy5saXN0ZW5lcnM9W10sdGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyPWZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoKCk9Pnt0aHJvdyB0LnN0YWNrP2tlLmlzRXJyb3JOb1RlbGVtZXRyeSh0KT9uZXcga2UodC5tZXNzYWdlK2AKCmArdC5zdGFjayk6bmV3IEVycm9yKHQubWVzc2FnZStgCgpgK3Quc3RhY2spOnR9LDApfX1lbWl0KHQpe3RoaXMubGlzdGVuZXJzLmZvckVhY2gobj0+e24odCl9KX1vblVuZXhwZWN0ZWRFcnJvcih0KXt0aGlzLnVuZXhwZWN0ZWRFcnJvckhhbmRsZXIodCksdGhpcy5lbWl0KHQpfW9uVW5leHBlY3RlZEV4dGVybmFsRXJyb3IodCl7dGhpcy51bmV4cGVjdGVkRXJyb3JIYW5kbGVyKHQpfX1jb25zdCBRcj1uZXcgWHI7ZnVuY3Rpb24gWWUoZSl7WXIoZSl8fFFyLm9uVW5leHBlY3RlZEVycm9yKGUpfWZ1bmN0aW9uIFBuKGUpe2lmKGUgaW5zdGFuY2VvZiBFcnJvcil7Y29uc3R7bmFtZTp0LG1lc3NhZ2U6bn09ZSxzPWUuc3RhY2t0cmFjZXx8ZS5zdGFjaztyZXR1cm57JGlzRXJyb3I6ITAsbmFtZTp0LG1lc3NhZ2U6bixzdGFjazpzLG5vVGVsZW1ldHJ5OmtlLmlzRXJyb3JOb1RlbGVtZXRyeShlKX19cmV0dXJuIGV9Y29uc3QgJHQ9IkNhbmNlbGVkIjtmdW5jdGlvbiBZcihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEpyPyEwOmUgaW5zdGFuY2VvZiBFcnJvciYmZS5uYW1lPT09JHQmJmUubWVzc2FnZT09PSR0fWNsYXNzIEpyIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoKXtzdXBlcigkdCksdGhpcy5uYW1lPXRoaXMubWVzc2FnZX19Y2xhc3Mga2UgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0KXtzdXBlcih0KSx0aGlzLm5hbWU9IkNvZGVFeHBlY3RlZEVycm9yIn1zdGF0aWMgZnJvbUVycm9yKHQpe2lmKHQgaW5zdGFuY2VvZiBrZSlyZXR1cm4gdDtjb25zdCBuPW5ldyBrZTtyZXR1cm4gbi5tZXNzYWdlPXQubWVzc2FnZSxuLnN0YWNrPXQuc3RhY2ssbn1zdGF0aWMgaXNFcnJvck5vVGVsZW1ldHJ5KHQpe3JldHVybiB0Lm5hbWU9PT0iQ29kZUV4cGVjdGVkRXJyb3IifX1jbGFzcyByZSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHQpe3N1cGVyKHR8fCJBbiB1bmV4cGVjdGVkIGJ1ZyBvY2N1cnJlZC4iKSxPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxyZS5wcm90b3R5cGUpfX1mdW5jdGlvbiBacihlLHQpe2NvbnN0IG49dGhpcztsZXQgcz0hMSxyO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzfHwocz0hMCxyPWUuYXBwbHkobixhcmd1bWVudHMpKSxyfX12YXIgZnQ7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocCl7cmV0dXJuIHAmJnR5cGVvZiBwPT0ib2JqZWN0IiYmdHlwZW9mIHBbU3ltYm9sLml0ZXJhdG9yXT09ImZ1bmN0aW9uIn1lLmlzPXQ7Y29uc3Qgbj1PYmplY3QuZnJlZXplKFtdKTtmdW5jdGlvbiBzKCl7cmV0dXJuIG59ZS5lbXB0eT1zO2Z1bmN0aW9uKnIocCl7eWllbGQgcH1lLnNpbmdsZT1yO2Z1bmN0aW9uIGkocCl7cmV0dXJuIHQocCk/cDpyKHApfWUud3JhcD1pO2Z1bmN0aW9uIG8ocCl7cmV0dXJuIHB8fG59ZS5mcm9tPW87ZnVuY3Rpb24qbChwKXtmb3IobGV0IF89cC5sZW5ndGgtMTtfPj0wO18tLSl5aWVsZCBwW19dfWUucmV2ZXJzZT1sO2Z1bmN0aW9uIHUocCl7cmV0dXJuIXB8fHBbU3ltYm9sLml0ZXJhdG9yXSgpLm5leHQoKS5kb25lPT09ITB9ZS5pc0VtcHR5PXU7ZnVuY3Rpb24gYyhwKXtyZXR1cm4gcFtTeW1ib2wuaXRlcmF0b3JdKCkubmV4dCgpLnZhbHVlfWUuZmlyc3Q9YztmdW5jdGlvbiBmKHAsXyl7bGV0IEw9MDtmb3IoY29uc3QgQSBvZiBwKWlmKF8oQSxMKyspKXJldHVybiEwO3JldHVybiExfWUuc29tZT1mO2Z1bmN0aW9uIGgocCxfKXtmb3IoY29uc3QgTCBvZiBwKWlmKF8oTCkpcmV0dXJuIEx9ZS5maW5kPWg7ZnVuY3Rpb24qZChwLF8pe2Zvcihjb25zdCBMIG9mIHApXyhMKSYmKHlpZWxkIEwpfWUuZmlsdGVyPWQ7ZnVuY3Rpb24qbShwLF8pe2xldCBMPTA7Zm9yKGNvbnN0IEEgb2YgcCl5aWVsZCBfKEEsTCsrKX1lLm1hcD1tO2Z1bmN0aW9uKmcocCxfKXtsZXQgTD0wO2Zvcihjb25zdCBBIG9mIHApeWllbGQqXyhBLEwrKyl9ZS5mbGF0TWFwPWc7ZnVuY3Rpb24qYiguLi5wKXtmb3IoY29uc3QgXyBvZiBwKXlpZWxkKl99ZS5jb25jYXQ9YjtmdW5jdGlvbiB4KHAsXyxMKXtsZXQgQT1MO2Zvcihjb25zdCB5IG9mIHApQT1fKEEseSk7cmV0dXJuIEF9ZS5yZWR1Y2U9eDtmdW5jdGlvbip2KHAsXyxMPXAubGVuZ3RoKXtmb3IoXzwwJiYoXys9cC5sZW5ndGgpLEw8MD9MKz1wLmxlbmd0aDpMPnAubGVuZ3RoJiYoTD1wLmxlbmd0aCk7XzxMO18rKyl5aWVsZCBwW19dfWUuc2xpY2U9djtmdW5jdGlvbiBTKHAsXz1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpe2NvbnN0IEw9W107aWYoXz09PTApcmV0dXJuW0wscF07Y29uc3QgQT1wW1N5bWJvbC5pdGVyYXRvcl0oKTtmb3IobGV0IHk9MDt5PF87eSsrKXtjb25zdCBCPUEubmV4dCgpO2lmKEIuZG9uZSlyZXR1cm5bTCxlLmVtcHR5KCldO0wucHVzaChCLnZhbHVlKX1yZXR1cm5bTCx7W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gQX19XX1lLmNvbnN1bWU9Uzthc3luYyBmdW5jdGlvbiBOKHApe2NvbnN0IF89W107Zm9yIGF3YWl0KGNvbnN0IEwgb2YgcClfLnB1c2goTCk7cmV0dXJuIFByb21pc2UucmVzb2x2ZShfKX1lLmFzeW5jVG9BcnJheT1OfSkoZnR8fChmdD17fSkpO2Z1bmN0aW9uIEQxKGUpe3JldHVybiBlfWZ1bmN0aW9uIFQxKGUsdCl7fWZ1bmN0aW9uIEZuKGUpe2lmKGZ0LmlzKGUpKXtjb25zdCB0PVtdO2Zvcihjb25zdCBuIG9mIGUpaWYobil0cnl7bi5kaXNwb3NlKCl9Y2F0Y2gocyl7dC5wdXNoKHMpfWlmKHQubGVuZ3RoPT09MSl0aHJvdyB0WzBdO2lmKHQubGVuZ3RoPjEpdGhyb3cgbmV3IEFnZ3JlZ2F0ZUVycm9yKHQsIkVuY291bnRlcmVkIGVycm9ycyB3aGlsZSBkaXNwb3Npbmcgb2Ygc3RvcmUiKTtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9bXTplfWVsc2UgaWYoZSlyZXR1cm4gZS5kaXNwb3NlKCksZX1mdW5jdGlvbiBLciguLi5lKXtyZXR1cm4gZHQoKCk9PkZuKGUpKX1mdW5jdGlvbiBkdChlKXtyZXR1cm57ZGlzcG9zZTpacigoKT0+e2UoKX0pfX1jb25zdCBGdD1jbGFzcyBGdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvRGlzcG9zZT1uZXcgU2V0LHRoaXMuX2lzRGlzcG9zZWQ9ITF9ZGlzcG9zZSgpe3RoaXMuX2lzRGlzcG9zZWR8fCh0aGlzLl9pc0Rpc3Bvc2VkPSEwLHRoaXMuY2xlYXIoKSl9Z2V0IGlzRGlzcG9zZWQoKXtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZH1jbGVhcigpe2lmKHRoaXMuX3RvRGlzcG9zZS5zaXplIT09MCl0cnl7Rm4odGhpcy5fdG9EaXNwb3NlKX1maW5hbGx5e3RoaXMuX3RvRGlzcG9zZS5jbGVhcigpfX1hZGQodCl7aWYoIXQpcmV0dXJuIHQ7aWYodD09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5faXNEaXNwb3NlZD9GdC5ESVNBQkxFX0RJU1BPU0VEX1dBUk5JTkd8fGNvbnNvbGUud2FybihuZXcgRXJyb3IoIlRyeWluZyB0byBhZGQgYSBkaXNwb3NhYmxlIHRvIGEgRGlzcG9zYWJsZVN0b3JlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkaXNwb3NlZCBvZi4gVGhlIGFkZGVkIG9iamVjdCB3aWxsIGJlIGxlYWtlZCEiKS5zdGFjayk6dGhpcy5fdG9EaXNwb3NlLmFkZCh0KSx0fWRlbGV0ZUFuZExlYWsodCl7dCYmdGhpcy5fdG9EaXNwb3NlLmhhcyh0KSYmdGhpcy5fdG9EaXNwb3NlLmRlbGV0ZSh0KX19O0Z0LkRJU0FCTEVfRElTUE9TRURfV0FSTklORz0hMTtsZXQgSmU9RnQ7Y29uc3Qga249Y2xhc3Mga257Y29uc3RydWN0b3IoKXt0aGlzLl9zdG9yZT1uZXcgSmUsdGhpcy5fc3RvcmV9ZGlzcG9zZSgpe3RoaXMuX3N0b3JlLmRpc3Bvc2UoKX1fcmVnaXN0ZXIodCl7aWYodD09PXRoaXMpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVnaXN0ZXIgYSBkaXNwb3NhYmxlIG9uIGl0c2VsZiEiKTtyZXR1cm4gdGhpcy5fc3RvcmUuYWRkKHQpfX07a24uTm9uZT1PYmplY3QuZnJlZXplKHtkaXNwb3NlKCl7fX0pO2xldCBQZT1rbjtjb25zdCB6ZT1jbGFzcyB6ZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLmVsZW1lbnQ9dCx0aGlzLm5leHQ9emUuVW5kZWZpbmVkLHRoaXMucHJldj16ZS5VbmRlZmluZWR9fTt6ZS5VbmRlZmluZWQ9bmV3IHplKHZvaWQgMCk7bGV0IE89emU7Y2xhc3MgZWl7Y29uc3RydWN0b3IoKXt0aGlzLl9maXJzdD1PLlVuZGVmaW5lZCx0aGlzLl9sYXN0PU8uVW5kZWZpbmVkLHRoaXMuX3NpemU9MH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWlzRW1wdHkoKXtyZXR1cm4gdGhpcy5fZmlyc3Q9PT1PLlVuZGVmaW5lZH1jbGVhcigpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PU8uVW5kZWZpbmVkOyl7Y29uc3Qgbj10Lm5leHQ7dC5wcmV2PU8uVW5kZWZpbmVkLHQubmV4dD1PLlVuZGVmaW5lZCx0PW59dGhpcy5fZmlyc3Q9Ty5VbmRlZmluZWQsdGhpcy5fbGFzdD1PLlVuZGVmaW5lZCx0aGlzLl9zaXplPTB9dW5zaGlmdCh0KXtyZXR1cm4gdGhpcy5faW5zZXJ0KHQsITEpfXB1c2godCl7cmV0dXJuIHRoaXMuX2luc2VydCh0LCEwKX1faW5zZXJ0KHQsbil7Y29uc3Qgcz1uZXcgTyh0KTtpZih0aGlzLl9maXJzdD09PU8uVW5kZWZpbmVkKXRoaXMuX2ZpcnN0PXMsdGhpcy5fbGFzdD1zO2Vsc2UgaWYobil7Y29uc3QgaT10aGlzLl9sYXN0O3RoaXMuX2xhc3Q9cyxzLnByZXY9aSxpLm5leHQ9c31lbHNle2NvbnN0IGk9dGhpcy5fZmlyc3Q7dGhpcy5fZmlyc3Q9cyxzLm5leHQ9aSxpLnByZXY9c310aGlzLl9zaXplKz0xO2xldCByPSExO3JldHVybigpPT57cnx8KHI9ITAsdGhpcy5fcmVtb3ZlKHMpKX19c2hpZnQoKXtpZih0aGlzLl9maXJzdCE9PU8uVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2ZpcnN0LmVsZW1lbnQ7cmV0dXJuIHRoaXMuX3JlbW92ZSh0aGlzLl9maXJzdCksdH19cG9wKCl7aWYodGhpcy5fbGFzdCE9PU8uVW5kZWZpbmVkKXtjb25zdCB0PXRoaXMuX2xhc3QuZWxlbWVudDtyZXR1cm4gdGhpcy5fcmVtb3ZlKHRoaXMuX2xhc3QpLHR9fV9yZW1vdmUodCl7aWYodC5wcmV2IT09Ty5VbmRlZmluZWQmJnQubmV4dCE9PU8uVW5kZWZpbmVkKXtjb25zdCBuPXQucHJldjtuLm5leHQ9dC5uZXh0LHQubmV4dC5wcmV2PW59ZWxzZSB0LnByZXY9PT1PLlVuZGVmaW5lZCYmdC5uZXh0PT09Ty5VbmRlZmluZWQ/KHRoaXMuX2ZpcnN0PU8uVW5kZWZpbmVkLHRoaXMuX2xhc3Q9Ty5VbmRlZmluZWQpOnQubmV4dD09PU8uVW5kZWZpbmVkPyh0aGlzLl9sYXN0PXRoaXMuX2xhc3QucHJldix0aGlzLl9sYXN0Lm5leHQ9Ty5VbmRlZmluZWQpOnQucHJldj09PU8uVW5kZWZpbmVkJiYodGhpcy5fZmlyc3Q9dGhpcy5fZmlyc3QubmV4dCx0aGlzLl9maXJzdC5wcmV2PU8uVW5kZWZpbmVkKTt0aGlzLl9zaXplLT0xfSpbU3ltYm9sLml0ZXJhdG9yXSgpe2xldCB0PXRoaXMuX2ZpcnN0O2Zvcig7dCE9PU8uVW5kZWZpbmVkOyl5aWVsZCB0LmVsZW1lbnQsdD10Lm5leHR9fWNvbnN0IHRpPWdsb2JhbFRoaXMucGVyZm9ybWFuY2UmJnR5cGVvZiBnbG9iYWxUaGlzLnBlcmZvcm1hbmNlLm5vdz09ImZ1bmN0aW9uIjtjbGFzcyBtdHtzdGF0aWMgY3JlYXRlKHQpe3JldHVybiBuZXcgbXQodCl9Y29uc3RydWN0b3IodCl7dGhpcy5fbm93PXRpJiZ0PT09ITE/RGF0ZS5ub3c6Z2xvYmFsVGhpcy5wZXJmb3JtYW5jZS5ub3cuYmluZChnbG9iYWxUaGlzLnBlcmZvcm1hbmNlKSx0aGlzLl9zdGFydFRpbWU9dGhpcy5fbm93KCksdGhpcy5fc3RvcFRpbWU9LTF9c3RvcCgpe3RoaXMuX3N0b3BUaW1lPXRoaXMuX25vdygpfXJlc2V0KCl7dGhpcy5fc3RhcnRUaW1lPXRoaXMuX25vdygpLHRoaXMuX3N0b3BUaW1lPS0xfWVsYXBzZWQoKXtyZXR1cm4gdGhpcy5fc3RvcFRpbWUhPT0tMT90aGlzLl9zdG9wVGltZS10aGlzLl9zdGFydFRpbWU6dGhpcy5fbm93KCktdGhpcy5fc3RhcnRUaW1lfX12YXIgZ3Q7KGZ1bmN0aW9uKGUpe2UuTm9uZT0oKT0+UGUuTm9uZTtmdW5jdGlvbiB0KEMsdyl7cmV0dXJuIGQoQywoKT0+e30sMCx2b2lkIDAsITAsdm9pZCAwLHcpfWUuZGVmZXI9dDtmdW5jdGlvbiBuKEMpe3JldHVybih3LEU9bnVsbCxSKT0+e2xldCBQPSExLFY7cmV0dXJuIFY9QygkPT57aWYoIVApcmV0dXJuIFY/Vi5kaXNwb3NlKCk6UD0hMCx3LmNhbGwoRSwkKX0sbnVsbCxSKSxQJiZWLmRpc3Bvc2UoKSxWfX1lLm9uY2U9bjtmdW5jdGlvbiBzKEMsdyl7cmV0dXJuIGUub25jZShlLmZpbHRlcihDLHcpKX1lLm9uY2VJZj1zO2Z1bmN0aW9uIHIoQyx3LEUpe3JldHVybiBmKChSLFA9bnVsbCxWKT0+QygkPT5SLmNhbGwoUCx3KCQpKSxudWxsLFYpLEUpfWUubWFwPXI7ZnVuY3Rpb24gaShDLHcsRSl7cmV0dXJuIGYoKFIsUD1udWxsLFYpPT5DKCQ9Pnt3KCQpLFIuY2FsbChQLCQpfSxudWxsLFYpLEUpfWUuZm9yRWFjaD1pO2Z1bmN0aW9uIG8oQyx3LEUpe3JldHVybiBmKChSLFA9bnVsbCxWKT0+QygkPT53KCQpJiZSLmNhbGwoUCwkKSxudWxsLFYpLEUpfWUuZmlsdGVyPW87ZnVuY3Rpb24gbChDKXtyZXR1cm4gQ31lLnNpZ25hbD1sO2Z1bmN0aW9uIHUoLi4uQyl7cmV0dXJuKHcsRT1udWxsLFIpPT57Y29uc3QgUD1LciguLi5DLm1hcChWPT5WKCQ9PncuY2FsbChFLCQpKSkpO3JldHVybiBoKFAsUil9fWUuYW55PXU7ZnVuY3Rpb24gYyhDLHcsRSxSKXtsZXQgUD1FO3JldHVybiByKEMsVj0+KFA9dyhQLFYpLFApLFIpfWUucmVkdWNlPWM7ZnVuY3Rpb24gZihDLHcpe2xldCBFO2NvbnN0IFI9e29uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtFPUMoUC5maXJlLFApfSxvbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcigpe0U/LmRpc3Bvc2UoKX19LFA9bmV3IG9lKFIpO3JldHVybiB3Py5hZGQoUCksUC5ldmVudH1mdW5jdGlvbiBoKEMsdyl7cmV0dXJuIHcgaW5zdGFuY2VvZiBBcnJheT93LnB1c2goQyk6dyYmdy5hZGQoQyksQ31mdW5jdGlvbiBkKEMsdyxFPTEwMCxSPSExLFA9ITEsViwkKXtsZXQgSixlZSxRZSxVdD0wLGh0O2NvbnN0IGsxPXtsZWFrV2FybmluZ1RocmVzaG9sZDpWLG9uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtKPUMoUDE9PntVdCsrLGVlPXcoZWUsUDEpLFImJiFRZSYmKEh0LmZpcmUoZWUpLGVlPXZvaWQgMCksaHQ9KCk9Pntjb25zdCBGMT1lZTtlZT12b2lkIDAsUWU9dm9pZCAwLCghUnx8VXQ+MSkmJkh0LmZpcmUoRjEpLFV0PTB9LHR5cGVvZiBFPT0ibnVtYmVyIj8oY2xlYXJUaW1lb3V0KFFlKSxRZT1zZXRUaW1lb3V0KGh0LEUpKTpRZT09PXZvaWQgMCYmKFFlPTAscXVldWVNaWNyb3Rhc2soaHQpKX0pfSxvbldpbGxSZW1vdmVMaXN0ZW5lcigpe1AmJlV0PjAmJmh0Py4oKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtodD12b2lkIDAsSi5kaXNwb3NlKCl9fSxIdD1uZXcgb2UoazEpO3JldHVybiAkPy5hZGQoSHQpLEh0LmV2ZW50fWUuZGVib3VuY2U9ZDtmdW5jdGlvbiBtKEMsdz0wLEUpe3JldHVybiBlLmRlYm91bmNlKEMsKFIsUCk9PlI/KFIucHVzaChQKSxSKTpbUF0sdyx2b2lkIDAsITAsdm9pZCAwLEUpfWUuYWNjdW11bGF0ZT1tO2Z1bmN0aW9uIGcoQyx3PShSLFApPT5SPT09UCxFKXtsZXQgUj0hMCxQO3JldHVybiBvKEMsVj0+e2NvbnN0ICQ9Unx8IXcoVixQKTtyZXR1cm4gUj0hMSxQPVYsJH0sRSl9ZS5sYXRjaD1nO2Z1bmN0aW9uIGIoQyx3LEUpe3JldHVybltlLmZpbHRlcihDLHcsRSksZS5maWx0ZXIoQyxSPT4hdyhSKSxFKV19ZS5zcGxpdD1iO2Z1bmN0aW9uIHgoQyx3PSExLEU9W10sUil7bGV0IFA9RS5zbGljZSgpLFY9QyhlZT0+e1A/UC5wdXNoKGVlKTpKLmZpcmUoZWUpfSk7UiYmUi5hZGQoVik7Y29uc3QgJD0oKT0+e1A/LmZvckVhY2goZWU9PkouZmlyZShlZSkpLFA9bnVsbH0sSj1uZXcgb2Uoe29uV2lsbEFkZEZpcnN0TGlzdGVuZXIoKXtWfHwoVj1DKGVlPT5KLmZpcmUoZWUpKSxSJiZSLmFkZChWKSl9LG9uRGlkQWRkRmlyc3RMaXN0ZW5lcigpe1AmJih3P3NldFRpbWVvdXQoJCk6JCgpKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXIoKXtWJiZWLmRpc3Bvc2UoKSxWPW51bGx9fSk7cmV0dXJuIFImJlIuYWRkKEopLEouZXZlbnR9ZS5idWZmZXI9eDtmdW5jdGlvbiB2KEMsdyl7cmV0dXJuKFIsUCxWKT0+e2NvbnN0ICQ9dyhuZXcgTik7cmV0dXJuIEMoZnVuY3Rpb24oSil7Y29uc3QgZWU9JC5ldmFsdWF0ZShKKTtlZSE9PVMmJlIuY2FsbChQLGVlKX0sdm9pZCAwLFYpfX1lLmNoYWluPXY7Y29uc3QgUz1TeW1ib2woIkhhbHRDaGFpbmFibGUiKTtjbGFzcyBOe2NvbnN0cnVjdG9yKCl7dGhpcy5zdGVwcz1bXX1tYXAodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaCh3KSx0aGlzfWZvckVhY2godyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChFPT4odyhFKSxFKSksdGhpc31maWx0ZXIodyl7cmV0dXJuIHRoaXMuc3RlcHMucHVzaChFPT53KEUpP0U6UyksdGhpc31yZWR1Y2UodyxFKXtsZXQgUj1FO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goUD0+KFI9dyhSLFApLFIpKSx0aGlzfWxhdGNoKHc9KEUsUik9PkU9PT1SKXtsZXQgRT0hMCxSO3JldHVybiB0aGlzLnN0ZXBzLnB1c2goUD0+e2NvbnN0IFY9RXx8IXcoUCxSKTtyZXR1cm4gRT0hMSxSPVAsVj9QOlN9KSx0aGlzfWV2YWx1YXRlKHcpe2Zvcihjb25zdCBFIG9mIHRoaXMuc3RlcHMpaWYodz1FKHcpLHc9PT1TKWJyZWFrO3JldHVybiB3fX1mdW5jdGlvbiBwKEMsdyxFPVI9PlIpe2NvbnN0IFI9KC4uLkopPT4kLmZpcmUoRSguLi5KKSksUD0oKT0+Qy5vbih3LFIpLFY9KCk9PkMucmVtb3ZlTGlzdGVuZXIodyxSKSwkPW5ldyBvZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjpQLG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOlZ9KTtyZXR1cm4gJC5ldmVudH1lLmZyb21Ob2RlRXZlbnRFbWl0dGVyPXA7ZnVuY3Rpb24gXyhDLHcsRT1SPT5SKXtjb25zdCBSPSguLi5KKT0+JC5maXJlKEUoLi4uSikpLFA9KCk9PkMuYWRkRXZlbnRMaXN0ZW5lcih3LFIpLFY9KCk9PkMucmVtb3ZlRXZlbnRMaXN0ZW5lcih3LFIpLCQ9bmV3IG9lKHtvbldpbGxBZGRGaXJzdExpc3RlbmVyOlAsb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6Vn0pO3JldHVybiAkLmV2ZW50fWUuZnJvbURPTUV2ZW50RW1pdHRlcj1fO2Z1bmN0aW9uIEwoQyl7cmV0dXJuIG5ldyBQcm9taXNlKHc9Pm4oQykodykpfWUudG9Qcm9taXNlPUw7ZnVuY3Rpb24gQShDKXtjb25zdCB3PW5ldyBvZTtyZXR1cm4gQy50aGVuKEU9Pnt3LmZpcmUoRSl9LCgpPT57dy5maXJlKHZvaWQgMCl9KS5maW5hbGx5KCgpPT57dy5kaXNwb3NlKCl9KSx3LmV2ZW50fWUuZnJvbVByb21pc2U9QTtmdW5jdGlvbiB5KEMsdyl7cmV0dXJuIEMoRT0+dy5maXJlKEUpKX1lLmZvcndhcmQ9eTtmdW5jdGlvbiBCKEMsdyxFKXtyZXR1cm4gdyhFKSxDKFI9PncoUikpfWUucnVuQW5kU3Vic2NyaWJlPUI7Y2xhc3MgUXtjb25zdHJ1Y3Rvcih3LEUpe3RoaXMuX29ic2VydmFibGU9dyx0aGlzLl9jb3VudGVyPTAsdGhpcy5faGFzQ2hhbmdlZD0hMTtjb25zdCBSPXtvbldpbGxBZGRGaXJzdExpc3RlbmVyOigpPT57dy5hZGRPYnNlcnZlcih0aGlzKSx0aGlzLl9vYnNlcnZhYmxlLnJlcG9ydENoYW5nZXMoKX0sb25EaWRSZW1vdmVMYXN0TGlzdGVuZXI6KCk9Pnt3LnJlbW92ZU9ic2VydmVyKHRoaXMpfX07dGhpcy5lbWl0dGVyPW5ldyBvZShSKSxFJiZFLmFkZCh0aGlzLmVtaXR0ZXIpfWJlZ2luVXBkYXRlKHcpe3RoaXMuX2NvdW50ZXIrK31oYW5kbGVQb3NzaWJsZUNoYW5nZSh3KXt9aGFuZGxlQ2hhbmdlKHcsRSl7dGhpcy5faGFzQ2hhbmdlZD0hMH1lbmRVcGRhdGUodyl7dGhpcy5fY291bnRlci0tLHRoaXMuX2NvdW50ZXI9PT0wJiYodGhpcy5fb2JzZXJ2YWJsZS5yZXBvcnRDaGFuZ2VzKCksdGhpcy5faGFzQ2hhbmdlZCYmKHRoaXMuX2hhc0NoYW5nZWQ9ITEsdGhpcy5lbWl0dGVyLmZpcmUodGhpcy5fb2JzZXJ2YWJsZS5nZXQoKSkpKX19ZnVuY3Rpb24gcShDLHcpe3JldHVybiBuZXcgUShDLHcpLmVtaXR0ZXIuZXZlbnR9ZS5mcm9tT2JzZXJ2YWJsZT1xO2Z1bmN0aW9uIEYoQyl7cmV0dXJuKHcsRSxSKT0+e2xldCBQPTAsVj0hMTtjb25zdCAkPXtiZWdpblVwZGF0ZSgpe1ArK30sZW5kVXBkYXRlKCl7UC0tLFA9PT0wJiYoQy5yZXBvcnRDaGFuZ2VzKCksViYmKFY9ITEsdy5jYWxsKEUpKSl9LGhhbmRsZVBvc3NpYmxlQ2hhbmdlKCl7fSxoYW5kbGVDaGFuZ2UoKXtWPSEwfX07Qy5hZGRPYnNlcnZlcigkKSxDLnJlcG9ydENoYW5nZXMoKTtjb25zdCBKPXtkaXNwb3NlKCl7Qy5yZW1vdmVPYnNlcnZlcigkKX19O3JldHVybiBSIGluc3RhbmNlb2YgSmU/Ui5hZGQoSik6QXJyYXkuaXNBcnJheShSKSYmUi5wdXNoKEopLEp9fWUuZnJvbU9ic2VydmFibGVMaWdodD1GfSkoZ3R8fChndD17fSkpO2NvbnN0IE9lPWNsYXNzIE9le2NvbnN0cnVjdG9yKHQpe3RoaXMubGlzdGVuZXJDb3VudD0wLHRoaXMuaW52b2NhdGlvbkNvdW50PTAsdGhpcy5lbGFwc2VkT3ZlcmFsbD0wLHRoaXMuZHVyYXRpb25zPVtdLHRoaXMubmFtZT1gJHt0fV8ke09lLl9pZFBvb2wrK31gLE9lLmFsbC5hZGQodGhpcyl9c3RhcnQodCl7dGhpcy5fc3RvcFdhdGNoPW5ldyBtdCx0aGlzLmxpc3RlbmVyQ291bnQ9dH1zdG9wKCl7aWYodGhpcy5fc3RvcFdhdGNoKXtjb25zdCB0PXRoaXMuX3N0b3BXYXRjaC5lbGFwc2VkKCk7dGhpcy5kdXJhdGlvbnMucHVzaCh0KSx0aGlzLmVsYXBzZWRPdmVyYWxsKz10LHRoaXMuaW52b2NhdGlvbkNvdW50Kz0xLHRoaXMuX3N0b3BXYXRjaD12b2lkIDB9fX07T2UuYWxsPW5ldyBTZXQsT2UuX2lkUG9vbD0wO2xldCBXdD1PZSxEbj0tMTtjb25zdCBEdD1jbGFzcyBEdHtjb25zdHJ1Y3Rvcih0LG4scz0oRHQuX2lkUG9vbCsrKS50b1N0cmluZygxNikucGFkU3RhcnQoMywiMCIpKXt0aGlzLl9lcnJvckhhbmRsZXI9dCx0aGlzLnRocmVzaG9sZD1uLHRoaXMubmFtZT1zLHRoaXMuX3dhcm5Db3VudGRvd249MH1kaXNwb3NlKCl7dGhpcy5fc3RhY2tzPy5jbGVhcigpfWNoZWNrKHQsbil7Y29uc3Qgcz10aGlzLnRocmVzaG9sZDtpZihzPD0wfHxuPHMpcmV0dXJuO3RoaXMuX3N0YWNrc3x8KHRoaXMuX3N0YWNrcz1uZXcgTWFwKTtjb25zdCByPXRoaXMuX3N0YWNrcy5nZXQodC52YWx1ZSl8fDA7aWYodGhpcy5fc3RhY2tzLnNldCh0LnZhbHVlLHIrMSksdGhpcy5fd2FybkNvdW50ZG93bi09MSx0aGlzLl93YXJuQ291bnRkb3duPD0wKXt0aGlzLl93YXJuQ291bnRkb3duPXMqLjU7Y29uc3RbaSxvXT10aGlzLmdldE1vc3RGcmVxdWVudFN0YWNrKCksbD1gWyR7dGhpcy5uYW1lfV0gcG90ZW50aWFsIGxpc3RlbmVyIExFQUsgZGV0ZWN0ZWQsIGhhdmluZyAke259IGxpc3RlbmVycyBhbHJlYWR5LiBNT1NUIGZyZXF1ZW50IGxpc3RlbmVyICgke299KTpgO2NvbnNvbGUud2FybihsKSxjb25zb2xlLndhcm4oaSk7Y29uc3QgdT1uZXcgbmkobCxpKTt0aGlzLl9lcnJvckhhbmRsZXIodSl9cmV0dXJuKCk9Pntjb25zdCBpPXRoaXMuX3N0YWNrcy5nZXQodC52YWx1ZSl8fDA7dGhpcy5fc3RhY2tzLnNldCh0LnZhbHVlLGktMSl9fWdldE1vc3RGcmVxdWVudFN0YWNrKCl7aWYoIXRoaXMuX3N0YWNrcylyZXR1cm47bGV0IHQsbj0wO2Zvcihjb25zdFtzLHJdb2YgdGhpcy5fc3RhY2tzKSghdHx8bjxyKSYmKHQ9W3Mscl0sbj1yKTtyZXR1cm4gdH19O0R0Ll9pZFBvb2w9MTtsZXQgenQ9RHQ7Y2xhc3MgT3R7c3RhdGljIGNyZWF0ZSgpe2NvbnN0IHQ9bmV3IEVycm9yO3JldHVybiBuZXcgT3QodC5zdGFjaz8/IiIpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH1wcmludCgpe2NvbnNvbGUud2Fybih0aGlzLnZhbHVlLnNwbGl0KGAKYCkuc2xpY2UoMikuam9pbihgCmApKX19Y2xhc3MgbmkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKHQpLHRoaXMubmFtZT0iTGlzdGVuZXJMZWFrRXJyb3IiLHRoaXMuc3RhY2s9bn19Y2xhc3Mgc2kgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKHQpLHRoaXMubmFtZT0iTGlzdGVuZXJSZWZ1c2FsRXJyb3IiLHRoaXMuc3RhY2s9bn19Y2xhc3MganR7Y29uc3RydWN0b3IodCl7dGhpcy52YWx1ZT10fX1jb25zdCByaT0yO2xldCBHdDtjbGFzcyBvZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9zaXplPTAsdGhpcy5fb3B0aW9ucz10LHRoaXMuX2xlYWthZ2VNb249RG4+MHx8dGhpcy5fb3B0aW9ucz8ubGVha1dhcm5pbmdUaHJlc2hvbGQ/bmV3IHp0KHQ/Lm9uTGlzdGVuZXJFcnJvcj8/WWUsdGhpcy5fb3B0aW9ucz8ubGVha1dhcm5pbmdUaHJlc2hvbGQ/P0RuKTp2b2lkIDAsdGhpcy5fcGVyZk1vbj10aGlzLl9vcHRpb25zPy5fcHJvZk5hbWU/bmV3IFd0KHRoaXMuX29wdGlvbnMuX3Byb2ZOYW1lKTp2b2lkIDAsdGhpcy5fZGVsaXZlcnlRdWV1ZT10aGlzLl9vcHRpb25zPy5kZWxpdmVyeVF1ZXVlfWRpc3Bvc2UoKXt0aGlzLl9kaXNwb3NlZHx8KHRoaXMuX2Rpc3Bvc2VkPSEwLHRoaXMuX2RlbGl2ZXJ5UXVldWU/LmN1cnJlbnQ9PT10aGlzJiZ0aGlzLl9kZWxpdmVyeVF1ZXVlLnJlc2V0KCksdGhpcy5fbGlzdGVuZXJzJiYodGhpcy5fbGlzdGVuZXJzPXZvaWQgMCx0aGlzLl9zaXplPTApLHRoaXMuX29wdGlvbnM/Lm9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyPy4oKSx0aGlzLl9sZWFrYWdlTW9uPy5kaXNwb3NlKCkpfWdldCBldmVudCgpe3JldHVybiB0aGlzLl9ldmVudD8/KHRoaXMuX2V2ZW50PSh0LG4scyk9PntpZih0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPnRoaXMuX2xlYWthZ2VNb24udGhyZXNob2xkKioyKXtjb25zdCBsPWBbJHt0aGlzLl9sZWFrYWdlTW9uLm5hbWV9XSBSRUZVU0VTIHRvIGFjY2VwdCBuZXcgbGlzdGVuZXJzIGJlY2F1c2UgaXQgZXhjZWVkZWQgaXRzIHRocmVzaG9sZCBieSBmYXIgKCR7dGhpcy5fc2l6ZX0gdnMgJHt0aGlzLl9sZWFrYWdlTW9uLnRocmVzaG9sZH0pYDtjb25zb2xlLndhcm4obCk7Y29uc3QgdT10aGlzLl9sZWFrYWdlTW9uLmdldE1vc3RGcmVxdWVudFN0YWNrKCk/P1siVU5LTk9XTiBzdGFjayIsLTFdLGM9bmV3IHNpKGAke2x9LiBISU5UOiBTdGFjayBzaG93cyBtb3N0IGZyZXF1ZW50IGxpc3RlbmVyICgke3VbMV19LXRpbWVzKWAsdVswXSk7cmV0dXJuKHRoaXMuX29wdGlvbnM/Lm9uTGlzdGVuZXJFcnJvcnx8WWUpKGMpLFBlLk5vbmV9aWYodGhpcy5fZGlzcG9zZWQpcmV0dXJuIFBlLk5vbmU7biYmKHQ9dC5iaW5kKG4pKTtjb25zdCByPW5ldyBqdCh0KTtsZXQgaTt0aGlzLl9sZWFrYWdlTW9uJiZ0aGlzLl9zaXplPj1NYXRoLmNlaWwodGhpcy5fbGVha2FnZU1vbi50aHJlc2hvbGQqLjIpJiYoci5zdGFjaz1PdC5jcmVhdGUoKSxpPXRoaXMuX2xlYWthZ2VNb24uY2hlY2soci5zdGFjayx0aGlzLl9zaXplKzEpKSx0aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzIGluc3RhbmNlb2YganQ/KHRoaXMuX2RlbGl2ZXJ5UXVldWU/Pyh0aGlzLl9kZWxpdmVyeVF1ZXVlPW5ldyBpaSksdGhpcy5fbGlzdGVuZXJzPVt0aGlzLl9saXN0ZW5lcnMscl0pOnRoaXMuX2xpc3RlbmVycy5wdXNoKHIpOih0aGlzLl9vcHRpb25zPy5vbldpbGxBZGRGaXJzdExpc3RlbmVyPy4odGhpcyksdGhpcy5fbGlzdGVuZXJzPXIsdGhpcy5fb3B0aW9ucz8ub25EaWRBZGRGaXJzdExpc3RlbmVyPy4odGhpcykpLHRoaXMuX3NpemUrKztjb25zdCBvPWR0KCgpPT57R3Q/LnVucmVnaXN0ZXIobyksaT8uKCksdGhpcy5fcmVtb3ZlTGlzdGVuZXIocil9KTtpZihzIGluc3RhbmNlb2YgSmU/cy5hZGQobyk6QXJyYXkuaXNBcnJheShzKSYmcy5wdXNoKG8pLEd0KXtjb25zdCBsPW5ldyBFcnJvcigpLnN0YWNrLnNwbGl0KGAKYCkuc2xpY2UoMiwzKS5qb2luKGAKYCkudHJpbSgpLHU9LyhmaWxlOnx2c2NvZGUtZmlsZTpcL1wvdnNjb2RlLWFwcCk/KFwvW146XSo6XGQrOlxkKykvLmV4ZWMobCk7R3QucmVnaXN0ZXIobyx1Py5bMl0/P2wsbyl9cmV0dXJuIG99KSx0aGlzLl9ldmVudH1fcmVtb3ZlTGlzdGVuZXIodCl7aWYodGhpcy5fb3B0aW9ucz8ub25XaWxsUmVtb3ZlTGlzdGVuZXI/Lih0aGlzKSwhdGhpcy5fbGlzdGVuZXJzKXJldHVybjtpZih0aGlzLl9zaXplPT09MSl7dGhpcy5fbGlzdGVuZXJzPXZvaWQgMCx0aGlzLl9vcHRpb25zPy5vbkRpZFJlbW92ZUxhc3RMaXN0ZW5lcj8uKHRoaXMpLHRoaXMuX3NpemU9MDtyZXR1cm59Y29uc3Qgbj10aGlzLl9saXN0ZW5lcnMscz1uLmluZGV4T2YodCk7aWYocz09PS0xKXRocm93IGNvbnNvbGUubG9nKCJkaXNwb3NlZD8iLHRoaXMuX2Rpc3Bvc2VkKSxjb25zb2xlLmxvZygic2l6ZT8iLHRoaXMuX3NpemUpLGNvbnNvbGUubG9nKCJhcnI/IixKU09OLnN0cmluZ2lmeSh0aGlzLl9saXN0ZW5lcnMpKSxuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBkaXNwb3NlIHVua25vd24gbGlzdGVuZXIiKTt0aGlzLl9zaXplLS0sbltzXT12b2lkIDA7Y29uc3Qgcj10aGlzLl9kZWxpdmVyeVF1ZXVlLmN1cnJlbnQ9PT10aGlzO2lmKHRoaXMuX3NpemUqcmk8PW4ubGVuZ3RoKXtsZXQgaT0wO2ZvcihsZXQgbz0wO288bi5sZW5ndGg7bysrKW5bb10/bltpKytdPW5bb106ciYmKHRoaXMuX2RlbGl2ZXJ5UXVldWUuZW5kLS0saTx0aGlzLl9kZWxpdmVyeVF1ZXVlLmkmJnRoaXMuX2RlbGl2ZXJ5UXVldWUuaS0tKTtuLmxlbmd0aD1pfX1fZGVsaXZlcih0LG4pe2lmKCF0KXJldHVybjtjb25zdCBzPXRoaXMuX29wdGlvbnM/Lm9uTGlzdGVuZXJFcnJvcnx8WWU7aWYoIXMpe3QudmFsdWUobik7cmV0dXJufXRyeXt0LnZhbHVlKG4pfWNhdGNoKHIpe3Mocil9fV9kZWxpdmVyUXVldWUodCl7Y29uc3Qgbj10LmN1cnJlbnQuX2xpc3RlbmVycztmb3IoO3QuaTx0LmVuZDspdGhpcy5fZGVsaXZlcihuW3QuaSsrXSx0LnZhbHVlKTt0LnJlc2V0KCl9ZmlyZSh0KXtpZih0aGlzLl9kZWxpdmVyeVF1ZXVlPy5jdXJyZW50JiYodGhpcy5fZGVsaXZlclF1ZXVlKHRoaXMuX2RlbGl2ZXJ5UXVldWUpLHRoaXMuX3BlcmZNb24/LnN0b3AoKSksdGhpcy5fcGVyZk1vbj8uc3RhcnQodGhpcy5fc2l6ZSksdGhpcy5fbGlzdGVuZXJzKWlmKHRoaXMuX2xpc3RlbmVycyBpbnN0YW5jZW9mIGp0KXRoaXMuX2RlbGl2ZXIodGhpcy5fbGlzdGVuZXJzLHQpO2Vsc2V7Y29uc3Qgbj10aGlzLl9kZWxpdmVyeVF1ZXVlO24uZW5xdWV1ZSh0aGlzLHQsdGhpcy5fbGlzdGVuZXJzLmxlbmd0aCksdGhpcy5fZGVsaXZlclF1ZXVlKG4pfXRoaXMuX3BlcmZNb24/LnN0b3AoKX1oYXNMaXN0ZW5lcnMoKXtyZXR1cm4gdGhpcy5fc2l6ZT4wfX1jbGFzcyBpaXtjb25zdHJ1Y3Rvcigpe3RoaXMuaT0tMSx0aGlzLmVuZD0wfWVucXVldWUodCxuLHMpe3RoaXMuaT0wLHRoaXMuZW5kPXMsdGhpcy5jdXJyZW50PXQsdGhpcy52YWx1ZT1ufXJlc2V0KCl7dGhpcy5pPXRoaXMuZW5kLHRoaXMuY3VycmVudD12b2lkIDAsdGhpcy52YWx1ZT12b2lkIDB9fWZ1bmN0aW9uIGFpKCl7cmV0dXJuIGdsb2JhbFRoaXMuX1ZTQ09ERV9OTFNfTUVTU0FHRVN9ZnVuY3Rpb24gVG4oKXtyZXR1cm4gZ2xvYmFsVGhpcy5fVlNDT0RFX05MU19MQU5HVUFHRX1jb25zdCBvaT1UbigpPT09InBzZXVkbyJ8fHR5cGVvZiBkb2N1bWVudDwidSImJmRvY3VtZW50LmxvY2F0aW9uJiZkb2N1bWVudC5sb2NhdGlvbi5oYXNoLmluZGV4T2YoInBzZXVkbz10cnVlIik+PTA7ZnVuY3Rpb24gVm4oZSx0KXtsZXQgbjtyZXR1cm4gdC5sZW5ndGg9PT0wfHwobj1lLnJlcGxhY2UoL1x7KFxkKylcfS9nLChzLHIpPT57Y29uc3QgaT1yWzBdLG89dFtpXTtsZXQgbD1zO3JldHVybiB0eXBlb2Ygbz09InN0cmluZyI/bD1vOih0eXBlb2Ygbz09Im51bWJlciJ8fHR5cGVvZiBvPT0iYm9vbGVhbiJ8fG89PT12b2lkIDB8fG89PT1udWxsKSYmKGw9U3RyaW5nKG8pKSxsfSkpLG9pJiYobj0i77y7IituLnJlcGxhY2UoL1thb3VlaV0vZywiJCYkJiIpKyLvvL0iKSxufWZ1bmN0aW9uIHooZSx0LC4uLm4pe3JldHVybiBWbih0eXBlb2YgZT09Im51bWJlciI/bGkoZSx0KTp0LG4pfWZ1bmN0aW9uIGxpKGUsdCl7Y29uc3Qgbj1haSgpPy5bZV07aWYodHlwZW9mIG4hPSJzdHJpbmciKXtpZih0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ7dGhyb3cgbmV3IEVycm9yKGAhISEgTkxTIE1JU1NJTkc6ICR7ZX0gISEhYCl9cmV0dXJuIG59Y29uc3QgRmU9ImVuIjtsZXQgWHQ9ITEsUXQ9ITEsWXQ9ITEsSW49ITEsSnQ9ITEsYnQsWnQ9RmUsQm49RmUsdWksYmU7Y29uc3QgX2U9Z2xvYmFsVGhpcztsZXQgaWU7dHlwZW9mIF9lLnZzY29kZTwidSImJnR5cGVvZiBfZS52c2NvZGUucHJvY2VzczwidSI/aWU9X2UudnNjb2RlLnByb2Nlc3M6dHlwZW9mIHByb2Nlc3M8InUiJiZ0eXBlb2YgcHJvY2Vzcz8udmVyc2lvbnM/Lm5vZGU9PSJzdHJpbmciJiYoaWU9cHJvY2Vzcyk7Y29uc3QgY2k9dHlwZW9mIGllPy52ZXJzaW9ucz8uZWxlY3Ryb249PSJzdHJpbmciJiZpZT8udHlwZT09PSJyZW5kZXJlciI7aWYodHlwZW9mIGllPT0ib2JqZWN0Iil7WHQ9aWUucGxhdGZvcm09PT0id2luMzIiLFF0PWllLnBsYXRmb3JtPT09ImRhcndpbiIsWXQ9aWUucGxhdGZvcm09PT0ibGludXgiLFl0JiZpZS5lbnYuU05BUCYmaWUuZW52LlNOQVBfUkVWSVNJT04saWUuZW52LkNJfHxpZS5lbnYuQlVJTERfQVJUSUZBQ1RTVEFHSU5HRElSRUNUT1JZLGJ0PUZlLFp0PUZlO2NvbnN0IGU9aWUuZW52LlZTQ09ERV9OTFNfQ09ORklHO2lmKGUpdHJ5e2NvbnN0IHQ9SlNPTi5wYXJzZShlKTtidD10LnVzZXJMb2NhbGUsQm49dC5vc0xvY2FsZSxadD10LnJlc29sdmVkTGFuZ3VhZ2V8fEZlLHVpPXQubGFuZ3VhZ2VQYWNrPy50cmFuc2xhdGlvbnNDb25maWdGaWxlfWNhdGNoe31Jbj0hMH1lbHNlIHR5cGVvZiBuYXZpZ2F0b3I9PSJvYmplY3QiJiYhY2k/KGJlPW5hdmlnYXRvci51c2VyQWdlbnQsWHQ9YmUuaW5kZXhPZigiV2luZG93cyIpPj0wLFF0PWJlLmluZGV4T2YoIk1hY2ludG9zaCIpPj0wLChiZS5pbmRleE9mKCJNYWNpbnRvc2giKT49MHx8YmUuaW5kZXhPZigiaVBhZCIpPj0wfHxiZS5pbmRleE9mKCJpUGhvbmUiKT49MCkmJm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyYmbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzPjAsWXQ9YmUuaW5kZXhPZigiTGludXgiKT49MCxiZT8uaW5kZXhPZigiTW9iaSIpPj0wLEp0PSEwLFp0PVRuKCl8fEZlLGJ0PW5hdmlnYXRvci5sYW5ndWFnZS50b0xvd2VyQ2FzZSgpLEJuPWJ0KTpjb25zb2xlLmVycm9yKCJVbmFibGUgdG8gcmVzb2x2ZSBwbGF0Zm9ybS4iKTtjb25zdCBaZT1YdCxoaT1RdCxmaT1JbixkaT1KdCxtaT1KdCYmdHlwZW9mIF9lLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiI/X2Uub3JpZ2luOnZvaWQgMCxkZT1iZSxnaT10eXBlb2YgX2UucG9zdE1lc3NhZ2U9PSJmdW5jdGlvbiImJiFfZS5pbXBvcnRTY3JpcHRzOygoKT0+e2lmKGdpKXtjb25zdCBlPVtdO19lLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG49PntpZihuLmRhdGEmJm4uZGF0YS52c2NvZGVTY2hlZHVsZUFzeW5jV29yaylmb3IobGV0IHM9MCxyPWUubGVuZ3RoO3M8cjtzKyspe2NvbnN0IGk9ZVtzXTtpZihpLmlkPT09bi5kYXRhLnZzY29kZVNjaGVkdWxlQXN5bmNXb3JrKXtlLnNwbGljZShzLDEpLGkuY2FsbGJhY2soKTtyZXR1cm59fX0pO2xldCB0PTA7cmV0dXJuIG49Pntjb25zdCBzPSsrdDtlLnB1c2goe2lkOnMsY2FsbGJhY2s6bn0pLF9lLnBvc3RNZXNzYWdlKHt2c2NvZGVTY2hlZHVsZUFzeW5jV29yazpzfSwiKiIpfX1yZXR1cm4gZT0+c2V0VGltZW91dChlKX0pKCk7Y29uc3QgYmk9ISEoZGUmJmRlLmluZGV4T2YoIkNocm9tZSIpPj0wKTtkZSYmZGUuaW5kZXhPZigiRmlyZWZveCIpPj0wLCFiaSYmZGUmJmRlLmluZGV4T2YoIlNhZmFyaSIpPj0wLGRlJiZkZS5pbmRleE9mKCJFZGcvIik+PTAsZGUmJmRlLmluZGV4T2YoIkFuZHJvaWQiKT49MDtmdW5jdGlvbiBfaShlKXtyZXR1cm4gZX1jbGFzcyBwaXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGFzdENhY2hlPXZvaWQgMCx0aGlzLmxhc3RBcmdLZXk9dm9pZCAwLHR5cGVvZiB0PT0iZnVuY3Rpb24iPyh0aGlzLl9mbj10LHRoaXMuX2NvbXB1dGVLZXk9X2kpOih0aGlzLl9mbj1uLHRoaXMuX2NvbXB1dGVLZXk9dC5nZXRDYWNoZUtleSl9Z2V0KHQpe2NvbnN0IG49dGhpcy5fY29tcHV0ZUtleSh0KTtyZXR1cm4gdGhpcy5sYXN0QXJnS2V5IT09biYmKHRoaXMubGFzdEFyZ0tleT1uLHRoaXMubGFzdENhY2hlPXRoaXMuX2ZuKHQpKSx0aGlzLmxhc3RDYWNoZX19Y2xhc3MgcW57Y29uc3RydWN0b3IodCl7dGhpcy5leGVjdXRvcj10LHRoaXMuX2RpZFJ1bj0hMX1nZXQgdmFsdWUoKXtpZighdGhpcy5fZGlkUnVuKXRyeXt0aGlzLl92YWx1ZT10aGlzLmV4ZWN1dG9yKCl9Y2F0Y2godCl7dGhpcy5fZXJyb3I9dH1maW5hbGx5e3RoaXMuX2RpZFJ1bj0hMH1pZih0aGlzLl9lcnJvcil0aHJvdyB0aGlzLl9lcnJvcjtyZXR1cm4gdGhpcy5fdmFsdWV9Z2V0IHJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfX1mdW5jdGlvbiB4aShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXFxce1x9XCpcK1w/XHxcXlwkXC5cW1xdXChcKV0vZywiXFwkJiIpfWZ1bmN0aW9uIHdpKGUpe3JldHVybiBlLnNwbGl0KC9cclxufFxyfFxuLyl9ZnVuY3Rpb24gTGkoZSl7Zm9yKGxldCB0PTAsbj1lLmxlbmd0aDt0PG47dCsrKXtjb25zdCBzPWUuY2hhckNvZGVBdCh0KTtpZihzIT09MzImJnMhPT05KXJldHVybiB0fXJldHVybi0xfWZ1bmN0aW9uIHZpKGUsdD1lLmxlbmd0aC0xKXtmb3IobGV0IG49dDtuPj0wO24tLSl7Y29uc3Qgcz1lLmNoYXJDb2RlQXQobik7aWYocyE9PTMyJiZzIT09OSlyZXR1cm4gbn1yZXR1cm4tMX1mdW5jdGlvbiBVbihlKXtyZXR1cm4gZT49NjUmJmU8PTkwfWZ1bmN0aW9uIF90KGUpe3JldHVybiA1NTI5Njw9ZSYmZTw9NTYzMTl9ZnVuY3Rpb24gS3QoZSl7cmV0dXJuIDU2MzIwPD1lJiZlPD01NzM0M31mdW5jdGlvbiBIbihlLHQpe3JldHVybihlLTU1Mjk2PDwxMCkrKHQtNTYzMjApKzY1NTM2fWZ1bmN0aW9uIE5pKGUsdCxuKXtjb25zdCBzPWUuY2hhckNvZGVBdChuKTtpZihfdChzKSYmbisxPHQpe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KG4rMSk7aWYoS3QocikpcmV0dXJuIEhuKHMscil9cmV0dXJuIHN9Y29uc3QgU2k9L15bXHRcblxyXHgyMC1ceDdFXSokLztmdW5jdGlvbiBDaShlKXtyZXR1cm4gU2kudGVzdChlKX1jb25zdCBnZT1jbGFzcyBnZXtzdGF0aWMgZ2V0SW5zdGFuY2UodCl7cmV0dXJuIGdlLmNhY2hlLmdldChBcnJheS5mcm9tKHQpKX1zdGF0aWMgZ2V0TG9jYWxlcygpe3JldHVybiBnZS5fbG9jYWxlcy52YWx1ZX1jb25zdHJ1Y3Rvcih0KXt0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5PXR9aXNBbWJpZ3VvdXModCl7cmV0dXJuIHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkuaGFzKHQpfWdldFByaW1hcnlDb25mdXNhYmxlKHQpe3JldHVybiB0aGlzLmNvbmZ1c2FibGVEaWN0aW9uYXJ5LmdldCh0KX1nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpe3JldHVybiBuZXcgU2V0KHRoaXMuY29uZnVzYWJsZURpY3Rpb25hcnkua2V5cygpKX19O2dlLmFtYmlndW91c0NoYXJhY3RlckRhdGE9bmV3IHFuKCgpPT5KU09OLnBhcnNlKCd7Il9jb21tb24iOls4MjMyLDMyLDgyMzMsMzIsNTc2MCwzMiw4MTkyLDMyLDgxOTMsMzIsODE5NCwzMiw4MTk1LDMyLDgxOTYsMzIsODE5NywzMiw4MTk4LDMyLDgyMDAsMzIsODIwMSwzMiw4MjAyLDMyLDgyODcsMzIsODE5OSwzMiw4MjM5LDMyLDIwNDIsOTUsNjUxMDEsOTUsNjUxMDIsOTUsNjUxMDMsOTUsODIwOCw0NSw4MjA5LDQ1LDgyMTAsNDUsNjUxMTIsNDUsMTc0OCw0NSw4MjU5LDQ1LDcyNyw0NSw4NzIyLDQ1LDEwMTM0LDQ1LDExNDUwLDQ1LDE1NDksNDQsMTY0Myw0NCw4MjE4LDQ0LDE4NCw0NCw0MjIzMyw0NCw4OTQsNTksMjMwNyw1OCwyNjkxLDU4LDE0MTcsNTgsMTc5NSw1OCwxNzk2LDU4LDU4NjgsNTgsNjUwNzIsNTgsNjE0Nyw1OCw2MTUzLDU4LDgyODIsNTgsMTQ3NSw1OCw3NjAsNTgsNDI4ODksNTgsODc1OCw1OCw3MjAsNTgsNDIyMzcsNTgsNDUxLDMzLDExNjAxLDMzLDY2MCw2Myw1NzcsNjMsMjQyOSw2Myw1MDM4LDYzLDQyNzMxLDYzLDExOTE0OSw0Niw4MjI4LDQ2LDE3OTMsNDYsMTc5NCw0Niw0MjUxMCw0Niw2ODE3Niw0NiwxNjMyLDQ2LDE3NzYsNDYsNDIyMzIsNDYsMTM3Myw5Niw2NTI4Nyw5Niw4MjE5LDk2LDgyNDIsOTYsMTM3MCw5NiwxNTIzLDk2LDgxNzUsOTYsNjUzNDQsOTYsOTAwLDk2LDgxODksOTYsODEyNSw5Niw4MTI3LDk2LDgxOTAsOTYsNjk3LDk2LDg4NCw5Niw3MTIsOTYsNzE0LDk2LDcxNSw5Niw3NTYsOTYsNjk5LDk2LDcwMSw5Niw3MDAsOTYsNzAyLDk2LDQyODkyLDk2LDE0OTcsOTYsMjAzNiw5NiwyMDM3LDk2LDUxOTQsOTYsNTgzNiw5Niw5NDAzMyw5Niw5NDAzNCw5Niw2NTMzOSw5MSwxMDA4OCw0MCwxMDA5OCw0MCwxMjMwOCw0MCw2NDgzMCw0MCw2NTM0MSw5MywxMDA4OSw0MSwxMDA5OSw0MSwxMjMwOSw0MSw2NDgzMSw0MSwxMDEwMCwxMjMsMTE5MDYwLDEyMywxMDEwMSwxMjUsNjUzNDIsOTQsODI3MCw0MiwxNjQ1LDQyLDg3MjcsNDIsNjYzMzUsNDIsNTk0MSw0Nyw4MjU3LDQ3LDg3MjUsNDcsODI2MCw0Nyw5NTg1LDQ3LDEwMTg3LDQ3LDEwNzQ0LDQ3LDExOTM1NCw0NywxMjc1NSw0NywxMjMzOSw0NywxMTQ2Miw0NywyMDAzMSw0NywxMjAzNSw0Nyw2NTM0MCw5Miw2NTEyOCw5Miw4NzI2LDkyLDEwMTg5LDkyLDEwNzQxLDkyLDEwNzQ1LDkyLDExOTMxMSw5MiwxMTkzNTUsOTIsMTI3NTYsOTIsMjAwMjIsOTIsMTIwMzQsOTIsNDI4NzIsMzgsNzA4LDk0LDcxMCw5NCw1ODY5LDQzLDEwMTMzLDQzLDY2MjAzLDQzLDgyNDksNjAsMTAwOTQsNjAsNzA2LDYwLDExOTM1MCw2MCw1MTc2LDYwLDU4MTAsNjAsNTEyMCw2MSwxMTg0MCw2MSwxMjQ0OCw2MSw0MjIzOSw2MSw4MjUwLDYyLDEwMDk1LDYyLDcwNyw2MiwxMTkzNTEsNjIsNTE3MSw2Miw5NDAxNSw2Miw4Mjc1LDEyNiw3MzIsMTI2LDgxMjgsMTI2LDg3NjQsMTI2LDY1MzcyLDEyNCw2NTI5Myw0NSwxMjA3ODQsNTAsMTIwNzk0LDUwLDEyMDgwNCw1MCwxMjA4MTQsNTAsMTIwODI0LDUwLDEzMDAzNCw1MCw0Mjg0Miw1MCw0MjMsNTAsMTAwMCw1MCw0MjU2NCw1MCw1MzExLDUwLDQyNzM1LDUwLDExOTMwMiw1MSwxMjA3ODUsNTEsMTIwNzk1LDUxLDEyMDgwNSw1MSwxMjA4MTUsNTEsMTIwODI1LDUxLDEzMDAzNSw1MSw0MjkyMyw1MSw1NDAsNTEsNDM5LDUxLDQyODU4LDUxLDExNDY4LDUxLDEyNDgsNTEsOTQwMTEsNTEsNzE4ODIsNTEsMTIwNzg2LDUyLDEyMDc5Niw1MiwxMjA4MDYsNTIsMTIwODE2LDUyLDEyMDgyNiw1MiwxMzAwMzYsNTIsNTA3MCw1Miw3MTg1NSw1MiwxMjA3ODcsNTMsMTIwNzk3LDUzLDEyMDgwNyw1MywxMjA4MTcsNTMsMTIwODI3LDUzLDEzMDAzNyw1Myw0NDQsNTMsNzE4NjcsNTMsMTIwNzg4LDU0LDEyMDc5OCw1NCwxMjA4MDgsNTQsMTIwODE4LDU0LDEyMDgyOCw1NCwxMzAwMzgsNTQsMTE0NzQsNTQsNTEwMiw1NCw3MTg5Myw1NCwxMTkzMTQsNTUsMTIwNzg5LDU1LDEyMDc5OSw1NSwxMjA4MDksNTUsMTIwODE5LDU1LDEyMDgyOSw1NSwxMzAwMzksNTUsNjY3NzAsNTUsNzE4NzgsNTUsMjgxOSw1NiwyNTM4LDU2LDI2NjYsNTYsMTI1MTMxLDU2LDEyMDc5MCw1NiwxMjA4MDAsNTYsMTIwODEwLDU2LDEyMDgyMCw1NiwxMjA4MzAsNTYsMTMwMDQwLDU2LDU0Nyw1Niw1NDYsNTYsNjYzMzAsNTYsMjY2Myw1NywyOTIwLDU3LDI1NDEsNTcsMzQzNyw1NywxMjA3OTEsNTcsMTIwODAxLDU3LDEyMDgxMSw1NywxMjA4MjEsNTcsMTIwODMxLDU3LDEzMDA0MSw1Nyw0Mjg2Miw1NywxMTQ2Niw1Nyw3MTg4NCw1Nyw3MTg1Miw1Nyw3MTg5NCw1Nyw5MDgyLDk3LDY1MzQ1LDk3LDExOTgzNCw5NywxMTk4ODYsOTcsMTE5OTM4LDk3LDExOTk5MCw5NywxMjAwNDIsOTcsMTIwMDk0LDk3LDEyMDE0Niw5NywxMjAxOTgsOTcsMTIwMjUwLDk3LDEyMDMwMiw5NywxMjAzNTQsOTcsMTIwNDA2LDk3LDEyMDQ1OCw5Nyw1OTMsOTcsOTQ1LDk3LDEyMDUxNCw5NywxMjA1NzIsOTcsMTIwNjMwLDk3LDEyMDY4OCw5NywxMjA3NDYsOTcsNjUzMTMsNjUsMTE5ODA4LDY1LDExOTg2MCw2NSwxMTk5MTIsNjUsMTE5OTY0LDY1LDEyMDAxNiw2NSwxMjAwNjgsNjUsMTIwMTIwLDY1LDEyMDE3Miw2NSwxMjAyMjQsNjUsMTIwMjc2LDY1LDEyMDMyOCw2NSwxMjAzODAsNjUsMTIwNDMyLDY1LDkxMyw2NSwxMjA0ODgsNjUsMTIwNTQ2LDY1LDEyMDYwNCw2NSwxMjA2NjIsNjUsMTIwNzIwLDY1LDUwMzQsNjUsNTU3Myw2NSw0MjIyMiw2NSw5NDAxNiw2NSw2NjIwOCw2NSwxMTk4MzUsOTgsMTE5ODg3LDk4LDExOTkzOSw5OCwxMTk5OTEsOTgsMTIwMDQzLDk4LDEyMDA5NSw5OCwxMjAxNDcsOTgsMTIwMTk5LDk4LDEyMDI1MSw5OCwxMjAzMDMsOTgsMTIwMzU1LDk4LDEyMDQwNyw5OCwxMjA0NTksOTgsMzg4LDk4LDUwNzEsOTgsNTIzNCw5OCw1NTUxLDk4LDY1MzE0LDY2LDg0OTIsNjYsMTE5ODA5LDY2LDExOTg2MSw2NiwxMTk5MTMsNjYsMTIwMDE3LDY2LDEyMDA2OSw2NiwxMjAxMjEsNjYsMTIwMTczLDY2LDEyMDIyNSw2NiwxMjAyNzcsNjYsMTIwMzI5LDY2LDEyMDM4MSw2NiwxMjA0MzMsNjYsNDI5MzIsNjYsOTE0LDY2LDEyMDQ4OSw2NiwxMjA1NDcsNjYsMTIwNjA1LDY2LDEyMDY2Myw2NiwxMjA3MjEsNjYsNTEwOCw2Niw1NjIzLDY2LDQyMTkyLDY2LDY2MTc4LDY2LDY2MjA5LDY2LDY2MzA1LDY2LDY1MzQ3LDk5LDg1NzMsOTksMTE5ODM2LDk5LDExOTg4OCw5OSwxMTk5NDAsOTksMTE5OTkyLDk5LDEyMDA0NCw5OSwxMjAwOTYsOTksMTIwMTQ4LDk5LDEyMDIwMCw5OSwxMjAyNTIsOTksMTIwMzA0LDk5LDEyMDM1Niw5OSwxMjA0MDgsOTksMTIwNDYwLDk5LDc0MjgsOTksMTAxMCw5OSwxMTQyOSw5OSw0Mzk1MSw5OSw2NjYyMSw5OSwxMjg4NDQsNjcsNzE5MjIsNjcsNzE5MTMsNjcsNjUzMTUsNjcsODU1Nyw2Nyw4NDUwLDY3LDg0OTMsNjcsMTE5ODEwLDY3LDExOTg2Miw2NywxMTk5MTQsNjcsMTE5OTY2LDY3LDEyMDAxOCw2NywxMjAxNzQsNjcsMTIwMjI2LDY3LDEyMDI3OCw2NywxMjAzMzAsNjcsMTIwMzgyLDY3LDEyMDQzNCw2NywxMDE3LDY3LDExNDI4LDY3LDUwODcsNjcsNDIyMDIsNjcsNjYyMTAsNjcsNjYzMDYsNjcsNjY1ODEsNjcsNjY4NDQsNjcsODU3NCwxMDAsODUxOCwxMDAsMTE5ODM3LDEwMCwxMTk4ODksMTAwLDExOTk0MSwxMDAsMTE5OTkzLDEwMCwxMjAwNDUsMTAwLDEyMDA5NywxMDAsMTIwMTQ5LDEwMCwxMjAyMDEsMTAwLDEyMDI1MywxMDAsMTIwMzA1LDEwMCwxMjAzNTcsMTAwLDEyMDQwOSwxMDAsMTIwNDYxLDEwMCwxMjgxLDEwMCw1MDk1LDEwMCw1MjMxLDEwMCw0MjE5NCwxMDAsODU1OCw2OCw4NTE3LDY4LDExOTgxMSw2OCwxMTk4NjMsNjgsMTE5OTE1LDY4LDExOTk2Nyw2OCwxMjAwMTksNjgsMTIwMDcxLDY4LDEyMDEyMyw2OCwxMjAxNzUsNjgsMTIwMjI3LDY4LDEyMDI3OSw2OCwxMjAzMzEsNjgsMTIwMzgzLDY4LDEyMDQzNSw2OCw1MDI0LDY4LDU1OTgsNjgsNTYxMCw2OCw0MjE5NSw2OCw4NDk0LDEwMSw2NTM0OSwxMDEsODQ5NSwxMDEsODUxOSwxMDEsMTE5ODM4LDEwMSwxMTk4OTAsMTAxLDExOTk0MiwxMDEsMTIwMDQ2LDEwMSwxMjAwOTgsMTAxLDEyMDE1MCwxMDEsMTIwMjAyLDEwMSwxMjAyNTQsMTAxLDEyMDMwNiwxMDEsMTIwMzU4LDEwMSwxMjA0MTAsMTAxLDEyMDQ2MiwxMDEsNDM4MjYsMTAxLDEyMTMsMTAxLDg5NTksNjksNjUzMTcsNjksODQ5Niw2OSwxMTk4MTIsNjksMTE5ODY0LDY5LDExOTkxNiw2OSwxMjAwMjAsNjksMTIwMDcyLDY5LDEyMDEyNCw2OSwxMjAxNzYsNjksMTIwMjI4LDY5LDEyMDI4MCw2OSwxMjAzMzIsNjksMTIwMzg0LDY5LDEyMDQzNiw2OSw5MTcsNjksMTIwNDkyLDY5LDEyMDU1MCw2OSwxMjA2MDgsNjksMTIwNjY2LDY5LDEyMDcyNCw2OSwxMTU3Nyw2OSw1MDM2LDY5LDQyMjI0LDY5LDcxODQ2LDY5LDcxODU0LDY5LDY2MTgyLDY5LDExOTgzOSwxMDIsMTE5ODkxLDEwMiwxMTk5NDMsMTAyLDExOTk5NSwxMDIsMTIwMDQ3LDEwMiwxMjAwOTksMTAyLDEyMDE1MSwxMDIsMTIwMjAzLDEwMiwxMjAyNTUsMTAyLDEyMDMwNywxMDIsMTIwMzU5LDEwMiwxMjA0MTEsMTAyLDEyMDQ2MywxMDIsNDM4MjksMTAyLDQyOTA1LDEwMiwzODMsMTAyLDc4MzcsMTAyLDE0MTIsMTAyLDExOTMxNSw3MCw4NDk3LDcwLDExOTgxMyw3MCwxMTk4NjUsNzAsMTE5OTE3LDcwLDEyMDAyMSw3MCwxMjAwNzMsNzAsMTIwMTI1LDcwLDEyMDE3Nyw3MCwxMjAyMjksNzAsMTIwMjgxLDcwLDEyMDMzMyw3MCwxMjAzODUsNzAsMTIwNDM3LDcwLDQyOTA0LDcwLDk4OCw3MCwxMjA3NzgsNzAsNTU1Niw3MCw0MjIwNSw3MCw3MTg3NCw3MCw3MTg0Miw3MCw2NjE4Myw3MCw2NjIxMyw3MCw2Njg1Myw3MCw2NTM1MSwxMDMsODQ1OCwxMDMsMTE5ODQwLDEwMywxMTk4OTIsMTAzLDExOTk0NCwxMDMsMTIwMDQ4LDEwMywxMjAxMDAsMTAzLDEyMDE1MiwxMDMsMTIwMjA0LDEwMywxMjAyNTYsMTAzLDEyMDMwOCwxMDMsMTIwMzYwLDEwMywxMjA0MTIsMTAzLDEyMDQ2NCwxMDMsNjA5LDEwMyw3NTU1LDEwMywzOTcsMTAzLDE0MDksMTAzLDExOTgxNCw3MSwxMTk4NjYsNzEsMTE5OTE4LDcxLDExOTk3MCw3MSwxMjAwMjIsNzEsMTIwMDc0LDcxLDEyMDEyNiw3MSwxMjAxNzgsNzEsMTIwMjMwLDcxLDEyMDI4Miw3MSwxMjAzMzQsNzEsMTIwMzg2LDcxLDEyMDQzOCw3MSwxMjkyLDcxLDUwNTYsNzEsNTEwNyw3MSw0MjE5OCw3MSw2NTM1MiwxMDQsODQ2MiwxMDQsMTE5ODQxLDEwNCwxMTk5NDUsMTA0LDExOTk5NywxMDQsMTIwMDQ5LDEwNCwxMjAxMDEsMTA0LDEyMDE1MywxMDQsMTIwMjA1LDEwNCwxMjAyNTcsMTA0LDEyMDMwOSwxMDQsMTIwMzYxLDEwNCwxMjA0MTMsMTA0LDEyMDQ2NSwxMDQsMTIxMSwxMDQsMTM5MiwxMDQsNTA1OCwxMDQsNjUzMjAsNzIsODQ1OSw3Miw4NDYwLDcyLDg0NjEsNzIsMTE5ODE1LDcyLDExOTg2Nyw3MiwxMTk5MTksNzIsMTIwMDIzLDcyLDEyMDE3OSw3MiwxMjAyMzEsNzIsMTIwMjgzLDcyLDEyMDMzNSw3MiwxMjAzODcsNzIsMTIwNDM5LDcyLDkxOSw3MiwxMjA0OTQsNzIsMTIwNTUyLDcyLDEyMDYxMCw3MiwxMjA2NjgsNzIsMTIwNzI2LDcyLDExNDA2LDcyLDUwNTEsNzIsNTUwMCw3Miw0MjIxNSw3Miw2NjI1NSw3Miw3MzEsMTA1LDkwNzUsMTA1LDY1MzUzLDEwNSw4NTYwLDEwNSw4NTA1LDEwNSw4NTIwLDEwNSwxMTk4NDIsMTA1LDExOTg5NCwxMDUsMTE5OTQ2LDEwNSwxMTk5OTgsMTA1LDEyMDA1MCwxMDUsMTIwMTAyLDEwNSwxMjAxNTQsMTA1LDEyMDIwNiwxMDUsMTIwMjU4LDEwNSwxMjAzMTAsMTA1LDEyMDM2MiwxMDUsMTIwNDE0LDEwNSwxMjA0NjYsMTA1LDEyMDQ4NCwxMDUsNjE4LDEwNSw2MTcsMTA1LDk1MywxMDUsODEyNiwxMDUsODkwLDEwNSwxMjA1MjIsMTA1LDEyMDU4MCwxMDUsMTIwNjM4LDEwNSwxMjA2OTYsMTA1LDEyMDc1NCwxMDUsMTExMCwxMDUsNDI1NjcsMTA1LDEyMzEsMTA1LDQzODkzLDEwNSw1MDI5LDEwNSw3MTg3NSwxMDUsNjUzNTQsMTA2LDg1MjEsMTA2LDExOTg0MywxMDYsMTE5ODk1LDEwNiwxMTk5NDcsMTA2LDExOTk5OSwxMDYsMTIwMDUxLDEwNiwxMjAxMDMsMTA2LDEyMDE1NSwxMDYsMTIwMjA3LDEwNiwxMjAyNTksMTA2LDEyMDMxMSwxMDYsMTIwMzYzLDEwNiwxMjA0MTUsMTA2LDEyMDQ2NywxMDYsMTAxMSwxMDYsMTExMiwxMDYsNjUzMjIsNzQsMTE5ODE3LDc0LDExOTg2OSw3NCwxMTk5MjEsNzQsMTE5OTczLDc0LDEyMDAyNSw3NCwxMjAwNzcsNzQsMTIwMTI5LDc0LDEyMDE4MSw3NCwxMjAyMzMsNzQsMTIwMjg1LDc0LDEyMDMzNyw3NCwxMjAzODksNzQsMTIwNDQxLDc0LDQyOTMwLDc0LDg5NSw3NCwxMDMyLDc0LDUwMzUsNzQsNTI2MSw3NCw0MjIwMSw3NCwxMTk4NDQsMTA3LDExOTg5NiwxMDcsMTE5OTQ4LDEwNywxMjAwMDAsMTA3LDEyMDA1MiwxMDcsMTIwMTA0LDEwNywxMjAxNTYsMTA3LDEyMDIwOCwxMDcsMTIwMjYwLDEwNywxMjAzMTIsMTA3LDEyMDM2NCwxMDcsMTIwNDE2LDEwNywxMjA0NjgsMTA3LDg0OTAsNzUsNjUzMjMsNzUsMTE5ODE4LDc1LDExOTg3MCw3NSwxMTk5MjIsNzUsMTE5OTc0LDc1LDEyMDAyNiw3NSwxMjAwNzgsNzUsMTIwMTMwLDc1LDEyMDE4Miw3NSwxMjAyMzQsNzUsMTIwMjg2LDc1LDEyMDMzOCw3NSwxMjAzOTAsNzUsMTIwNDQyLDc1LDkyMiw3NSwxMjA0OTcsNzUsMTIwNTU1LDc1LDEyMDYxMyw3NSwxMjA2NzEsNzUsMTIwNzI5LDc1LDExNDEyLDc1LDUwOTQsNzUsNTg0NSw3NSw0MjE5OSw3NSw2Njg0MCw3NSwxNDcyLDEwOCw4NzM5LDczLDkyMTMsNzMsNjU1MTIsNzMsMTYzMywxMDgsMTc3Nyw3Myw2NjMzNiwxMDgsMTI1MTI3LDEwOCwxMjA3ODMsNzMsMTIwNzkzLDczLDEyMDgwMyw3MywxMjA4MTMsNzMsMTIwODIzLDczLDEzMDAzMyw3Myw2NTMyMSw3Myw4NTQ0LDczLDg0NjQsNzMsODQ2NSw3MywxMTk4MTYsNzMsMTE5ODY4LDczLDExOTkyMCw3MywxMjAwMjQsNzMsMTIwMTI4LDczLDEyMDE4MCw3MywxMjAyMzIsNzMsMTIwMjg0LDczLDEyMDMzNiw3MywxMjAzODgsNzMsMTIwNDQwLDczLDY1MzU2LDEwOCw4NTcyLDczLDg0NjcsMTA4LDExOTg0NSwxMDgsMTE5ODk3LDEwOCwxMTk5NDksMTA4LDEyMDAwMSwxMDgsMTIwMDUzLDEwOCwxMjAxMDUsNzMsMTIwMTU3LDczLDEyMDIwOSw3MywxMjAyNjEsNzMsMTIwMzEzLDczLDEyMDM2NSw3MywxMjA0MTcsNzMsMTIwNDY5LDczLDQ0OCw3MywxMjA0OTYsNzMsMTIwNTU0LDczLDEyMDYxMiw3MywxMjA2NzAsNzMsMTIwNzI4LDczLDExNDEwLDczLDEwMzAsNzMsMTIxNiw3MywxNDkzLDEwOCwxNTAzLDEwOCwxNTc1LDEwOCwxMjY0NjQsMTA4LDEyNjU5MiwxMDgsNjUxNjYsMTA4LDY1MTY1LDEwOCwxOTk0LDEwOCwxMTU5OSw3Myw1ODI1LDczLDQyMjI2LDczLDkzOTkyLDczLDY2MTg2LDEyNCw2NjMxMywxMjQsMTE5MzM4LDc2LDg1NTYsNzYsODQ2Niw3NiwxMTk4MTksNzYsMTE5ODcxLDc2LDExOTkyMyw3NiwxMjAwMjcsNzYsMTIwMDc5LDc2LDEyMDEzMSw3NiwxMjAxODMsNzYsMTIwMjM1LDc2LDEyMDI4Nyw3NiwxMjAzMzksNzYsMTIwMzkxLDc2LDEyMDQ0Myw3NiwxMTQ3Miw3Niw1MDg2LDc2LDUyOTAsNzYsNDIyMDksNzYsOTM5NzQsNzYsNzE4NDMsNzYsNzE4NTgsNzYsNjY1ODcsNzYsNjY4NTQsNzYsNjUzMjUsNzcsODU1OSw3Nyw4NDk5LDc3LDExOTgyMCw3NywxMTk4NzIsNzcsMTE5OTI0LDc3LDEyMDAyOCw3NywxMjAwODAsNzcsMTIwMTMyLDc3LDEyMDE4NCw3NywxMjAyMzYsNzcsMTIwMjg4LDc3LDEyMDM0MCw3NywxMjAzOTIsNzcsMTIwNDQ0LDc3LDkyNCw3NywxMjA0OTksNzcsMTIwNTU3LDc3LDEyMDYxNSw3NywxMjA2NzMsNzcsMTIwNzMxLDc3LDEwMTgsNzcsMTE0MTYsNzcsNTA0Nyw3Nyw1NjE2LDc3LDU4NDYsNzcsNDIyMDcsNzcsNjYyMjQsNzcsNjYzMjEsNzcsMTE5ODQ3LDExMCwxMTk4OTksMTEwLDExOTk1MSwxMTAsMTIwMDAzLDExMCwxMjAwNTUsMTEwLDEyMDEwNywxMTAsMTIwMTU5LDExMCwxMjAyMTEsMTEwLDEyMDI2MywxMTAsMTIwMzE1LDExMCwxMjAzNjcsMTEwLDEyMDQxOSwxMTAsMTIwNDcxLDExMCwxNDAwLDExMCwxNDA0LDExMCw2NTMyNiw3OCw4NDY5LDc4LDExOTgyMSw3OCwxMTk4NzMsNzgsMTE5OTI1LDc4LDExOTk3Nyw3OCwxMjAwMjksNzgsMTIwMDgxLDc4LDEyMDE4NSw3OCwxMjAyMzcsNzgsMTIwMjg5LDc4LDEyMDM0MSw3OCwxMjAzOTMsNzgsMTIwNDQ1LDc4LDkyNSw3OCwxMjA1MDAsNzgsMTIwNTU4LDc4LDEyMDYxNiw3OCwxMjA2NzQsNzgsMTIwNzMyLDc4LDExNDE4LDc4LDQyMjA4LDc4LDY2ODM1LDc4LDMwNzQsMTExLDMyMDIsMTExLDMzMzAsMTExLDM0NTgsMTExLDI0MDYsMTExLDI2NjIsMTExLDI3OTAsMTExLDMwNDYsMTExLDMxNzQsMTExLDMzMDIsMTExLDM0MzAsMTExLDM2NjQsMTExLDM3OTIsMTExLDQxNjAsMTExLDE2MzcsMTExLDE3ODEsMTExLDY1MzU5LDExMSw4NTAwLDExMSwxMTk4NDgsMTExLDExOTkwMCwxMTEsMTE5OTUyLDExMSwxMjAwNTYsMTExLDEyMDEwOCwxMTEsMTIwMTYwLDExMSwxMjAyMTIsMTExLDEyMDI2NCwxMTEsMTIwMzE2LDExMSwxMjAzNjgsMTExLDEyMDQyMCwxMTEsMTIwNDcyLDExMSw3NDM5LDExMSw3NDQxLDExMSw0MzgzNywxMTEsOTU5LDExMSwxMjA1MjgsMTExLDEyMDU4NiwxMTEsMTIwNjQ0LDExMSwxMjA3MDIsMTExLDEyMDc2MCwxMTEsOTYzLDExMSwxMjA1MzIsMTExLDEyMDU5MCwxMTEsMTIwNjQ4LDExMSwxMjA3MDYsMTExLDEyMDc2NCwxMTEsMTE0MjMsMTExLDQzNTEsMTExLDE0MTMsMTExLDE1MDUsMTExLDE2MDcsMTExLDEyNjUwMCwxMTEsMTI2NTY0LDExMSwxMjY1OTYsMTExLDY1MjU5LDExMSw2NTI2MCwxMTEsNjUyNTgsMTExLDY1MjU3LDExMSwxNzI2LDExMSw2NDQyOCwxMTEsNjQ0MjksMTExLDY0NDI3LDExMSw2NDQyNiwxMTEsMTcyOSwxMTEsNjQ0MjQsMTExLDY0NDI1LDExMSw2NDQyMywxMTEsNjQ0MjIsMTExLDE3NDksMTExLDMzNjAsMTExLDQxMjUsMTExLDY2Nzk0LDExMSw3MTg4MCwxMTEsNzE4OTUsMTExLDY2NjA0LDExMSwxOTg0LDc5LDI1MzQsNzksMjkxOCw3OSwxMjI5NSw3OSw3MDg2NCw3OSw3MTkwNCw3OSwxMjA3ODIsNzksMTIwNzkyLDc5LDEyMDgwMiw3OSwxMjA4MTIsNzksMTIwODIyLDc5LDEzMDAzMiw3OSw2NTMyNyw3OSwxMTk4MjIsNzksMTE5ODc0LDc5LDExOTkyNiw3OSwxMTk5NzgsNzksMTIwMDMwLDc5LDEyMDA4Miw3OSwxMjAxMzQsNzksMTIwMTg2LDc5LDEyMDIzOCw3OSwxMjAyOTAsNzksMTIwMzQyLDc5LDEyMDM5NCw3OSwxMjA0NDYsNzksOTI3LDc5LDEyMDUwMiw3OSwxMjA1NjAsNzksMTIwNjE4LDc5LDEyMDY3Niw3OSwxMjA3MzQsNzksMTE0MjIsNzksMTM2NSw3OSwxMTYwNCw3OSw0ODE2LDc5LDI4NDgsNzksNjY3NTQsNzksNDIyMjcsNzksNzE4NjEsNzksNjYxOTQsNzksNjYyMTksNzksNjY1NjQsNzksNjY4MzgsNzksOTA3NiwxMTIsNjUzNjAsMTEyLDExOTg0OSwxMTIsMTE5OTAxLDExMiwxMTk5NTMsMTEyLDEyMDAwNSwxMTIsMTIwMDU3LDExMiwxMjAxMDksMTEyLDEyMDE2MSwxMTIsMTIwMjEzLDExMiwxMjAyNjUsMTEyLDEyMDMxNywxMTIsMTIwMzY5LDExMiwxMjA0MjEsMTEyLDEyMDQ3MywxMTIsOTYxLDExMiwxMjA1MzAsMTEyLDEyMDU0NCwxMTIsMTIwNTg4LDExMiwxMjA2MDIsMTEyLDEyMDY0NiwxMTIsMTIwNjYwLDExMiwxMjA3MDQsMTEyLDEyMDcxOCwxMTIsMTIwNzYyLDExMiwxMjA3NzYsMTEyLDExNDI3LDExMiw2NTMyOCw4MCw4NDczLDgwLDExOTgyMyw4MCwxMTk4NzUsODAsMTE5OTI3LDgwLDExOTk3OSw4MCwxMjAwMzEsODAsMTIwMDgzLDgwLDEyMDE4Nyw4MCwxMjAyMzksODAsMTIwMjkxLDgwLDEyMDM0Myw4MCwxMjAzOTUsODAsMTIwNDQ3LDgwLDkyOSw4MCwxMjA1MDQsODAsMTIwNTYyLDgwLDEyMDYyMCw4MCwxMjA2NzgsODAsMTIwNzM2LDgwLDExNDI2LDgwLDUwOTAsODAsNTIyOSw4MCw0MjE5Myw4MCw2NjE5Nyw4MCwxMTk4NTAsMTEzLDExOTkwMiwxMTMsMTE5OTU0LDExMywxMjAwMDYsMTEzLDEyMDA1OCwxMTMsMTIwMTEwLDExMywxMjAxNjIsMTEzLDEyMDIxNCwxMTMsMTIwMjY2LDExMywxMjAzMTgsMTEzLDEyMDM3MCwxMTMsMTIwNDIyLDExMywxMjA0NzQsMTEzLDEzMDcsMTEzLDEzNzksMTEzLDEzODIsMTEzLDg0NzQsODEsMTE5ODI0LDgxLDExOTg3Niw4MSwxMTk5MjgsODEsMTE5OTgwLDgxLDEyMDAzMiw4MSwxMjAwODQsODEsMTIwMTg4LDgxLDEyMDI0MCw4MSwxMjAyOTIsODEsMTIwMzQ0LDgxLDEyMDM5Niw4MSwxMjA0NDgsODEsMTE2MDUsODEsMTE5ODUxLDExNCwxMTk5MDMsMTE0LDExOTk1NSwxMTQsMTIwMDA3LDExNCwxMjAwNTksMTE0LDEyMDExMSwxMTQsMTIwMTYzLDExNCwxMjAyMTUsMTE0LDEyMDI2NywxMTQsMTIwMzE5LDExNCwxMjAzNzEsMTE0LDEyMDQyMywxMTQsMTIwNDc1LDExNCw0Mzg0NywxMTQsNDM4NDgsMTE0LDc0NjIsMTE0LDExMzk3LDExNCw0MzkwNSwxMTQsMTE5MzE4LDgyLDg0NzUsODIsODQ3Niw4Miw4NDc3LDgyLDExOTgyNSw4MiwxMTk4NzcsODIsMTE5OTI5LDgyLDEyMDAzMyw4MiwxMjAxODksODIsMTIwMjQxLDgyLDEyMDI5Myw4MiwxMjAzNDUsODIsMTIwMzk3LDgyLDEyMDQ0OSw4Miw0MjIsODIsNTAyNSw4Miw1MDc0LDgyLDY2NzQwLDgyLDU1MTEsODIsNDIyMTEsODIsOTQwMDUsODIsNjUzNjMsMTE1LDExOTg1MiwxMTUsMTE5OTA0LDExNSwxMTk5NTYsMTE1LDEyMDAwOCwxMTUsMTIwMDYwLDExNSwxMjAxMTIsMTE1LDEyMDE2NCwxMTUsMTIwMjE2LDExNSwxMjAyNjgsMTE1LDEyMDMyMCwxMTUsMTIwMzcyLDExNSwxMjA0MjQsMTE1LDEyMDQ3NiwxMTUsNDI4MDEsMTE1LDQ0NSwxMTUsMTEwOSwxMTUsNDM5NDYsMTE1LDcxODczLDExNSw2NjYzMiwxMTUsNjUzMzEsODMsMTE5ODI2LDgzLDExOTg3OCw4MywxMTk5MzAsODMsMTE5OTgyLDgzLDEyMDAzNCw4MywxMjAwODYsODMsMTIwMTM4LDgzLDEyMDE5MCw4MywxMjAyNDIsODMsMTIwMjk0LDgzLDEyMDM0Niw4MywxMjAzOTgsODMsMTIwNDUwLDgzLDEwMjksODMsMTM1OSw4Myw1MDc3LDgzLDUwODIsODMsNDIyMTAsODMsOTQwMTAsODMsNjYxOTgsODMsNjY1OTIsODMsMTE5ODUzLDExNiwxMTk5MDUsMTE2LDExOTk1NywxMTYsMTIwMDA5LDExNiwxMjAwNjEsMTE2LDEyMDExMywxMTYsMTIwMTY1LDExNiwxMjAyMTcsMTE2LDEyMDI2OSwxMTYsMTIwMzIxLDExNiwxMjAzNzMsMTE2LDEyMDQyNSwxMTYsMTIwNDc3LDExNiw4ODY4LDg0LDEwMjAxLDg0LDEyODg3Miw4NCw2NTMzMiw4NCwxMTk4MjcsODQsMTE5ODc5LDg0LDExOTkzMSw4NCwxMTk5ODMsODQsMTIwMDM1LDg0LDEyMDA4Nyw4NCwxMjAxMzksODQsMTIwMTkxLDg0LDEyMDI0Myw4NCwxMjAyOTUsODQsMTIwMzQ3LDg0LDEyMDM5OSw4NCwxMjA0NTEsODQsOTMyLDg0LDEyMDUwNyw4NCwxMjA1NjUsODQsMTIwNjIzLDg0LDEyMDY4MSw4NCwxMjA3MzksODQsMTE0MzAsODQsNTAyNiw4NCw0MjE5Niw4NCw5Mzk2Miw4NCw3MTg2OCw4NCw2NjE5OSw4NCw2NjIyNSw4NCw2NjMyNSw4NCwxMTk4NTQsMTE3LDExOTkwNiwxMTcsMTE5OTU4LDExNywxMjAwMTAsMTE3LDEyMDA2MiwxMTcsMTIwMTE0LDExNywxMjAxNjYsMTE3LDEyMDIxOCwxMTcsMTIwMjcwLDExNywxMjAzMjIsMTE3LDEyMDM3NCwxMTcsMTIwNDI2LDExNywxMjA0NzgsMTE3LDQyOTExLDExNyw3NDUyLDExNyw0Mzg1NCwxMTcsNDM4NTgsMTE3LDY1MSwxMTcsOTY1LDExNywxMjA1MzQsMTE3LDEyMDU5MiwxMTcsMTIwNjUwLDExNywxMjA3MDgsMTE3LDEyMDc2NiwxMTcsMTQwNSwxMTcsNjY4MDYsMTE3LDcxODk2LDExNyw4NzQ2LDg1LDg4OTksODUsMTE5ODI4LDg1LDExOTg4MCw4NSwxMTk5MzIsODUsMTE5OTg0LDg1LDEyMDAzNiw4NSwxMjAwODgsODUsMTIwMTQwLDg1LDEyMDE5Miw4NSwxMjAyNDQsODUsMTIwMjk2LDg1LDEyMDM0OCw4NSwxMjA0MDAsODUsMTIwNDUyLDg1LDEzNTcsODUsNDYwOCw4NSw2Njc2Niw4NSw1MTk2LDg1LDQyMjI4LDg1LDk0MDE4LDg1LDcxODY0LDg1LDg3NDQsMTE4LDg4OTcsMTE4LDY1MzY2LDExOCw4NTY0LDExOCwxMTk4NTUsMTE4LDExOTkwNywxMTgsMTE5OTU5LDExOCwxMjAwMTEsMTE4LDEyMDA2MywxMTgsMTIwMTE1LDExOCwxMjAxNjcsMTE4LDEyMDIxOSwxMTgsMTIwMjcxLDExOCwxMjAzMjMsMTE4LDEyMDM3NSwxMTgsMTIwNDI3LDExOCwxMjA0NzksMTE4LDc0NTYsMTE4LDk1NywxMTgsMTIwNTI2LDExOCwxMjA1ODQsMTE4LDEyMDY0MiwxMTgsMTIwNzAwLDExOCwxMjA3NTgsMTE4LDExNDEsMTE4LDE0OTYsMTE4LDcxNDMwLDExOCw0Mzk0NSwxMTgsNzE4NzIsMTE4LDExOTMwOSw4NiwxNjM5LDg2LDE3ODMsODYsODU0OCw4NiwxMTk4MjksODYsMTE5ODgxLDg2LDExOTkzMyw4NiwxMTk5ODUsODYsMTIwMDM3LDg2LDEyMDA4OSw4NiwxMjAxNDEsODYsMTIwMTkzLDg2LDEyMDI0NSw4NiwxMjAyOTcsODYsMTIwMzQ5LDg2LDEyMDQwMSw4NiwxMjA0NTMsODYsMTE0MCw4NiwxMTU3Niw4Niw1MDgxLDg2LDUxNjcsODYsNDI3MTksODYsNDIyMTQsODYsOTM5NjAsODYsNzE4NDAsODYsNjY4NDUsODYsNjIzLDExOSwxMTk4NTYsMTE5LDExOTkwOCwxMTksMTE5OTYwLDExOSwxMjAwMTIsMTE5LDEyMDA2NCwxMTksMTIwMTE2LDExOSwxMjAxNjgsMTE5LDEyMDIyMCwxMTksMTIwMjcyLDExOSwxMjAzMjQsMTE5LDEyMDM3NiwxMTksMTIwNDI4LDExOSwxMjA0ODAsMTE5LDc0NTcsMTE5LDExMjEsMTE5LDEzMDksMTE5LDEzNzcsMTE5LDcxNDM0LDExOSw3MTQzOCwxMTksNzE0MzksMTE5LDQzOTA3LDExOSw3MTkxOSw4Nyw3MTkxMCw4NywxMTk4MzAsODcsMTE5ODgyLDg3LDExOTkzNCw4NywxMTk5ODYsODcsMTIwMDM4LDg3LDEyMDA5MCw4NywxMjAxNDIsODcsMTIwMTk0LDg3LDEyMDI0Niw4NywxMjAyOTgsODcsMTIwMzUwLDg3LDEyMDQwMiw4NywxMjA0NTQsODcsMTMwOCw4Nyw1MDQzLDg3LDUwNzYsODcsNDIyMTgsODcsNTc0MiwxMjAsMTA1MzksMTIwLDEwNTQwLDEyMCwxMDc5OSwxMjAsNjUzNjgsMTIwLDg1NjksMTIwLDExOTg1NywxMjAsMTE5OTA5LDEyMCwxMTk5NjEsMTIwLDEyMDAxMywxMjAsMTIwMDY1LDEyMCwxMjAxMTcsMTIwLDEyMDE2OSwxMjAsMTIwMjIxLDEyMCwxMjAyNzMsMTIwLDEyMDMyNSwxMjAsMTIwMzc3LDEyMCwxMjA0MjksMTIwLDEyMDQ4MSwxMjAsNTQ0MSwxMjAsNTUwMSwxMjAsNTc0MSw4OCw5NTg3LDg4LDY2MzM4LDg4LDcxOTE2LDg4LDY1MzM2LDg4LDg1NTMsODgsMTE5ODMxLDg4LDExOTg4Myw4OCwxMTk5MzUsODgsMTE5OTg3LDg4LDEyMDAzOSw4OCwxMjAwOTEsODgsMTIwMTQzLDg4LDEyMDE5NSw4OCwxMjAyNDcsODgsMTIwMjk5LDg4LDEyMDM1MSw4OCwxMjA0MDMsODgsMTIwNDU1LDg4LDQyOTMxLDg4LDkzNSw4OCwxMjA1MTAsODgsMTIwNTY4LDg4LDEyMDYyNiw4OCwxMjA2ODQsODgsMTIwNzQyLDg4LDExNDM2LDg4LDExNjEzLDg4LDU4MTUsODgsNDIyMTksODgsNjYxOTIsODgsNjYyMjgsODgsNjYzMjcsODgsNjY4NTUsODgsNjExLDEyMSw3NTY0LDEyMSw2NTM2OSwxMjEsMTE5ODU4LDEyMSwxMTk5MTAsMTIxLDExOTk2MiwxMjEsMTIwMDE0LDEyMSwxMjAwNjYsMTIxLDEyMDExOCwxMjEsMTIwMTcwLDEyMSwxMjAyMjIsMTIxLDEyMDI3NCwxMjEsMTIwMzI2LDEyMSwxMjAzNzgsMTIxLDEyMDQzMCwxMjEsMTIwNDgyLDEyMSw2NTUsMTIxLDc5MzUsMTIxLDQzODY2LDEyMSw5NDcsMTIxLDg1MDksMTIxLDEyMDUxNiwxMjEsMTIwNTc0LDEyMSwxMjA2MzIsMTIxLDEyMDY5MCwxMjEsMTIwNzQ4LDEyMSwxMTk5LDEyMSw0MzI3LDEyMSw3MTkwMCwxMjEsNjUzMzcsODksMTE5ODMyLDg5LDExOTg4NCw4OSwxMTk5MzYsODksMTE5OTg4LDg5LDEyMDA0MCw4OSwxMjAwOTIsODksMTIwMTQ0LDg5LDEyMDE5Niw4OSwxMjAyNDgsODksMTIwMzAwLDg5LDEyMDM1Miw4OSwxMjA0MDQsODksMTIwNDU2LDg5LDkzMyw4OSw5NzgsODksMTIwNTA4LDg5LDEyMDU2Niw4OSwxMjA2MjQsODksMTIwNjgyLDg5LDEyMDc0MCw4OSwxMTQzMiw4OSwxMTk4LDg5LDUwMzMsODksNTA1Myw4OSw0MjIyMCw4OSw5NDAxOSw4OSw3MTg0NCw4OSw2NjIyNiw4OSwxMTk4NTksMTIyLDExOTkxMSwxMjIsMTE5OTYzLDEyMiwxMjAwMTUsMTIyLDEyMDA2NywxMjIsMTIwMTE5LDEyMiwxMjAxNzEsMTIyLDEyMDIyMywxMjIsMTIwMjc1LDEyMiwxMjAzMjcsMTIyLDEyMDM3OSwxMjIsMTIwNDMxLDEyMiwxMjA0ODMsMTIyLDc0NTgsMTIyLDQzOTIzLDEyMiw3MTg3NiwxMjIsNjYyOTMsOTAsNzE5MDksOTAsNjUzMzgsOTAsODQ4NCw5MCw4NDg4LDkwLDExOTgzMyw5MCwxMTk4ODUsOTAsMTE5OTM3LDkwLDExOTk4OSw5MCwxMjAwNDEsOTAsMTIwMTk3LDkwLDEyMDI0OSw5MCwxMjAzMDEsOTAsMTIwMzUzLDkwLDEyMDQwNSw5MCwxMjA0NTcsOTAsOTE4LDkwLDEyMDQ5Myw5MCwxMjA1NTEsOTAsMTIwNjA5LDkwLDEyMDY2Nyw5MCwxMjA3MjUsOTAsNTA1OSw5MCw0MjIwNCw5MCw3MTg0OSw5MCw2NTI4MiwzNCw2NTI4NCwzNiw2NTI4NSwzNyw2NTI4NiwzOCw2NTI5MCw0Miw2NTI5MSw0Myw2NTI5NCw0Niw2NTI5NSw0Nyw2NTI5Niw0OCw2NTI5Nyw0OSw2NTI5OCw1MCw2NTI5OSw1MSw2NTMwMCw1Miw2NTMwMSw1Myw2NTMwMiw1NCw2NTMwMyw1NSw2NTMwNCw1Niw2NTMwNSw1Nyw2NTMwOCw2MCw2NTMwOSw2MSw2NTMxMCw2Miw2NTMxMiw2NCw2NTMxNiw2OCw2NTMxOCw3MCw2NTMxOSw3MSw2NTMyNCw3Niw2NTMyOSw4MSw2NTMzMCw4Miw2NTMzMyw4NSw2NTMzNCw4Niw2NTMzNSw4Nyw2NTM0Myw5NSw2NTM0Niw5OCw2NTM0OCwxMDAsNjUzNTAsMTAyLDY1MzU1LDEwNyw2NTM1NywxMDksNjUzNTgsMTEwLDY1MzYxLDExMyw2NTM2MiwxMTQsNjUzNjQsMTE2LDY1MzY1LDExNyw2NTM2NywxMTksNjUzNzAsMTIyLDY1MzcxLDEyMyw2NTM3MywxMjUsMTE5ODQ2LDEwOV0sIl9kZWZhdWx0IjpbMTYwLDMyLDgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImNzIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyMTYsOTYsODIxNyw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJkZSI6WzY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTI0OTQsNDcsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZXMiOls4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSwxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiZnIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwiaXQiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTI4OCw0MCw2NTI4OSw0MSw2NTI5Miw0NCw2NTMwNyw1OSw2NTMxMSw2M10sImphIjpbODIxMSw0NSw2NTMwNiw1OCw2NTI4MSwzMyw4MjE2LDk2LDgyMTcsOTYsODI0NSw5NiwxODAsOTYsMTA0Nyw1MSwxMDczLDU0LDEwNzIsOTcsMTA0MCw2NSwxMDY4LDk4LDEwNDIsNjYsMTA4OSw5OSwxMDU3LDY3LDEwNzcsMTAxLDEwNDUsNjksMTA1Myw3MiwzMDUsMTA1LDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyOTIsNDQsNjUzMDcsNTldLCJrbyI6WzgyMTEsNDUsNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicGwiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicHQtQlIiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicXBzLXBsb2MiOlsxNjAsMzIsODIxMSw0NSw2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1MjgzLDM1LDY1Mjg4LDQwLDY1Mjg5LDQxLDY1MjkyLDQ0LDY1MzA3LDU5LDY1MzExLDYzXSwicnUiOls2NTM3NCwxMjYsNjUzMDYsNTgsNjUyODEsMzMsODIxNiw5Niw4MjE3LDk2LDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDMwNSwxMDUsOTIxLDczLDEwMDksMTEyLDIxNSwxMjAsNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ0ciI6WzE2MCwzMiw4MjExLDQ1LDY1Mzc0LDEyNiw2NTMwNiw1OCw2NTI4MSwzMyw4MjQ1LDk2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDEwNTAsNzUsOTIxLDczLDEwNTIsNzcsMTA4NiwxMTEsMTA1NCw3OSwxMDA5LDExMiwxMDg4LDExMiwxMDU2LDgwLDEwNzUsMTE0LDEwNTgsODQsMjE1LDEyMCwxMDkzLDEyMCwxMDYxLDg4LDEwOTEsMTIxLDEwNTksODksNjUyODMsMzUsNjUyODgsNDAsNjUyODksNDEsNjUyOTIsNDQsNjUzMDcsNTksNjUzMTEsNjNdLCJ6aC1oYW5zIjpbNjUzNzQsMTI2LDY1MzA2LDU4LDY1MjgxLDMzLDgyNDUsOTYsMTgwLDk2LDEyNDk0LDQ3LDEwNDcsNTEsMTA3Myw1NCwxMDcyLDk3LDEwNDAsNjUsMTA2OCw5OCwxMDQyLDY2LDEwODksOTksMTA1Nyw2NywxMDc3LDEwMSwxMDQ1LDY5LDEwNTMsNzIsMzA1LDEwNSwxMDUwLDc1LDkyMSw3MywxMDUyLDc3LDEwODYsMTExLDEwNTQsNzksMTAwOSwxMTIsMTA4OCwxMTIsMTA1Niw4MCwxMDc1LDExNCwxMDU4LDg0LDIxNSwxMjAsMTA5MywxMjAsMTA2MSw4OCwxMDkxLDEyMSwxMDU5LDg5LDY1Mjg4LDQwLDY1Mjg5LDQxXSwiemgtaGFudCI6WzgyMTEsNDUsNjUzNzQsMTI2LDE4MCw5NiwxMjQ5NCw0NywxMDQ3LDUxLDEwNzMsNTQsMTA3Miw5NywxMDQwLDY1LDEwNjgsOTgsMTA0Miw2NiwxMDg5LDk5LDEwNTcsNjcsMTA3NywxMDEsMTA0NSw2OSwxMDUzLDcyLDMwNSwxMDUsMTA1MCw3NSw5MjEsNzMsMTA1Miw3NywxMDg2LDExMSwxMDU0LDc5LDEwMDksMTEyLDEwODgsMTEyLDEwNTYsODAsMTA3NSwxMTQsMTA1OCw4NCwyMTUsMTIwLDEwOTMsMTIwLDEwNjEsODgsMTA5MSwxMjEsMTA1OSw4OSw2NTI4MywzNSw2NTMwNyw1OV19JykpLGdlLmNhY2hlPW5ldyBwaSh7Z2V0Q2FjaGVLZXk6SlNPTi5zdHJpbmdpZnl9LHQ9PntmdW5jdGlvbiBuKGYpe2NvbnN0IGg9bmV3IE1hcDtmb3IobGV0IGQ9MDtkPGYubGVuZ3RoO2QrPTIpaC5zZXQoZltkXSxmW2QrMV0pO3JldHVybiBofWZ1bmN0aW9uIHMoZixoKXtjb25zdCBkPW5ldyBNYXAoZik7Zm9yKGNvbnN0W20sZ11vZiBoKWQuc2V0KG0sZyk7cmV0dXJuIGR9ZnVuY3Rpb24gcihmLGgpe2lmKCFmKXJldHVybiBoO2NvbnN0IGQ9bmV3IE1hcDtmb3IoY29uc3RbbSxnXW9mIGYpaC5oYXMobSkmJmQuc2V0KG0sZyk7cmV0dXJuIGR9Y29uc3QgaT1nZS5hbWJpZ3VvdXNDaGFyYWN0ZXJEYXRhLnZhbHVlO2xldCBvPXQuZmlsdGVyKGY9PiFmLnN0YXJ0c1dpdGgoIl8iKSYmZiBpbiBpKTtvLmxlbmd0aD09PTAmJihvPVsiX2RlZmF1bHQiXSk7bGV0IGw7Zm9yKGNvbnN0IGYgb2Ygbyl7Y29uc3QgaD1uKGlbZl0pO2w9cihsLGgpfWNvbnN0IHU9bihpLl9jb21tb24pLGM9cyh1LGwpO3JldHVybiBuZXcgZ2UoYyl9KSxnZS5fbG9jYWxlcz1uZXcgcW4oKCk9Pk9iamVjdC5rZXlzKGdlLmFtYmlndW91c0NoYXJhY3RlckRhdGEudmFsdWUpLmZpbHRlcih0PT4hdC5zdGFydHNXaXRoKCJfIikpKTtsZXQgS2U9Z2U7Y29uc3QgamU9Y2xhc3MgamV7c3RhdGljIGdldFJhd0RhdGEoKXtyZXR1cm4gSlNPTi5wYXJzZSgiWzksMTAsMTEsMTIsMTMsMzIsMTI3LDE2MCwxNzMsODQ3LDE1NjQsNDQ0Nyw0NDQ4LDYwNjgsNjA2OSw2MTU1LDYxNTYsNjE1Nyw2MTU4LDczNTUsNzM1Niw4MTkyLDgxOTMsODE5NCw4MTk1LDgxOTYsODE5Nyw4MTk4LDgxOTksODIwMCw4MjAxLDgyMDIsODIwMyw4MjA0LDgyMDUsODIwNiw4MjA3LDgyMzQsODIzNSw4MjM2LDgyMzcsODIzOCw4MjM5LDgyODcsODI4OCw4Mjg5LDgyOTAsODI5MSw4MjkyLDgyOTMsODI5NCw4Mjk1LDgyOTYsODI5Nyw4Mjk4LDgyOTksODMwMCw4MzAxLDgzMDIsODMwMywxMDI0MCwxMjI4OCwxMjY0NCw2NTAyNCw2NTAyNSw2NTAyNiw2NTAyNyw2NTAyOCw2NTAyOSw2NTAzMCw2NTAzMSw2NTAzMiw2NTAzMyw2NTAzNCw2NTAzNSw2NTAzNiw2NTAzNyw2NTAzOCw2NTAzOSw2NTI3OSw2NTQ0MCw2NTUyMCw2NTUyMSw2NTUyMiw2NTUyMyw2NTUyNCw2NTUyNSw2NTUyNiw2NTUyNyw2NTUyOCw2NTUzMiw3ODg0NCwxMTkxNTUsMTE5MTU2LDExOTE1NywxMTkxNTgsMTE5MTU5LDExOTE2MCwxMTkxNjEsMTE5MTYyLDkxNzUwNCw5MTc1MDUsOTE3NTA2LDkxNzUwNyw5MTc1MDgsOTE3NTA5LDkxNzUxMCw5MTc1MTEsOTE3NTEyLDkxNzUxMyw5MTc1MTQsOTE3NTE1LDkxNzUxNiw5MTc1MTcsOTE3NTE4LDkxNzUxOSw5MTc1MjAsOTE3NTIxLDkxNzUyMiw5MTc1MjMsOTE3NTI0LDkxNzUyNSw5MTc1MjYsOTE3NTI3LDkxNzUyOCw5MTc1MjksOTE3NTMwLDkxNzUzMSw5MTc1MzIsOTE3NTMzLDkxNzUzNCw5MTc1MzUsOTE3NTM2LDkxNzUzNyw5MTc1MzgsOTE3NTM5LDkxNzU0MCw5MTc1NDEsOTE3NTQyLDkxNzU0Myw5MTc1NDQsOTE3NTQ1LDkxNzU0Niw5MTc1NDcsOTE3NTQ4LDkxNzU0OSw5MTc1NTAsOTE3NTUxLDkxNzU1Miw5MTc1NTMsOTE3NTU0LDkxNzU1NSw5MTc1NTYsOTE3NTU3LDkxNzU1OCw5MTc1NTksOTE3NTYwLDkxNzU2MSw5MTc1NjIsOTE3NTYzLDkxNzU2NCw5MTc1NjUsOTE3NTY2LDkxNzU2Nyw5MTc1NjgsOTE3NTY5LDkxNzU3MCw5MTc1NzEsOTE3NTcyLDkxNzU3Myw5MTc1NzQsOTE3NTc1LDkxNzU3Niw5MTc1NzcsOTE3NTc4LDkxNzU3OSw5MTc1ODAsOTE3NTgxLDkxNzU4Miw5MTc1ODMsOTE3NTg0LDkxNzU4NSw5MTc1ODYsOTE3NTg3LDkxNzU4OCw5MTc1ODksOTE3NTkwLDkxNzU5MSw5MTc1OTIsOTE3NTkzLDkxNzU5NCw5MTc1OTUsOTE3NTk2LDkxNzU5Nyw5MTc1OTgsOTE3NTk5LDkxNzYwMCw5MTc2MDEsOTE3NjAyLDkxNzYwMyw5MTc2MDQsOTE3NjA1LDkxNzYwNiw5MTc2MDcsOTE3NjA4LDkxNzYwOSw5MTc2MTAsOTE3NjExLDkxNzYxMiw5MTc2MTMsOTE3NjE0LDkxNzYxNSw5MTc2MTYsOTE3NjE3LDkxNzYxOCw5MTc2MTksOTE3NjIwLDkxNzYyMSw5MTc2MjIsOTE3NjIzLDkxNzYyNCw5MTc2MjUsOTE3NjI2LDkxNzYyNyw5MTc2MjgsOTE3NjI5LDkxNzYzMCw5MTc2MzEsOTE3NzYwLDkxNzc2MSw5MTc3NjIsOTE3NzYzLDkxNzc2NCw5MTc3NjUsOTE3NzY2LDkxNzc2Nyw5MTc3NjgsOTE3NzY5LDkxNzc3MCw5MTc3NzEsOTE3NzcyLDkxNzc3Myw5MTc3NzQsOTE3Nzc1LDkxNzc3Niw5MTc3NzcsOTE3Nzc4LDkxNzc3OSw5MTc3ODAsOTE3NzgxLDkxNzc4Miw5MTc3ODMsOTE3Nzg0LDkxNzc4NSw5MTc3ODYsOTE3Nzg3LDkxNzc4OCw5MTc3ODksOTE3NzkwLDkxNzc5MSw5MTc3OTIsOTE3NzkzLDkxNzc5NCw5MTc3OTUsOTE3Nzk2LDkxNzc5Nyw5MTc3OTgsOTE3Nzk5LDkxNzgwMCw5MTc4MDEsOTE3ODAyLDkxNzgwMyw5MTc4MDQsOTE3ODA1LDkxNzgwNiw5MTc4MDcsOTE3ODA4LDkxNzgwOSw5MTc4MTAsOTE3ODExLDkxNzgxMiw5MTc4MTMsOTE3ODE0LDkxNzgxNSw5MTc4MTYsOTE3ODE3LDkxNzgxOCw5MTc4MTksOTE3ODIwLDkxNzgyMSw5MTc4MjIsOTE3ODIzLDkxNzgyNCw5MTc4MjUsOTE3ODI2LDkxNzgyNyw5MTc4MjgsOTE3ODI5LDkxNzgzMCw5MTc4MzEsOTE3ODMyLDkxNzgzMyw5MTc4MzQsOTE3ODM1LDkxNzgzNiw5MTc4MzcsOTE3ODM4LDkxNzgzOSw5MTc4NDAsOTE3ODQxLDkxNzg0Miw5MTc4NDMsOTE3ODQ0LDkxNzg0NSw5MTc4NDYsOTE3ODQ3LDkxNzg0OCw5MTc4NDksOTE3ODUwLDkxNzg1MSw5MTc4NTIsOTE3ODUzLDkxNzg1NCw5MTc4NTUsOTE3ODU2LDkxNzg1Nyw5MTc4NTgsOTE3ODU5LDkxNzg2MCw5MTc4NjEsOTE3ODYyLDkxNzg2Myw5MTc4NjQsOTE3ODY1LDkxNzg2Niw5MTc4NjcsOTE3ODY4LDkxNzg2OSw5MTc4NzAsOTE3ODcxLDkxNzg3Miw5MTc4NzMsOTE3ODc0LDkxNzg3NSw5MTc4NzYsOTE3ODc3LDkxNzg3OCw5MTc4NzksOTE3ODgwLDkxNzg4MSw5MTc4ODIsOTE3ODgzLDkxNzg4NCw5MTc4ODUsOTE3ODg2LDkxNzg4Nyw5MTc4ODgsOTE3ODg5LDkxNzg5MCw5MTc4OTEsOTE3ODkyLDkxNzg5Myw5MTc4OTQsOTE3ODk1LDkxNzg5Niw5MTc4OTcsOTE3ODk4LDkxNzg5OSw5MTc5MDAsOTE3OTAxLDkxNzkwMiw5MTc5MDMsOTE3OTA0LDkxNzkwNSw5MTc5MDYsOTE3OTA3LDkxNzkwOCw5MTc5MDksOTE3OTEwLDkxNzkxMSw5MTc5MTIsOTE3OTEzLDkxNzkxNCw5MTc5MTUsOTE3OTE2LDkxNzkxNyw5MTc5MTgsOTE3OTE5LDkxNzkyMCw5MTc5MjEsOTE3OTIyLDkxNzkyMyw5MTc5MjQsOTE3OTI1LDkxNzkyNiw5MTc5MjcsOTE3OTI4LDkxNzkyOSw5MTc5MzAsOTE3OTMxLDkxNzkzMiw5MTc5MzMsOTE3OTM0LDkxNzkzNSw5MTc5MzYsOTE3OTM3LDkxNzkzOCw5MTc5MzksOTE3OTQwLDkxNzk0MSw5MTc5NDIsOTE3OTQzLDkxNzk0NCw5MTc5NDUsOTE3OTQ2LDkxNzk0Nyw5MTc5NDgsOTE3OTQ5LDkxNzk1MCw5MTc5NTEsOTE3OTUyLDkxNzk1Myw5MTc5NTQsOTE3OTU1LDkxNzk1Niw5MTc5NTcsOTE3OTU4LDkxNzk1OSw5MTc5NjAsOTE3OTYxLDkxNzk2Miw5MTc5NjMsOTE3OTY0LDkxNzk2NSw5MTc5NjYsOTE3OTY3LDkxNzk2OCw5MTc5NjksOTE3OTcwLDkxNzk3MSw5MTc5NzIsOTE3OTczLDkxNzk3NCw5MTc5NzUsOTE3OTc2LDkxNzk3Nyw5MTc5NzgsOTE3OTc5LDkxNzk4MCw5MTc5ODEsOTE3OTgyLDkxNzk4Myw5MTc5ODQsOTE3OTg1LDkxNzk4Niw5MTc5ODcsOTE3OTg4LDkxNzk4OSw5MTc5OTAsOTE3OTkxLDkxNzk5Miw5MTc5OTMsOTE3OTk0LDkxNzk5NSw5MTc5OTYsOTE3OTk3LDkxNzk5OCw5MTc5OTldIil9c3RhdGljIGdldERhdGEoKXtyZXR1cm4gdGhpcy5fZGF0YXx8KHRoaXMuX2RhdGE9bmV3IFNldChqZS5nZXRSYXdEYXRhKCkpKSx0aGlzLl9kYXRhfXN0YXRpYyBpc0ludmlzaWJsZUNoYXJhY3Rlcih0KXtyZXR1cm4gamUuZ2V0RGF0YSgpLmhhcyh0KX1zdGF0aWMgZ2V0IGNvZGVQb2ludHMoKXtyZXR1cm4gamUuZ2V0RGF0YSgpfX07amUuX2RhdGE9dm9pZCAwO2xldCBldD1qZTt2YXIgJG49e0VOVl9UWVBFOiJsb2NhbCIsTk9ERV9FTlY6InByb2R1Y3Rpb24ifTtsZXQgRGU7Y29uc3QgZW49Z2xvYmFsVGhpcy52c2NvZGU7aWYodHlwZW9mIGVuPCJ1IiYmdHlwZW9mIGVuLnByb2Nlc3M8InUiKXtjb25zdCBlPWVuLnByb2Nlc3M7RGU9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBlLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBlLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gZS5lbnZ9LGN3ZCgpe3JldHVybiBlLmN3ZCgpfX19ZWxzZSB0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzPy52ZXJzaW9ucz8ubm9kZT09InN0cmluZyI/RGU9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBwcm9jZXNzLnBsYXRmb3JtfSxnZXQgYXJjaCgpe3JldHVybiBwcm9jZXNzLmFyY2h9LGdldCBlbnYoKXtyZXR1cm4gJG59LGN3ZCgpe3JldHVybiAkbi5WU0NPREVfQ1dEfHxwcm9jZXNzLmN3ZCgpfX06RGU9e2dldCBwbGF0Zm9ybSgpe3JldHVybiBaZT8id2luMzIiOmhpPyJkYXJ3aW4iOiJsaW51eCJ9LGdldCBhcmNoKCl7fSxnZXQgZW52KCl7cmV0dXJue319LGN3ZCgpe3JldHVybiIvIn19O2NvbnN0IHB0PURlLmN3ZCxBaT1EZS5lbnYsUmk9RGUucGxhdGZvcm0seWk9NjUsRWk9OTcsTWk9OTAsa2k9MTIyLHZlPTQ2LFk9NDcsbmU9OTIsTmU9NTgsUGk9NjM7Y2xhc3MgV24gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcih0LG4scyl7bGV0IHI7dHlwZW9mIG49PSJzdHJpbmciJiZuLmluZGV4T2YoIm5vdCAiKT09PTA/KHI9Im11c3Qgbm90IGJlIixuPW4ucmVwbGFjZSgvXm5vdCAvLCIiKSk6cj0ibXVzdCBiZSI7Y29uc3QgaT10LmluZGV4T2YoIi4iKSE9PS0xPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtsZXQgbz1gVGhlICIke3R9IiAke2l9ICR7cn0gb2YgdHlwZSAke259YDtvKz1gLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIHN9YCxzdXBlcihvKSx0aGlzLmNvZGU9IkVSUl9JTlZBTElEX0FSR19UWVBFIn19ZnVuY3Rpb24gRmkoZSx0KXtpZihlPT09bnVsbHx8dHlwZW9mIGUhPSJvYmplY3QiKXRocm93IG5ldyBXbih0LCJPYmplY3QiLGUpfWZ1bmN0aW9uIEcoZSx0KXtpZih0eXBlb2YgZSE9InN0cmluZyIpdGhyb3cgbmV3IFduKHQsInN0cmluZyIsZSl9Y29uc3QgcGU9Umk9PT0id2luMzIiO2Z1bmN0aW9uIFQoZSl7cmV0dXJuIGU9PT1ZfHxlPT09bmV9ZnVuY3Rpb24gdG4oZSl7cmV0dXJuIGU9PT1ZfWZ1bmN0aW9uIFNlKGUpe3JldHVybiBlPj15aSYmZTw9TWl8fGU+PUVpJiZlPD1raX1mdW5jdGlvbiB4dChlLHQsbixzKXtsZXQgcj0iIixpPTAsbz0tMSxsPTAsdT0wO2ZvcihsZXQgYz0wO2M8PWUubGVuZ3RoOysrYyl7aWYoYzxlLmxlbmd0aCl1PWUuY2hhckNvZGVBdChjKTtlbHNle2lmKHModSkpYnJlYWs7dT1ZfWlmKHModSkpe2lmKCEobz09PWMtMXx8bD09PTEpKWlmKGw9PT0yKXtpZihyLmxlbmd0aDwyfHxpIT09Mnx8ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpIT09dmV8fHIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSE9PXZlKXtpZihyLmxlbmd0aD4yKXtjb25zdCBmPXIubGFzdEluZGV4T2Yobik7Zj09PS0xPyhyPSIiLGk9MCk6KHI9ci5zbGljZSgwLGYpLGk9ci5sZW5ndGgtMS1yLmxhc3RJbmRleE9mKG4pKSxvPWMsbD0wO2NvbnRpbnVlfWVsc2UgaWYoci5sZW5ndGghPT0wKXtyPSIiLGk9MCxvPWMsbD0wO2NvbnRpbnVlfX10JiYocis9ci5sZW5ndGg+MD9gJHtufS4uYDoiLi4iLGk9Mil9ZWxzZSByLmxlbmd0aD4wP3IrPWAke259JHtlLnNsaWNlKG8rMSxjKX1gOnI9ZS5zbGljZShvKzEsYyksaT1jLW8tMTtvPWMsbD0wfWVsc2UgdT09PXZlJiZsIT09LTE/KytsOmw9LTF9cmV0dXJuIHJ9ZnVuY3Rpb24gRGkoZSl7cmV0dXJuIGU/YCR7ZVswXT09PSIuIj8iIjoiLiJ9JHtlfWA6IiJ9ZnVuY3Rpb24gem4oZSx0KXtGaSh0LCJwYXRoT2JqZWN0Iik7Y29uc3Qgbj10LmRpcnx8dC5yb290LHM9dC5iYXNlfHxgJHt0Lm5hbWV8fCIifSR7RGkodC5leHQpfWA7cmV0dXJuIG4/bj09PXQucm9vdD9gJHtufSR7c31gOmAke259JHtlfSR7c31gOnN9Y29uc3QgWj17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSIiLHM9ITE7Zm9yKGxldCByPWUubGVuZ3RoLTE7cj49LTE7ci0tKXtsZXQgaTtpZihyPj0wKXtpZihpPWVbcl0sRyhpLGBwYXRoc1ske3J9XWApLGkubGVuZ3RoPT09MCljb250aW51ZX1lbHNlIHQubGVuZ3RoPT09MD9pPXB0KCk6KGk9QWlbYD0ke3R9YF18fHB0KCksKGk9PT12b2lkIDB8fGkuc2xpY2UoMCwyKS50b0xvd2VyQ2FzZSgpIT09dC50b0xvd2VyQ2FzZSgpJiZpLmNoYXJDb2RlQXQoMik9PT1uZSkmJihpPWAke3R9XFxgKSk7Y29uc3Qgbz1pLmxlbmd0aDtsZXQgbD0wLHU9IiIsYz0hMTtjb25zdCBmPWkuY2hhckNvZGVBdCgwKTtpZihvPT09MSlUKGYpJiYobD0xLGM9ITApO2Vsc2UgaWYoVChmKSlpZihjPSEwLFQoaS5jaGFyQ29kZUF0KDEpKSl7bGV0IGg9MixkPWg7Zm9yKDtoPG8mJiFUKGkuY2hhckNvZGVBdChoKSk7KWgrKztpZihoPG8mJmghPT1kKXtjb25zdCBtPWkuc2xpY2UoZCxoKTtmb3IoZD1oO2g8byYmVChpLmNoYXJDb2RlQXQoaCkpOyloKys7aWYoaDxvJiZoIT09ZCl7Zm9yKGQ9aDtoPG8mJiFUKGkuY2hhckNvZGVBdChoKSk7KWgrKzsoaD09PW98fGghPT1kKSYmKHU9YFxcXFwke219XFwke2kuc2xpY2UoZCxoKX1gLGw9aCl9fX1lbHNlIGw9MTtlbHNlIFNlKGYpJiZpLmNoYXJDb2RlQXQoMSk9PT1OZSYmKHU9aS5zbGljZSgwLDIpLGw9MixvPjImJlQoaS5jaGFyQ29kZUF0KDIpKSYmKGM9ITAsbD0zKSk7aWYodS5sZW5ndGg+MClpZih0Lmxlbmd0aD4wKXtpZih1LnRvTG93ZXJDYXNlKCkhPT10LnRvTG93ZXJDYXNlKCkpY29udGludWV9ZWxzZSB0PXU7aWYocyl7aWYodC5sZW5ndGg+MClicmVha31lbHNlIGlmKG49YCR7aS5zbGljZShsKX1cXCR7bn1gLHM9YyxjJiZ0Lmxlbmd0aD4wKWJyZWFrfXJldHVybiBuPXh0KG4sIXMsIlxcIixUKSxzP2Ake3R9XFwke259YDpgJHt0fSR7bn1gfHwiLiJ9LG5vcm1hbGl6ZShlKXtHKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVybiIuIjtsZXQgbj0wLHMscj0hMTtjb25zdCBpPWUuY2hhckNvZGVBdCgwKTtpZih0PT09MSlyZXR1cm4gdG4oaSk/IlxcIjplO2lmKFQoaSkpaWYocj0hMCxUKGUuY2hhckNvZGVBdCgxKSkpe2xldCBsPTIsdT1sO2Zvcig7bDx0JiYhVChlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobDx0JiZsIT09dSl7Y29uc3QgYz1lLnNsaWNlKHUsbCk7Zm9yKHU9bDtsPHQmJlQoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PXUpe2Zvcih1PWw7bDx0JiYhVChlLmNoYXJDb2RlQXQobCkpOylsKys7aWYobD09PXQpcmV0dXJuYFxcXFwke2N9XFwke2Uuc2xpY2UodSl9XFxgO2whPT11JiYocz1gXFxcXCR7Y31cXCR7ZS5zbGljZSh1LGwpfWAsbj1sKX19fWVsc2Ugbj0xO2Vsc2UgU2UoaSkmJmUuY2hhckNvZGVBdCgxKT09PU5lJiYocz1lLnNsaWNlKDAsMiksbj0yLHQ+MiYmVChlLmNoYXJDb2RlQXQoMikpJiYocj0hMCxuPTMpKTtsZXQgbz1uPHQ/eHQoZS5zbGljZShuKSwhciwiXFwiLFQpOiIiO3JldHVybiBvLmxlbmd0aD09PTAmJiFyJiYobz0iLiIpLG8ubGVuZ3RoPjAmJlQoZS5jaGFyQ29kZUF0KHQtMSkpJiYobys9IlxcIikscz09PXZvaWQgMD9yP2BcXCR7b31gOm86cj9gJHtzfVxcJHtvfWA6YCR7c30ke299YH0saXNBYnNvbHV0ZShlKXtHKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVybiExO2NvbnN0IG49ZS5jaGFyQ29kZUF0KDApO3JldHVybiBUKG4pfHx0PjImJlNlKG4pJiZlLmNoYXJDb2RlQXQoMSk9PT1OZSYmVChlLmNoYXJDb2RlQXQoMikpfSxqb2luKC4uLmUpe2lmKGUubGVuZ3RoPT09MClyZXR1cm4iLiI7bGV0IHQsbjtmb3IobGV0IGk9MDtpPGUubGVuZ3RoOysraSl7Y29uc3Qgbz1lW2ldO0cobywicGF0aCIpLG8ubGVuZ3RoPjAmJih0PT09dm9pZCAwP3Q9bj1vOnQrPWBcXCR7b31gKX1pZih0PT09dm9pZCAwKXJldHVybiIuIjtsZXQgcz0hMCxyPTA7aWYodHlwZW9mIG49PSJzdHJpbmciJiZUKG4uY2hhckNvZGVBdCgwKSkpeysrcjtjb25zdCBpPW4ubGVuZ3RoO2k+MSYmVChuLmNoYXJDb2RlQXQoMSkpJiYoKytyLGk+MiYmKFQobi5jaGFyQ29kZUF0KDIpKT8rK3I6cz0hMSkpfWlmKHMpe2Zvcig7cjx0Lmxlbmd0aCYmVCh0LmNoYXJDb2RlQXQocikpOylyKys7cj49MiYmKHQ9YFxcJHt0LnNsaWNlKHIpfWApfXJldHVybiBaLm5vcm1hbGl6ZSh0KX0scmVsYXRpdmUoZSx0KXtpZihHKGUsImZyb20iKSxHKHQsInRvIiksZT09PXQpcmV0dXJuIiI7Y29uc3Qgbj1aLnJlc29sdmUoZSkscz1aLnJlc29sdmUodCk7aWYobj09PXN8fChlPW4udG9Mb3dlckNhc2UoKSx0PXMudG9Mb3dlckNhc2UoKSxlPT09dCkpcmV0dXJuIiI7bGV0IHI9MDtmb3IoO3I8ZS5sZW5ndGgmJmUuY2hhckNvZGVBdChyKT09PW5lOylyKys7bGV0IGk9ZS5sZW5ndGg7Zm9yKDtpLTE+ciYmZS5jaGFyQ29kZUF0KGktMSk9PT1uZTspaS0tO2NvbnN0IG89aS1yO2xldCBsPTA7Zm9yKDtsPHQubGVuZ3RoJiZ0LmNoYXJDb2RlQXQobCk9PT1uZTspbCsrO2xldCB1PXQubGVuZ3RoO2Zvcig7dS0xPmwmJnQuY2hhckNvZGVBdCh1LTEpPT09bmU7KXUtLTtjb25zdCBjPXUtbCxmPW88Yz9vOmM7bGV0IGg9LTEsZD0wO2Zvcig7ZDxmO2QrKyl7Y29uc3QgZz1lLmNoYXJDb2RlQXQocitkKTtpZihnIT09dC5jaGFyQ29kZUF0KGwrZCkpYnJlYWs7Zz09PW5lJiYoaD1kKX1pZihkIT09Zil7aWYoaD09PS0xKXJldHVybiBzfWVsc2V7aWYoYz5mKXtpZih0LmNoYXJDb2RlQXQobCtkKT09PW5lKXJldHVybiBzLnNsaWNlKGwrZCsxKTtpZihkPT09MilyZXR1cm4gcy5zbGljZShsK2QpfW8+ZiYmKGUuY2hhckNvZGVBdChyK2QpPT09bmU/aD1kOmQ9PT0yJiYoaD0zKSksaD09PS0xJiYoaD0wKX1sZXQgbT0iIjtmb3IoZD1yK2grMTtkPD1pOysrZCkoZD09PWl8fGUuY2hhckNvZGVBdChkKT09PW5lKSYmKG0rPW0ubGVuZ3RoPT09MD8iLi4iOiJcXC4uIik7cmV0dXJuIGwrPWgsbS5sZW5ndGg+MD9gJHttfSR7cy5zbGljZShsLHUpfWA6KHMuY2hhckNvZGVBdChsKT09PW5lJiYrK2wscy5zbGljZShsLHUpKX0sdG9OYW1lc3BhY2VkUGF0aChlKXtpZih0eXBlb2YgZSE9InN0cmluZyJ8fGUubGVuZ3RoPT09MClyZXR1cm4gZTtjb25zdCB0PVoucmVzb2x2ZShlKTtpZih0Lmxlbmd0aDw9MilyZXR1cm4gZTtpZih0LmNoYXJDb2RlQXQoMCk9PT1uZSl7aWYodC5jaGFyQ29kZUF0KDEpPT09bmUpe2NvbnN0IG49dC5jaGFyQ29kZUF0KDIpO2lmKG4hPT1QaSYmbiE9PXZlKXJldHVybmBcXFxcP1xcVU5DXFwke3Quc2xpY2UoMil9YH19ZWxzZSBpZihTZSh0LmNoYXJDb2RlQXQoMCkpJiZ0LmNoYXJDb2RlQXQoMSk9PT1OZSYmdC5jaGFyQ29kZUF0KDIpPT09bmUpcmV0dXJuYFxcXFw/XFwke3R9YDtyZXR1cm4gZX0sZGlybmFtZShlKXtHKGUsInBhdGgiKTtjb25zdCB0PWUubGVuZ3RoO2lmKHQ9PT0wKXJldHVybiIuIjtsZXQgbj0tMSxzPTA7Y29uc3Qgcj1lLmNoYXJDb2RlQXQoMCk7aWYodD09PTEpcmV0dXJuIFQocik/ZToiLiI7aWYoVChyKSl7aWYobj1zPTEsVChlLmNoYXJDb2RlQXQoMSkpKXtsZXQgbD0yLHU9bDtmb3IoO2w8dCYmIVQoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw8dCYmbCE9PXUpe2Zvcih1PWw7bDx0JiZUKGUuY2hhckNvZGVBdChsKSk7KWwrKztpZihsPHQmJmwhPT11KXtmb3IodT1sO2w8dCYmIVQoZS5jaGFyQ29kZUF0KGwpKTspbCsrO2lmKGw9PT10KXJldHVybiBlO2whPT11JiYobj1zPWwrMSl9fX19ZWxzZSBTZShyKSYmZS5jaGFyQ29kZUF0KDEpPT09TmUmJihuPXQ+MiYmVChlLmNoYXJDb2RlQXQoMikpPzM6MixzPW4pO2xldCBpPS0xLG89ITA7Zm9yKGxldCBsPXQtMTtsPj1zOy0tbClpZihUKGUuY2hhckNvZGVBdChsKSkpe2lmKCFvKXtpPWw7YnJlYWt9fWVsc2Ugbz0hMTtpZihpPT09LTEpe2lmKG49PT0tMSlyZXR1cm4iLiI7aT1ufXJldHVybiBlLnNsaWNlKDAsaSl9LGJhc2VuYW1lKGUsdCl7dCE9PXZvaWQgMCYmRyh0LCJzdWZmaXgiKSxHKGUsInBhdGgiKTtsZXQgbj0wLHM9LTEscj0hMCxpO2lmKGUubGVuZ3RoPj0yJiZTZShlLmNoYXJDb2RlQXQoMCkpJiZlLmNoYXJDb2RlQXQoMSk9PT1OZSYmKG49MiksdCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgbz10Lmxlbmd0aC0xLGw9LTE7Zm9yKGk9ZS5sZW5ndGgtMTtpPj1uOy0taSl7Y29uc3QgdT1lLmNoYXJDb2RlQXQoaSk7aWYoVCh1KSl7aWYoIXIpe249aSsxO2JyZWFrfX1lbHNlIGw9PT0tMSYmKHI9ITEsbD1pKzEpLG8+PTAmJih1PT09dC5jaGFyQ29kZUF0KG8pPy0tbz09PS0xJiYocz1pKToobz0tMSxzPWwpKX1yZXR1cm4gbj09PXM/cz1sOnM9PT0tMSYmKHM9ZS5sZW5ndGgpLGUuc2xpY2UobixzKX1mb3IoaT1lLmxlbmd0aC0xO2k+PW47LS1pKWlmKFQoZS5jaGFyQ29kZUF0KGkpKSl7aWYoIXIpe249aSsxO2JyZWFrfX1lbHNlIHM9PT0tMSYmKHI9ITEscz1pKzEpO3JldHVybiBzPT09LTE/IiI6ZS5zbGljZShuLHMpfSxleHRuYW1lKGUpe0coZSwicGF0aCIpO2xldCB0PTAsbj0tMSxzPTAscj0tMSxpPSEwLG89MDtlLmxlbmd0aD49MiYmZS5jaGFyQ29kZUF0KDEpPT09TmUmJlNlKGUuY2hhckNvZGVBdCgwKSkmJih0PXM9Mik7Zm9yKGxldCBsPWUubGVuZ3RoLTE7bD49dDstLWwpe2NvbnN0IHU9ZS5jaGFyQ29kZUF0KGwpO2lmKFQodSkpe2lmKCFpKXtzPWwrMTticmVha31jb250aW51ZX1yPT09LTEmJihpPSExLHI9bCsxKSx1PT09dmU/bj09PS0xP249bDpvIT09MSYmKG89MSk6biE9PS0xJiYobz0tMSl9cmV0dXJuIG49PT0tMXx8cj09PS0xfHxvPT09MHx8bz09PTEmJm49PT1yLTEmJm49PT1zKzE/IiI6ZS5zbGljZShuLHIpfSxmb3JtYXQ6em4uYmluZChudWxsLCJcXCIpLHBhcnNlKGUpe0coZSwicGF0aCIpO2NvbnN0IHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdDtjb25zdCBuPWUubGVuZ3RoO2xldCBzPTAscj1lLmNoYXJDb2RlQXQoMCk7aWYobj09PTEpcmV0dXJuIFQocik/KHQucm9vdD10LmRpcj1lLHQpOih0LmJhc2U9dC5uYW1lPWUsdCk7aWYoVChyKSl7aWYocz0xLFQoZS5jaGFyQ29kZUF0KDEpKSl7bGV0IGg9MixkPWg7Zm9yKDtoPG4mJiFUKGUuY2hhckNvZGVBdChoKSk7KWgrKztpZihoPG4mJmghPT1kKXtmb3IoZD1oO2g8biYmVChlLmNoYXJDb2RlQXQoaCkpOyloKys7aWYoaDxuJiZoIT09ZCl7Zm9yKGQ9aDtoPG4mJiFUKGUuY2hhckNvZGVBdChoKSk7KWgrKztoPT09bj9zPWg6aCE9PWQmJihzPWgrMSl9fX19ZWxzZSBpZihTZShyKSYmZS5jaGFyQ29kZUF0KDEpPT09TmUpe2lmKG48PTIpcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7aWYocz0yLFQoZS5jaGFyQ29kZUF0KDIpKSl7aWYobj09PTMpcmV0dXJuIHQucm9vdD10LmRpcj1lLHQ7cz0zfX1zPjAmJih0LnJvb3Q9ZS5zbGljZSgwLHMpKTtsZXQgaT0tMSxvPXMsbD0tMSx1PSEwLGM9ZS5sZW5ndGgtMSxmPTA7Zm9yKDtjPj1zOy0tYyl7aWYocj1lLmNoYXJDb2RlQXQoYyksVChyKSl7aWYoIXUpe289YysxO2JyZWFrfWNvbnRpbnVlfWw9PT0tMSYmKHU9ITEsbD1jKzEpLHI9PT12ZT9pPT09LTE/aT1jOmYhPT0xJiYoZj0xKTppIT09LTEmJihmPS0xKX1yZXR1cm4gbCE9PS0xJiYoaT09PS0xfHxmPT09MHx8Zj09PTEmJmk9PT1sLTEmJmk9PT1vKzE/dC5iYXNlPXQubmFtZT1lLnNsaWNlKG8sbCk6KHQubmFtZT1lLnNsaWNlKG8saSksdC5iYXNlPWUuc2xpY2UobyxsKSx0LmV4dD1lLnNsaWNlKGksbCkpKSxvPjAmJm8hPT1zP3QuZGlyPWUuc2xpY2UoMCxvLTEpOnQuZGlyPXQucm9vdCx0fSxzZXA6IlxcIixkZWxpbWl0ZXI6IjsiLHdpbjMyOm51bGwscG9zaXg6bnVsbH0sVGk9KCgpPT57aWYocGUpe2NvbnN0IGU9L1xcL2c7cmV0dXJuKCk9Pntjb25zdCB0PXB0KCkucmVwbGFjZShlLCIvIik7cmV0dXJuIHQuc2xpY2UodC5pbmRleE9mKCIvIikpfX1yZXR1cm4oKT0+cHQoKX0pKCksSz17cmVzb2x2ZSguLi5lKXtsZXQgdD0iIixuPSExO2ZvcihsZXQgcz1lLmxlbmd0aC0xO3M+PS0xJiYhbjtzLS0pe2NvbnN0IHI9cz49MD9lW3NdOlRpKCk7RyhyLGBwYXRoc1ske3N9XWApLHIubGVuZ3RoIT09MCYmKHQ9YCR7cn0vJHt0fWAsbj1yLmNoYXJDb2RlQXQoMCk9PT1ZKX1yZXR1cm4gdD14dCh0LCFuLCIvIix0biksbj9gLyR7dH1gOnQubGVuZ3RoPjA/dDoiLiJ9LG5vcm1hbGl6ZShlKXtpZihHKGUsInBhdGgiKSxlLmxlbmd0aD09PTApcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09WSxuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKT09PVk7cmV0dXJuIGU9eHQoZSwhdCwiLyIsdG4pLGUubGVuZ3RoPT09MD90PyIvIjpuPyIuLyI6Ii4iOihuJiYoZSs9Ii8iKSx0P2AvJHtlfWA6ZSl9LGlzQWJzb2x1dGUoZSl7cmV0dXJuIEcoZSwicGF0aCIpLGUubGVuZ3RoPjAmJmUuY2hhckNvZGVBdCgwKT09PVl9LGpvaW4oLi4uZSl7aWYoZS5sZW5ndGg9PT0wKXJldHVybiIuIjtsZXQgdDtmb3IobGV0IG49MDtuPGUubGVuZ3RoOysrbil7Y29uc3Qgcz1lW25dO0cocywicGF0aCIpLHMubGVuZ3RoPjAmJih0PT09dm9pZCAwP3Q9czp0Kz1gLyR7c31gKX1yZXR1cm4gdD09PXZvaWQgMD8iLiI6Sy5ub3JtYWxpemUodCl9LHJlbGF0aXZlKGUsdCl7aWYoRyhlLCJmcm9tIiksRyh0LCJ0byIpLGU9PT10fHwoZT1LLnJlc29sdmUoZSksdD1LLnJlc29sdmUodCksZT09PXQpKXJldHVybiIiO2NvbnN0IG49MSxzPWUubGVuZ3RoLHI9cy1uLGk9MSxvPXQubGVuZ3RoLWksbD1yPG8/cjpvO2xldCB1PS0xLGM9MDtmb3IoO2M8bDtjKyspe2NvbnN0IGg9ZS5jaGFyQ29kZUF0KG4rYyk7aWYoaCE9PXQuY2hhckNvZGVBdChpK2MpKWJyZWFrO2g9PT1ZJiYodT1jKX1pZihjPT09bClpZihvPmwpe2lmKHQuY2hhckNvZGVBdChpK2MpPT09WSlyZXR1cm4gdC5zbGljZShpK2MrMSk7aWYoYz09PTApcmV0dXJuIHQuc2xpY2UoaStjKX1lbHNlIHI+bCYmKGUuY2hhckNvZGVBdChuK2MpPT09WT91PWM6Yz09PTAmJih1PTApKTtsZXQgZj0iIjtmb3IoYz1uK3UrMTtjPD1zOysrYykoYz09PXN8fGUuY2hhckNvZGVBdChjKT09PVkpJiYoZis9Zi5sZW5ndGg9PT0wPyIuLiI6Ii8uLiIpO3JldHVybmAke2Z9JHt0LnNsaWNlKGkrdSl9YH0sdG9OYW1lc3BhY2VkUGF0aChlKXtyZXR1cm4gZX0sZGlybmFtZShlKXtpZihHKGUsInBhdGgiKSxlLmxlbmd0aD09PTApcmV0dXJuIi4iO2NvbnN0IHQ9ZS5jaGFyQ29kZUF0KDApPT09WTtsZXQgbj0tMSxzPSEwO2ZvcihsZXQgcj1lLmxlbmd0aC0xO3I+PTE7LS1yKWlmKGUuY2hhckNvZGVBdChyKT09PVkpe2lmKCFzKXtuPXI7YnJlYWt9fWVsc2Ugcz0hMTtyZXR1cm4gbj09PS0xP3Q/Ii8iOiIuIjp0JiZuPT09MT8iLy8iOmUuc2xpY2UoMCxuKX0sYmFzZW5hbWUoZSx0KXt0IT09dm9pZCAwJiZHKHQsImV4dCIpLEcoZSwicGF0aCIpO2xldCBuPTAscz0tMSxyPSEwLGk7aWYodCE9PXZvaWQgMCYmdC5sZW5ndGg+MCYmdC5sZW5ndGg8PWUubGVuZ3RoKXtpZih0PT09ZSlyZXR1cm4iIjtsZXQgbz10Lmxlbmd0aC0xLGw9LTE7Zm9yKGk9ZS5sZW5ndGgtMTtpPj0wOy0taSl7Y29uc3QgdT1lLmNoYXJDb2RlQXQoaSk7aWYodT09PVkpe2lmKCFyKXtuPWkrMTticmVha319ZWxzZSBsPT09LTEmJihyPSExLGw9aSsxKSxvPj0wJiYodT09PXQuY2hhckNvZGVBdChvKT8tLW89PT0tMSYmKHM9aSk6KG89LTEscz1sKSl9cmV0dXJuIG49PT1zP3M9bDpzPT09LTEmJihzPWUubGVuZ3RoKSxlLnNsaWNlKG4scyl9Zm9yKGk9ZS5sZW5ndGgtMTtpPj0wOy0taSlpZihlLmNoYXJDb2RlQXQoaSk9PT1ZKXtpZighcil7bj1pKzE7YnJlYWt9fWVsc2Ugcz09PS0xJiYocj0hMSxzPWkrMSk7cmV0dXJuIHM9PT0tMT8iIjplLnNsaWNlKG4scyl9LGV4dG5hbWUoZSl7RyhlLCJwYXRoIik7bGV0IHQ9LTEsbj0wLHM9LTEscj0hMCxpPTA7Zm9yKGxldCBvPWUubGVuZ3RoLTE7bz49MDstLW8pe2NvbnN0IGw9ZS5jaGFyQ29kZUF0KG8pO2lmKGw9PT1ZKXtpZighcil7bj1vKzE7YnJlYWt9Y29udGludWV9cz09PS0xJiYocj0hMSxzPW8rMSksbD09PXZlP3Q9PT0tMT90PW86aSE9PTEmJihpPTEpOnQhPT0tMSYmKGk9LTEpfXJldHVybiB0PT09LTF8fHM9PT0tMXx8aT09PTB8fGk9PT0xJiZ0PT09cy0xJiZ0PT09bisxPyIiOmUuc2xpY2UodCxzKX0sZm9ybWF0OnpuLmJpbmQobnVsbCwiLyIpLHBhcnNlKGUpe0coZSwicGF0aCIpO2NvbnN0IHQ9e3Jvb3Q6IiIsZGlyOiIiLGJhc2U6IiIsZXh0OiIiLG5hbWU6IiJ9O2lmKGUubGVuZ3RoPT09MClyZXR1cm4gdDtjb25zdCBuPWUuY2hhckNvZGVBdCgwKT09PVk7bGV0IHM7bj8odC5yb290PSIvIixzPTEpOnM9MDtsZXQgcj0tMSxpPTAsbz0tMSxsPSEwLHU9ZS5sZW5ndGgtMSxjPTA7Zm9yKDt1Pj1zOy0tdSl7Y29uc3QgZj1lLmNoYXJDb2RlQXQodSk7aWYoZj09PVkpe2lmKCFsKXtpPXUrMTticmVha31jb250aW51ZX1vPT09LTEmJihsPSExLG89dSsxKSxmPT09dmU/cj09PS0xP3I9dTpjIT09MSYmKGM9MSk6ciE9PS0xJiYoYz0tMSl9aWYobyE9PS0xKXtjb25zdCBmPWk9PT0wJiZuPzE6aTtyPT09LTF8fGM9PT0wfHxjPT09MSYmcj09PW8tMSYmcj09PWkrMT90LmJhc2U9dC5uYW1lPWUuc2xpY2UoZixvKToodC5uYW1lPWUuc2xpY2UoZixyKSx0LmJhc2U9ZS5zbGljZShmLG8pLHQuZXh0PWUuc2xpY2UocixvKSl9cmV0dXJuIGk+MD90LmRpcj1lLnNsaWNlKDAsaS0xKTpuJiYodC5kaXI9Ii8iKSx0fSxzZXA6Ii8iLGRlbGltaXRlcjoiOiIsd2luMzI6bnVsbCxwb3NpeDpudWxsfTtLLndpbjMyPVoud2luMzI9WixLLnBvc2l4PVoucG9zaXg9SyxwZT9aLm5vcm1hbGl6ZTpLLm5vcm1hbGl6ZTtjb25zdCBWaT1wZT9aLmpvaW46Sy5qb2luO3BlP1oucmVzb2x2ZTpLLnJlc29sdmUscGU/Wi5yZWxhdGl2ZTpLLnJlbGF0aXZlLHBlP1ouZGlybmFtZTpLLmRpcm5hbWUscGU/Wi5iYXNlbmFtZTpLLmJhc2VuYW1lLHBlP1ouZXh0bmFtZTpLLmV4dG5hbWUscGU/Wi5zZXA6Sy5zZXA7Y29uc3QgSWk9L15cd1tcd1xkKy4tXSokLyxCaT0vXlwvLyxxaT0vXlwvXC8vO2Z1bmN0aW9uIFVpKGUsdCl7aWYoIWUuc2NoZW1lJiZ0KXRocm93IG5ldyBFcnJvcihgW1VyaUVycm9yXTogU2NoZW1lIGlzIG1pc3Npbmc6IHtzY2hlbWU6ICIiLCBhdXRob3JpdHk6ICIke2UuYXV0aG9yaXR5fSIsIHBhdGg6ICIke2UucGF0aH0iLCBxdWVyeTogIiR7ZS5xdWVyeX0iLCBmcmFnbWVudDogIiR7ZS5mcmFnbWVudH0ifWApO2lmKGUuc2NoZW1lJiYhSWkudGVzdChlLnNjaGVtZSkpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBTY2hlbWUgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLiIpO2lmKGUucGF0aCl7aWYoZS5hdXRob3JpdHkpe2lmKCFCaS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBjb250YWlucyBhbiBhdXRob3JpdHkgY29tcG9uZW50LCB0aGVuIHRoZSBwYXRoIGNvbXBvbmVudCBtdXN0IGVpdGhlciBiZSBlbXB0eSBvciBiZWdpbiB3aXRoIGEgc2xhc2ggKCIvIikgY2hhcmFjdGVyJyl9ZWxzZSBpZihxaS50ZXN0KGUucGF0aCkpdGhyb3cgbmV3IEVycm9yKCdbVXJpRXJyb3JdOiBJZiBhIFVSSSBkb2VzIG5vdCBjb250YWluIGFuIGF1dGhvcml0eSBjb21wb25lbnQsIHRoZW4gdGhlIHBhdGggY2Fubm90IGJlZ2luIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgKCIvLyIpJyl9fWZ1bmN0aW9uIEhpKGUsdCl7cmV0dXJuIWUmJiF0PyJmaWxlIjplfWZ1bmN0aW9uICRpKGUsdCl7c3dpdGNoKGUpe2Nhc2UiaHR0cHMiOmNhc2UiaHR0cCI6Y2FzZSJmaWxlIjp0P3RbMF0hPT1oZSYmKHQ9aGUrdCk6dD1oZTticmVha31yZXR1cm4gdH1jb25zdCBXPSIiLGhlPSIvIixXaT0vXigoW146Lz8jXSs/KTopPyhcL1wvKFteLz8jXSopKT8oW14/I10qKShcPyhbXiNdKikpPygjKC4qKSk/LztjbGFzcyBzZXtzdGF0aWMgaXNVcmkodCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBzZT8hMDp0P3R5cGVvZiB0LmF1dGhvcml0eT09InN0cmluZyImJnR5cGVvZiB0LmZyYWdtZW50PT0ic3RyaW5nIiYmdHlwZW9mIHQucGF0aD09InN0cmluZyImJnR5cGVvZiB0LnF1ZXJ5PT0ic3RyaW5nIiYmdHlwZW9mIHQuc2NoZW1lPT0ic3RyaW5nIiYmdHlwZW9mIHQuZnNQYXRoPT0ic3RyaW5nIiYmdHlwZW9mIHQud2l0aD09ImZ1bmN0aW9uIiYmdHlwZW9mIHQudG9TdHJpbmc9PSJmdW5jdGlvbiI6ITF9Y29uc3RydWN0b3IodCxuLHMscixpLG89ITEpe3R5cGVvZiB0PT0ib2JqZWN0Ij8odGhpcy5zY2hlbWU9dC5zY2hlbWV8fFcsdGhpcy5hdXRob3JpdHk9dC5hdXRob3JpdHl8fFcsdGhpcy5wYXRoPXQucGF0aHx8Vyx0aGlzLnF1ZXJ5PXQucXVlcnl8fFcsdGhpcy5mcmFnbWVudD10LmZyYWdtZW50fHxXKToodGhpcy5zY2hlbWU9SGkodCxvKSx0aGlzLmF1dGhvcml0eT1ufHxXLHRoaXMucGF0aD0kaSh0aGlzLnNjaGVtZSxzfHxXKSx0aGlzLnF1ZXJ5PXJ8fFcsdGhpcy5mcmFnbWVudD1pfHxXLFVpKHRoaXMsbykpfWdldCBmc1BhdGgoKXtyZXR1cm4gbm4odGhpcywhMSl9d2l0aCh0KXtpZighdClyZXR1cm4gdGhpcztsZXR7c2NoZW1lOm4sYXV0aG9yaXR5OnMscGF0aDpyLHF1ZXJ5OmksZnJhZ21lbnQ6b309dDtyZXR1cm4gbj09PXZvaWQgMD9uPXRoaXMuc2NoZW1lOm49PT1udWxsJiYobj1XKSxzPT09dm9pZCAwP3M9dGhpcy5hdXRob3JpdHk6cz09PW51bGwmJihzPVcpLHI9PT12b2lkIDA/cj10aGlzLnBhdGg6cj09PW51bGwmJihyPVcpLGk9PT12b2lkIDA/aT10aGlzLnF1ZXJ5Omk9PT1udWxsJiYoaT1XKSxvPT09dm9pZCAwP289dGhpcy5mcmFnbWVudDpvPT09bnVsbCYmKG89Vyksbj09PXRoaXMuc2NoZW1lJiZzPT09dGhpcy5hdXRob3JpdHkmJnI9PT10aGlzLnBhdGgmJmk9PT10aGlzLnF1ZXJ5JiZvPT09dGhpcy5mcmFnbWVudD90aGlzOm5ldyBUZShuLHMscixpLG8pfXN0YXRpYyBwYXJzZSh0LG49ITEpe2NvbnN0IHM9V2kuZXhlYyh0KTtyZXR1cm4gcz9uZXcgVGUoc1syXXx8Vyx3dChzWzRdfHxXKSx3dChzWzVdfHxXKSx3dChzWzddfHxXKSx3dChzWzldfHxXKSxuKTpuZXcgVGUoVyxXLFcsVyxXKX1zdGF0aWMgZmlsZSh0KXtsZXQgbj1XO2lmKFplJiYodD10LnJlcGxhY2UoL1xcL2csaGUpKSx0WzBdPT09aGUmJnRbMV09PT1oZSl7Y29uc3Qgcz10LmluZGV4T2YoaGUsMik7cz09PS0xPyhuPXQuc3Vic3RyaW5nKDIpLHQ9aGUpOihuPXQuc3Vic3RyaW5nKDIscyksdD10LnN1YnN0cmluZyhzKXx8aGUpfXJldHVybiBuZXcgVGUoImZpbGUiLG4sdCxXLFcpfXN0YXRpYyBmcm9tKHQsbil7cmV0dXJuIG5ldyBUZSh0LnNjaGVtZSx0LmF1dGhvcml0eSx0LnBhdGgsdC5xdWVyeSx0LmZyYWdtZW50LG4pfXN0YXRpYyBqb2luUGF0aCh0LC4uLm4pe2lmKCF0LnBhdGgpdGhyb3cgbmV3IEVycm9yKCJbVXJpRXJyb3JdOiBjYW5ub3QgY2FsbCBqb2luUGF0aCBvbiBVUkkgd2l0aG91dCBwYXRoIik7bGV0IHM7cmV0dXJuIFplJiZ0LnNjaGVtZT09PSJmaWxlIj9zPXNlLmZpbGUoWi5qb2luKG5uKHQsITApLC4uLm4pKS5wYXRoOnM9Sy5qb2luKHQucGF0aCwuLi5uKSx0LndpdGgoe3BhdGg6c30pfXRvU3RyaW5nKHQ9ITEpe3JldHVybiBzbih0aGlzLHQpfXRvSlNPTigpe3JldHVybiB0aGlzfXN0YXRpYyByZXZpdmUodCl7aWYodCl7aWYodCBpbnN0YW5jZW9mIHNlKXJldHVybiB0O3tjb25zdCBuPW5ldyBUZSh0KTtyZXR1cm4gbi5fZm9ybWF0dGVkPXQuZXh0ZXJuYWw/P251bGwsbi5fZnNQYXRoPXQuX3NlcD09PU9uP3QuZnNQYXRoPz9udWxsOm51bGwsbn19ZWxzZSByZXR1cm4gdH19Y29uc3QgT249WmU/MTp2b2lkIDA7Y2xhc3MgVGUgZXh0ZW5kcyBzZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5fZm9ybWF0dGVkPW51bGwsdGhpcy5fZnNQYXRoPW51bGx9Z2V0IGZzUGF0aCgpe3JldHVybiB0aGlzLl9mc1BhdGh8fCh0aGlzLl9mc1BhdGg9bm4odGhpcywhMSkpLHRoaXMuX2ZzUGF0aH10b1N0cmluZyh0PSExKXtyZXR1cm4gdD9zbih0aGlzLCEwKToodGhpcy5fZm9ybWF0dGVkfHwodGhpcy5fZm9ybWF0dGVkPXNuKHRoaXMsITEpKSx0aGlzLl9mb3JtYXR0ZWQpfXRvSlNPTigpe2NvbnN0IHQ9eyRtaWQ6MX07cmV0dXJuIHRoaXMuX2ZzUGF0aCYmKHQuZnNQYXRoPXRoaXMuX2ZzUGF0aCx0Ll9zZXA9T24pLHRoaXMuX2Zvcm1hdHRlZCYmKHQuZXh0ZXJuYWw9dGhpcy5fZm9ybWF0dGVkKSx0aGlzLnBhdGgmJih0LnBhdGg9dGhpcy5wYXRoKSx0aGlzLnNjaGVtZSYmKHQuc2NoZW1lPXRoaXMuc2NoZW1lKSx0aGlzLmF1dGhvcml0eSYmKHQuYXV0aG9yaXR5PXRoaXMuYXV0aG9yaXR5KSx0aGlzLnF1ZXJ5JiYodC5xdWVyeT10aGlzLnF1ZXJ5KSx0aGlzLmZyYWdtZW50JiYodC5mcmFnbWVudD10aGlzLmZyYWdtZW50KSx0fX1jb25zdCBqbj17NTg6IiUzQSIsNDc6IiUyRiIsNjM6IiUzRiIsMzU6IiUyMyIsOTE6IiU1QiIsOTM6IiU1RCIsNjQ6IiU0MCIsMzM6IiUyMSIsMzY6IiUyNCIsMzg6IiUyNiIsMzk6IiUyNyIsNDA6IiUyOCIsNDE6IiUyOSIsNDI6IiUyQSIsNDM6IiUyQiIsNDQ6IiUyQyIsNTk6IiUzQiIsNjE6IiUzRCIsMzI6IiUyMCJ9O2Z1bmN0aW9uIEduKGUsdCxuKXtsZXQgcyxyPS0xO2ZvcihsZXQgaT0wO2k8ZS5sZW5ndGg7aSsrKXtjb25zdCBvPWUuY2hhckNvZGVBdChpKTtpZihvPj05NyYmbzw9MTIyfHxvPj02NSYmbzw9OTB8fG8+PTQ4JiZvPD01N3x8bz09PTQ1fHxvPT09NDZ8fG89PT05NXx8bz09PTEyNnx8dCYmbz09PTQ3fHxuJiZvPT09OTF8fG4mJm89PT05M3x8biYmbz09PTU4KXIhPT0tMSYmKHMrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyLGkpKSxyPS0xKSxzIT09dm9pZCAwJiYocys9ZS5jaGFyQXQoaSkpO2Vsc2V7cz09PXZvaWQgMCYmKHM9ZS5zdWJzdHIoMCxpKSk7Y29uc3QgbD1qbltvXTtsIT09dm9pZCAwPyhyIT09LTEmJihzKz1lbmNvZGVVUklDb21wb25lbnQoZS5zdWJzdHJpbmcocixpKSkscj0tMSkscys9bCk6cj09PS0xJiYocj1pKX19cmV0dXJuIHIhPT0tMSYmKHMrPWVuY29kZVVSSUNvbXBvbmVudChlLnN1YnN0cmluZyhyKSkpLHMhPT12b2lkIDA/czplfWZ1bmN0aW9uIHppKGUpe2xldCB0O2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKXtjb25zdCBzPWUuY2hhckNvZGVBdChuKTtzPT09MzV8fHM9PT02Mz8odD09PXZvaWQgMCYmKHQ9ZS5zdWJzdHIoMCxuKSksdCs9am5bc10pOnQhPT12b2lkIDAmJih0Kz1lW25dKX1yZXR1cm4gdCE9PXZvaWQgMD90OmV9ZnVuY3Rpb24gbm4oZSx0KXtsZXQgbjtyZXR1cm4gZS5hdXRob3JpdHkmJmUucGF0aC5sZW5ndGg+MSYmZS5zY2hlbWU9PT0iZmlsZSI/bj1gLy8ke2UuYXV0aG9yaXR5fSR7ZS5wYXRofWA6ZS5wYXRoLmNoYXJDb2RlQXQoMCk9PT00NyYmKGUucGF0aC5jaGFyQ29kZUF0KDEpPj02NSYmZS5wYXRoLmNoYXJDb2RlQXQoMSk8PTkwfHxlLnBhdGguY2hhckNvZGVBdCgxKT49OTcmJmUucGF0aC5jaGFyQ29kZUF0KDEpPD0xMjIpJiZlLnBhdGguY2hhckNvZGVBdCgyKT09PTU4P3Q/bj1lLnBhdGguc3Vic3RyKDEpOm49ZS5wYXRoWzFdLnRvTG93ZXJDYXNlKCkrZS5wYXRoLnN1YnN0cigyKTpuPWUucGF0aCxaZSYmKG49bi5yZXBsYWNlKC9cLy9nLCJcXCIpKSxufWZ1bmN0aW9uIHNuKGUsdCl7Y29uc3Qgbj10P3ppOkduO2xldCBzPSIiLHtzY2hlbWU6cixhdXRob3JpdHk6aSxwYXRoOm8scXVlcnk6bCxmcmFnbWVudDp1fT1lO2lmKHImJihzKz1yLHMrPSI6IiksKGl8fHI9PT0iZmlsZSIpJiYocys9aGUscys9aGUpLGkpe2xldCBjPWkuaW5kZXhPZigiQCIpO2lmKGMhPT0tMSl7Y29uc3QgZj1pLnN1YnN0cigwLGMpO2k9aS5zdWJzdHIoYysxKSxjPWYubGFzdEluZGV4T2YoIjoiKSxjPT09LTE/cys9bihmLCExLCExKToocys9bihmLnN1YnN0cigwLGMpLCExLCExKSxzKz0iOiIscys9bihmLnN1YnN0cihjKzEpLCExLCEwKSkscys9IkAifWk9aS50b0xvd2VyQ2FzZSgpLGM9aS5sYXN0SW5kZXhPZigiOiIpLGM9PT0tMT9zKz1uKGksITEsITApOihzKz1uKGkuc3Vic3RyKDAsYyksITEsITApLHMrPWkuc3Vic3RyKGMpKX1pZihvKXtpZihvLmxlbmd0aD49MyYmby5jaGFyQ29kZUF0KDApPT09NDcmJm8uY2hhckNvZGVBdCgyKT09PTU4KXtjb25zdCBjPW8uY2hhckNvZGVBdCgxKTtjPj02NSYmYzw9OTAmJihvPWAvJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGMrMzIpfToke28uc3Vic3RyKDMpfWApfWVsc2UgaWYoby5sZW5ndGg+PTImJm8uY2hhckNvZGVBdCgxKT09PTU4KXtjb25zdCBjPW8uY2hhckNvZGVBdCgwKTtjPj02NSYmYzw9OTAmJihvPWAke1N0cmluZy5mcm9tQ2hhckNvZGUoYyszMil9OiR7by5zdWJzdHIoMil9YCl9cys9bihvLCEwLCExKX1yZXR1cm4gbCYmKHMrPSI/IixzKz1uKGwsITEsITEpKSx1JiYocys9IiMiLHMrPXQ/dTpHbih1LCExLCExKSksc31mdW5jdGlvbiBYbihlKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX1jYXRjaHtyZXR1cm4gZS5sZW5ndGg+Mz9lLnN1YnN0cigwLDMpK1huKGUuc3Vic3RyKDMpKTplfX1jb25zdCBRbj0vKCVbMC05QS1aYS16XVswLTlBLVphLXpdKSsvZztmdW5jdGlvbiB3dChlKXtyZXR1cm4gZS5tYXRjaChRbik/ZS5yZXBsYWNlKFFuLHQ9PlhuKHQpKTplfXZhciBDZTsoZnVuY3Rpb24oZSl7ZS5pbk1lbW9yeT0iaW5tZW1vcnkiLGUudnNjb2RlPSJ2c2NvZGUiLGUuaW50ZXJuYWw9InByaXZhdGUiLGUud2Fsa1Rocm91Z2g9IndhbGtUaHJvdWdoIixlLndhbGtUaHJvdWdoU25pcHBldD0id2Fsa1Rocm91Z2hTbmlwcGV0IixlLmh0dHA9Imh0dHAiLGUuaHR0cHM9Imh0dHBzIixlLmZpbGU9ImZpbGUiLGUubWFpbHRvPSJtYWlsdG8iLGUudW50aXRsZWQ9InVudGl0bGVkIixlLmRhdGE9ImRhdGEiLGUuY29tbWFuZD0iY29tbWFuZCIsZS52c2NvZGVSZW1vdGU9InZzY29kZS1yZW1vdGUiLGUudnNjb2RlUmVtb3RlUmVzb3VyY2U9InZzY29kZS1yZW1vdGUtcmVzb3VyY2UiLGUudnNjb2RlTWFuYWdlZFJlbW90ZVJlc291cmNlPSJ2c2NvZGUtbWFuYWdlZC1yZW1vdGUtcmVzb3VyY2UiLGUudnNjb2RlVXNlckRhdGE9InZzY29kZS11c2VyZGF0YSIsZS52c2NvZGVDdXN0b21FZGl0b3I9InZzY29kZS1jdXN0b20tZWRpdG9yIixlLnZzY29kZU5vdGVib29rQ2VsbD0idnNjb2RlLW5vdGVib29rLWNlbGwiLGUudnNjb2RlTm90ZWJvb2tDZWxsTWV0YWRhdGE9InZzY29kZS1ub3RlYm9vay1jZWxsLW1ldGFkYXRhIixlLnZzY29kZU5vdGVib29rQ2VsbE1ldGFkYXRhRGlmZj0idnNjb2RlLW5vdGVib29rLWNlbGwtbWV0YWRhdGEtZGlmZiIsZS52c2NvZGVOb3RlYm9va0NlbGxPdXRwdXQ9InZzY29kZS1ub3RlYm9vay1jZWxsLW91dHB1dCIsZS52c2NvZGVOb3RlYm9va0NlbGxPdXRwdXREaWZmPSJ2c2NvZGUtbm90ZWJvb2stY2VsbC1vdXRwdXQtZGlmZiIsZS52c2NvZGVOb3RlYm9va01ldGFkYXRhPSJ2c2NvZGUtbm90ZWJvb2stbWV0YWRhdGEiLGUudnNjb2RlSW50ZXJhY3RpdmVJbnB1dD0idnNjb2RlLWludGVyYWN0aXZlLWlucHV0IixlLnZzY29kZVNldHRpbmdzPSJ2c2NvZGUtc2V0dGluZ3MiLGUudnNjb2RlV29ya3NwYWNlVHJ1c3Q9InZzY29kZS13b3Jrc3BhY2UtdHJ1c3QiLGUudnNjb2RlVGVybWluYWw9InZzY29kZS10ZXJtaW5hbCIsZS52c2NvZGVDaGF0Q29kZUJsb2NrPSJ2c2NvZGUtY2hhdC1jb2RlLWJsb2NrIixlLnZzY29kZUNoYXRDb2RlQ29tcGFyZUJsb2NrPSJ2c2NvZGUtY2hhdC1jb2RlLWNvbXBhcmUtYmxvY2siLGUudnNjb2RlQ2hhdFNlc3NzaW9uPSJ2c2NvZGUtY2hhdC1lZGl0b3IiLGUud2Vidmlld1BhbmVsPSJ3ZWJ2aWV3LXBhbmVsIixlLnZzY29kZVdlYnZpZXc9InZzY29kZS13ZWJ2aWV3IixlLmV4dGVuc2lvbj0iZXh0ZW5zaW9uIixlLnZzY29kZUZpbGVSZXNvdXJjZT0idnNjb2RlLWZpbGUiLGUudG1wPSJ0bXAiLGUudnNscz0idnNscyIsZS52c2NvZGVTb3VyY2VDb250cm9sPSJ2c2NvZGUtc2NtIixlLmNvbW1lbnRzSW5wdXQ9ImNvbW1lbnQiLGUuY29kZVNldHRpbmc9ImNvZGUtc2V0dGluZyIsZS5vdXRwdXRDaGFubmVsPSJvdXRwdXQifSkoQ2V8fChDZT17fSkpO2NvbnN0IE9pPSJ0a24iO2NsYXNzIGppe2NvbnN0cnVjdG9yKCl7dGhpcy5faG9zdHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wb3J0cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2Nvbm5lY3Rpb25Ub2tlbnM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9wcmVmZXJyZWRXZWJTY2hlbWE9Imh0dHAiLHRoaXMuX2RlbGVnYXRlPW51bGwsdGhpcy5fc2VydmVyUm9vdFBhdGg9Ii8ifXNldFByZWZlcnJlZFdlYlNjaGVtYSh0KXt0aGlzLl9wcmVmZXJyZWRXZWJTY2hlbWE9dH1nZXQgX3JlbW90ZVJlc291cmNlc1BhdGgoKXtyZXR1cm4gSy5qb2luKHRoaXMuX3NlcnZlclJvb3RQYXRoLENlLnZzY29kZVJlbW90ZVJlc291cmNlKX1yZXdyaXRlKHQpe2lmKHRoaXMuX2RlbGVnYXRlKXRyeXtyZXR1cm4gdGhpcy5fZGVsZWdhdGUodCl9Y2F0Y2gobCl7cmV0dXJuIFllKGwpLHR9Y29uc3Qgbj10LmF1dGhvcml0eTtsZXQgcz10aGlzLl9ob3N0c1tuXTtzJiZzLmluZGV4T2YoIjoiKSE9PS0xJiZzLmluZGV4T2YoIlsiKT09PS0xJiYocz1gWyR7c31dYCk7Y29uc3Qgcj10aGlzLl9wb3J0c1tuXSxpPXRoaXMuX2Nvbm5lY3Rpb25Ub2tlbnNbbl07bGV0IG89YHBhdGg9JHtlbmNvZGVVUklDb21wb25lbnQodC5wYXRoKX1gO3JldHVybiB0eXBlb2YgaT09InN0cmluZyImJihvKz1gJiR7T2l9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGkpfWApLHNlLmZyb20oe3NjaGVtZTpkaT90aGlzLl9wcmVmZXJyZWRXZWJTY2hlbWE6Q2UudnNjb2RlUmVtb3RlUmVzb3VyY2UsYXV0aG9yaXR5OmAke3N9OiR7cn1gLHBhdGg6dGhpcy5fcmVtb3RlUmVzb3VyY2VzUGF0aCxxdWVyeTpvfSl9fWNvbnN0IEdpPW5ldyBqaSxYaT0idnNjb2RlLWFwcCIsbHQ9Y2xhc3MgbHR7YXNCcm93c2VyVXJpKHQpe2NvbnN0IG49dGhpcy50b1VyaSh0KTtyZXR1cm4gdGhpcy51cmlUb0Jyb3dzZXJVcmkobil9dXJpVG9Ccm93c2VyVXJpKHQpe3JldHVybiB0LnNjaGVtZT09PUNlLnZzY29kZVJlbW90ZT9HaS5yZXdyaXRlKHQpOnQuc2NoZW1lPT09Q2UuZmlsZSYmKGZpfHxtaT09PWAke0NlLnZzY29kZUZpbGVSZXNvdXJjZX06Ly8ke2x0LkZBTExCQUNLX0FVVEhPUklUWX1gKT90LndpdGgoe3NjaGVtZTpDZS52c2NvZGVGaWxlUmVzb3VyY2UsYXV0aG9yaXR5OnQuYXV0aG9yaXR5fHxsdC5GQUxMQkFDS19BVVRIT1JJVFkscXVlcnk6bnVsbCxmcmFnbWVudDpudWxsfSk6dH10b1VyaSh0LG4pe2lmKHNlLmlzVXJpKHQpKXJldHVybiB0O2lmKGdsb2JhbFRoaXMuX1ZTQ09ERV9GSUxFX1JPT1Qpe2NvbnN0IHM9Z2xvYmFsVGhpcy5fVlNDT0RFX0ZJTEVfUk9PVDtpZigvXlx3W1x3XGQrLi1dKjpcL1wvLy50ZXN0KHMpKXJldHVybiBzZS5qb2luUGF0aChzZS5wYXJzZShzLCEwKSx0KTtjb25zdCByPVZpKHMsdCk7cmV0dXJuIHNlLmZpbGUocil9cmV0dXJuIHNlLnBhcnNlKG4udG9VcmwodCkpfX07bHQuRkFMTEJBQ0tfQVVUSE9SSVRZPVhpO2xldCBybj1sdDtjb25zdCBZbj1uZXcgcm47dmFyIEpuOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXAoW1siMSIseyJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSI6InNhbWUtb3JpZ2luIn1dLFsiMiIseyJDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5IjoicmVxdWlyZS1jb3JwIn1dLFsiMyIseyJDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeSI6InNhbWUtb3JpZ2luIiwiQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSI6InJlcXVpcmUtY29ycCJ9XV0pO2UuQ29vcEFuZENvZXA9T2JqZWN0LmZyZWV6ZSh0LmdldCgiMyIpKTtjb25zdCBuPSJ2c2NvZGUtY29pIjtmdW5jdGlvbiBzKGkpe2xldCBvO3R5cGVvZiBpPT0ic3RyaW5nIj9vPW5ldyBVUkwoaSkuc2VhcmNoUGFyYW1zOmkgaW5zdGFuY2VvZiBVUkw/bz1pLnNlYXJjaFBhcmFtczpzZS5pc1VyaShpKSYmKG89bmV3IFVSTChpLnRvU3RyaW5nKCEwKSkuc2VhcmNoUGFyYW1zKTtjb25zdCBsPW8/LmdldChuKTtpZihsKXJldHVybiB0LmdldChsKX1lLmdldEhlYWRlcnNGcm9tUXVlcnk9cztmdW5jdGlvbiByKGksbyxsKXtpZighZ2xvYmFsVGhpcy5jcm9zc09yaWdpbklzb2xhdGVkKXJldHVybjtjb25zdCB1PW8mJmw/IjMiOmw/IjIiOiIxIjtpIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zP2kuc2V0KG4sdSk6aVtuXT11fWUuYWRkU2VhcmNoUGFyYW09cn0pKEpufHwoSm49e30pKTtjb25zdCBhbj0iZGVmYXVsdCIsUWk9IiRpbml0aWFsaXplIjtjbGFzcyBZaXtjb25zdHJ1Y3Rvcih0LG4scyxyLGkpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnJlcT1uLHRoaXMuY2hhbm5lbD1zLHRoaXMubWV0aG9kPXIsdGhpcy5hcmdzPWksdGhpcy50eXBlPTB9fWNsYXNzIFpue2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMudnNXb3JrZXI9dCx0aGlzLnNlcT1uLHRoaXMucmVzPXMsdGhpcy5lcnI9cix0aGlzLnR5cGU9MX19Y2xhc3MgSml7Y29uc3RydWN0b3IodCxuLHMscixpKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmNoYW5uZWw9cyx0aGlzLmV2ZW50TmFtZT1yLHRoaXMuYXJnPWksdGhpcy50eXBlPTJ9fWNsYXNzIFppe2NvbnN0cnVjdG9yKHQsbixzKXt0aGlzLnZzV29ya2VyPXQsdGhpcy5yZXE9bix0aGlzLmV2ZW50PXMsdGhpcy50eXBlPTN9fWNsYXNzIEtpe2NvbnN0cnVjdG9yKHQsbil7dGhpcy52c1dvcmtlcj10LHRoaXMucmVxPW4sdGhpcy50eXBlPTR9fWNsYXNzIGVhe2NvbnN0cnVjdG9yKHQpe3RoaXMuX3dvcmtlcklkPS0xLHRoaXMuX2hhbmRsZXI9dCx0aGlzLl9sYXN0U2VudFJlcT0wLHRoaXMuX3BlbmRpbmdSZXBsaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fcGVuZGluZ0VtaXR0ZXJzPW5ldyBNYXAsdGhpcy5fcGVuZGluZ0V2ZW50cz1uZXcgTWFwfXNldFdvcmtlcklkKHQpe3RoaXMuX3dvcmtlcklkPXR9c2VuZE1lc3NhZ2UodCxuLHMpe2NvbnN0IHI9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpO3JldHVybiBuZXcgUHJvbWlzZSgoaSxvKT0+e3RoaXMuX3BlbmRpbmdSZXBsaWVzW3JdPXtyZXNvbHZlOmkscmVqZWN0Om99LHRoaXMuX3NlbmQobmV3IFlpKHRoaXMuX3dvcmtlcklkLHIsdCxuLHMpKX0pfWxpc3Rlbih0LG4scyl7bGV0IHI9bnVsbDtjb25zdCBpPW5ldyBvZSh7b25XaWxsQWRkRmlyc3RMaXN0ZW5lcjooKT0+e3I9U3RyaW5nKCsrdGhpcy5fbGFzdFNlbnRSZXEpLHRoaXMuX3BlbmRpbmdFbWl0dGVycy5zZXQocixpKSx0aGlzLl9zZW5kKG5ldyBKaSh0aGlzLl93b3JrZXJJZCxyLHQsbixzKSl9LG9uRGlkUmVtb3ZlTGFzdExpc3RlbmVyOigpPT57dGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmRlbGV0ZShyKSx0aGlzLl9zZW5kKG5ldyBLaSh0aGlzLl93b3JrZXJJZCxyKSkscj1udWxsfX0pO3JldHVybiBpLmV2ZW50fWhhbmRsZU1lc3NhZ2UodCl7IXR8fCF0LnZzV29ya2VyfHx0aGlzLl93b3JrZXJJZCE9PS0xJiZ0LnZzV29ya2VyIT09dGhpcy5fd29ya2VySWR8fHRoaXMuX2hhbmRsZU1lc3NhZ2UodCl9Y3JlYXRlUHJveHlUb1JlbW90ZUNoYW5uZWwodCxuKXtjb25zdCBzPXtnZXQ6KHIsaSk9Pih0eXBlb2YgaT09InN0cmluZyImJiFyW2ldJiYoZXMoaSk/cltpXT1vPT50aGlzLmxpc3Rlbih0LGksbyk6S24oaSk/cltpXT10aGlzLmxpc3Rlbih0LGksdm9pZCAwKTppLmNoYXJDb2RlQXQoMCk9PT0zNiYmKHJbaV09YXN5bmMoLi4ubyk9Pihhd2FpdCBuPy4oKSx0aGlzLnNlbmRNZXNzYWdlKHQsaSxvKSkpKSxyW2ldKX07cmV0dXJuIG5ldyBQcm94eShPYmplY3QuY3JlYXRlKG51bGwpLHMpfV9oYW5kbGVNZXNzYWdlKHQpe3N3aXRjaCh0LnR5cGUpe2Nhc2UgMTpyZXR1cm4gdGhpcy5faGFuZGxlUmVwbHlNZXNzYWdlKHQpO2Nhc2UgMDpyZXR1cm4gdGhpcy5faGFuZGxlUmVxdWVzdE1lc3NhZ2UodCk7Y2FzZSAyOnJldHVybiB0aGlzLl9oYW5kbGVTdWJzY3JpYmVFdmVudE1lc3NhZ2UodCk7Y2FzZSAzOnJldHVybiB0aGlzLl9oYW5kbGVFdmVudE1lc3NhZ2UodCk7Y2FzZSA0OnJldHVybiB0aGlzLl9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KX19X2hhbmRsZVJlcGx5TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdKXtjb25zb2xlLndhcm4oIkdvdCByZXBseSB0byB1bmtub3duIHNlcSIpO3JldHVybn1jb25zdCBuPXRoaXMuX3BlbmRpbmdSZXBsaWVzW3Quc2VxXTtpZihkZWxldGUgdGhpcy5fcGVuZGluZ1JlcGxpZXNbdC5zZXFdLHQuZXJyKXtsZXQgcz10LmVycjt0LmVyci4kaXNFcnJvciYmKHM9bmV3IEVycm9yLHMubmFtZT10LmVyci5uYW1lLHMubWVzc2FnZT10LmVyci5tZXNzYWdlLHMuc3RhY2s9dC5lcnIuc3RhY2spLG4ucmVqZWN0KHMpO3JldHVybn1uLnJlc29sdmUodC5yZXMpfV9oYW5kbGVSZXF1ZXN0TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxO3RoaXMuX2hhbmRsZXIuaGFuZGxlTWVzc2FnZSh0LmNoYW5uZWwsdC5tZXRob2QsdC5hcmdzKS50aGVuKHI9Pnt0aGlzLl9zZW5kKG5ldyBabih0aGlzLl93b3JrZXJJZCxuLHIsdm9pZCAwKSl9LHI9PntyLmRldGFpbCBpbnN0YW5jZW9mIEVycm9yJiYoci5kZXRhaWw9UG4oci5kZXRhaWwpKSx0aGlzLl9zZW5kKG5ldyBabih0aGlzLl93b3JrZXJJZCxuLHZvaWQgMCxQbihyKSkpfSl9X2hhbmRsZVN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtjb25zdCBuPXQucmVxLHM9dGhpcy5faGFuZGxlci5oYW5kbGVFdmVudCh0LmNoYW5uZWwsdC5ldmVudE5hbWUsdC5hcmcpKHI9Pnt0aGlzLl9zZW5kKG5ldyBaaSh0aGlzLl93b3JrZXJJZCxuLHIpKX0pO3RoaXMuX3BlbmRpbmdFdmVudHMuc2V0KG4scyl9X2hhbmRsZUV2ZW50TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ0VtaXR0ZXJzLmhhcyh0LnJlcSkpe2NvbnNvbGUud2FybigiR290IGV2ZW50IGZvciB1bmtub3duIHJlcSIpO3JldHVybn10aGlzLl9wZW5kaW5nRW1pdHRlcnMuZ2V0KHQucmVxKS5maXJlKHQuZXZlbnQpfV9oYW5kbGVVbnN1YnNjcmliZUV2ZW50TWVzc2FnZSh0KXtpZighdGhpcy5fcGVuZGluZ0V2ZW50cy5oYXModC5yZXEpKXtjb25zb2xlLndhcm4oIkdvdCB1bnN1YnNjcmliZSBmb3IgdW5rbm93biByZXEiKTtyZXR1cm59dGhpcy5fcGVuZGluZ0V2ZW50cy5nZXQodC5yZXEpLmRpc3Bvc2UoKSx0aGlzLl9wZW5kaW5nRXZlbnRzLmRlbGV0ZSh0LnJlcSl9X3NlbmQodCl7Y29uc3Qgbj1bXTtpZih0LnR5cGU9PT0wKWZvcihsZXQgcz0wO3M8dC5hcmdzLmxlbmd0aDtzKyspdC5hcmdzW3NdaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciYmbi5wdXNoKHQuYXJnc1tzXSk7ZWxzZSB0LnR5cGU9PT0xJiZ0LnJlcyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyJiZuLnB1c2godC5yZXMpO3RoaXMuX2hhbmRsZXIuc2VuZE1lc3NhZ2UodCxuKX19ZnVuY3Rpb24gS24oZSl7cmV0dXJuIGVbMF09PT0ibyImJmVbMV09PT0ibiImJlVuKGUuY2hhckNvZGVBdCgyKSl9ZnVuY3Rpb24gZXMoZSl7cmV0dXJuL15vbkR5bmFtaWMvLnRlc3QoZSkmJlVuKGUuY2hhckNvZGVBdCg5KSl9Y2xhc3MgdGF7Y29uc3RydWN0b3IodCxuKXt0aGlzLl9sb2NhbENoYW5uZWxzPW5ldyBNYXAsdGhpcy5fcmVtb3RlQ2hhbm5lbHM9bmV3IE1hcCx0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnk9bix0aGlzLl9yZXF1ZXN0SGFuZGxlcj1udWxsLHRoaXMuX3Byb3RvY29sPW5ldyBlYSh7c2VuZE1lc3NhZ2U6KHMscik9Pnt0KHMscil9LGhhbmRsZU1lc3NhZ2U6KHMscixpKT0+dGhpcy5faGFuZGxlTWVzc2FnZShzLHIsaSksaGFuZGxlRXZlbnQ6KHMscixpKT0+dGhpcy5faGFuZGxlRXZlbnQocyxyLGkpfSl9b25tZXNzYWdlKHQpe3RoaXMuX3Byb3RvY29sLmhhbmRsZU1lc3NhZ2UodCl9X2hhbmRsZU1lc3NhZ2UodCxuLHMpe2lmKHQ9PT1hbiYmbj09PVFpKXJldHVybiB0aGlzLmluaXRpYWxpemUoc1swXSxzWzFdLHNbMl0pO2NvbnN0IHI9dD09PWFuP3RoaXMuX3JlcXVlc3RIYW5kbGVyOnRoaXMuX2xvY2FsQ2hhbm5lbHMuZ2V0KHQpO2lmKCFyKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYE1pc3NpbmcgY2hhbm5lbCAke3R9IG9uIHdvcmtlciB0aHJlYWRgKSk7aWYodHlwZW9mIHJbbl0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgTWlzc2luZyBtZXRob2QgJHtufSBvbiB3b3JrZXIgdGhyZWFkIGNoYW5uZWwgJHt0fWApKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZShyW25dLmFwcGx5KHIscykpfWNhdGNoKGkpe3JldHVybiBQcm9taXNlLnJlamVjdChpKX19X2hhbmRsZUV2ZW50KHQsbixzKXtjb25zdCByPXQ9PT1hbj90aGlzLl9yZXF1ZXN0SGFuZGxlcjp0aGlzLl9sb2NhbENoYW5uZWxzLmdldCh0KTtpZighcil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgY2hhbm5lbCAke3R9IG9uIHdvcmtlciB0aHJlYWRgKTtpZihlcyhuKSl7Y29uc3QgaT1yW25dLmNhbGwocixzKTtpZih0eXBlb2YgaSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgZHluYW1pYyBldmVudCAke259IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gaX1pZihLbihuKSl7Y29uc3QgaT1yW25dO2lmKHR5cGVvZiBpIT0iZnVuY3Rpb24iKXRocm93IG5ldyBFcnJvcihgTWlzc2luZyBldmVudCAke259IG9uIHJlcXVlc3QgaGFuZGxlci5gKTtyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoYE1hbGZvcm1lZCBldmVudCBuYW1lICR7bn1gKX1nZXRDaGFubmVsKHQpe2lmKCF0aGlzLl9yZW1vdGVDaGFubmVscy5oYXModCkpe2NvbnN0IG49dGhpcy5fcHJvdG9jb2wuY3JlYXRlUHJveHlUb1JlbW90ZUNoYW5uZWwodCk7dGhpcy5fcmVtb3RlQ2hhbm5lbHMuc2V0KHQsbil9cmV0dXJuIHRoaXMuX3JlbW90ZUNoYW5uZWxzLmdldCh0KX1hc3luYyBpbml0aWFsaXplKHQsbixzKXtpZih0aGlzLl9wcm90b2NvbC5zZXRXb3JrZXJJZCh0KSx0aGlzLl9yZXF1ZXN0SGFuZGxlckZhY3Rvcnkpe3RoaXMuX3JlcXVlc3RIYW5kbGVyPXRoaXMuX3JlcXVlc3RIYW5kbGVyRmFjdG9yeSh0aGlzKTtyZXR1cm59cmV0dXJuIG4mJih0eXBlb2Ygbi5iYXNlVXJsPCJ1IiYmZGVsZXRlIG4uYmFzZVVybCx0eXBlb2Ygbi5wYXRoczwidSImJnR5cGVvZiBuLnBhdGhzLnZzPCJ1IiYmZGVsZXRlIG4ucGF0aHMudnMsdHlwZW9mIG4udHJ1c3RlZFR5cGVzUG9saWN5PCJ1IiYmZGVsZXRlIG4udHJ1c3RlZFR5cGVzUG9saWN5LG4uY2F0Y2hFcnJvcj0hMCxnbG9iYWxUaGlzLnJlcXVpcmUuY29uZmlnKG4pKSxpbXBvcnQoYCR7WW4uYXNCcm93c2VyVXJpKGAke3N9LmpzYCkudG9TdHJpbmcoITApfWApLnRoZW4oaT0+e2lmKHRoaXMuX3JlcXVlc3RIYW5kbGVyPWkuY3JlYXRlKHRoaXMpLCF0aGlzLl9yZXF1ZXN0SGFuZGxlcil0aHJvdyBuZXcgRXJyb3IoIk5vIFJlcXVlc3RIYW5kbGVyISIpfSl9fWNsYXNzIEFle2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMub3JpZ2luYWxTdGFydD10LHRoaXMub3JpZ2luYWxMZW5ndGg9bix0aGlzLm1vZGlmaWVkU3RhcnQ9cyx0aGlzLm1vZGlmaWVkTGVuZ3RoPXJ9Z2V0T3JpZ2luYWxFbmQoKXtyZXR1cm4gdGhpcy5vcmlnaW5hbFN0YXJ0K3RoaXMub3JpZ2luYWxMZW5ndGh9Z2V0TW9kaWZpZWRFbmQoKXtyZXR1cm4gdGhpcy5tb2RpZmllZFN0YXJ0K3RoaXMubW9kaWZpZWRMZW5ndGh9fWZ1bmN0aW9uIHRzKGUsdCl7cmV0dXJuKHQ8PDUpLXQrZXwwfWZ1bmN0aW9uIG5hKGUsdCl7dD10cygxNDk0MTcsdCk7Zm9yKGxldCBuPTAscz1lLmxlbmd0aDtuPHM7bisrKXQ9dHMoZS5jaGFyQ29kZUF0KG4pLHQpO3JldHVybiB0fWZ1bmN0aW9uIG9uKGUsdCxuPTMyKXtjb25zdCBzPW4tdCxyPX4oKDE8PHMpLTEpO3JldHVybihlPDx0fChyJmUpPj4+cyk+Pj4wfWZ1bmN0aW9uIG5zKGUsdD0wLG49ZS5ieXRlTGVuZ3RoLHM9MCl7Zm9yKGxldCByPTA7cjxuO3IrKyllW3Qrcl09c31mdW5jdGlvbiBzYShlLHQsbj0iMCIpe2Zvcig7ZS5sZW5ndGg8dDspZT1uK2U7cmV0dXJuIGV9ZnVuY3Rpb24gdHQoZSx0PTMyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP0FycmF5LmZyb20obmV3IFVpbnQ4QXJyYXkoZSkpLm1hcChuPT5uLnRvU3RyaW5nKDE2KS5wYWRTdGFydCgyLCIwIikpLmpvaW4oIiIpOnNhKChlPj4+MCkudG9TdHJpbmcoMTYpLHQvNCl9Y29uc3QgVHQ9Y2xhc3MgVHR7Y29uc3RydWN0b3IoKXt0aGlzLl9oMD0xNzMyNTg0MTkzLHRoaXMuX2gxPTQwMjMyMzM0MTcsdGhpcy5faDI9MjU2MjM4MzEwMix0aGlzLl9oMz0yNzE3MzM4NzgsdGhpcy5faDQ9MzI4NTM3NzUyMCx0aGlzLl9idWZmPW5ldyBVaW50OEFycmF5KDY3KSx0aGlzLl9idWZmRFY9bmV3IERhdGFWaWV3KHRoaXMuX2J1ZmYuYnVmZmVyKSx0aGlzLl9idWZmTGVuPTAsdGhpcy5fdG90YWxMZW49MCx0aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGU9MCx0aGlzLl9maW5pc2hlZD0hMX11cGRhdGUodCl7Y29uc3Qgbj10Lmxlbmd0aDtpZihuPT09MClyZXR1cm47Y29uc3Qgcz10aGlzLl9idWZmO2xldCByPXRoaXMuX2J1ZmZMZW4saT10aGlzLl9sZWZ0b3ZlckhpZ2hTdXJyb2dhdGUsbyxsO2ZvcihpIT09MD8obz1pLGw9LTEsaT0wKToobz10LmNoYXJDb2RlQXQoMCksbD0wKTs7KXtsZXQgdT1vO2lmKF90KG8pKWlmKGwrMTxuKXtjb25zdCBjPXQuY2hhckNvZGVBdChsKzEpO0t0KGMpPyhsKyssdT1IbihvLGMpKTp1PTY1NTMzfWVsc2V7aT1vO2JyZWFrfWVsc2UgS3QobykmJih1PTY1NTMzKTtpZihyPXRoaXMuX3B1c2gocyxyLHUpLGwrKyxsPG4pbz10LmNoYXJDb2RlQXQobCk7ZWxzZSBicmVha310aGlzLl9idWZmTGVuPXIsdGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlPWl9X3B1c2godCxuLHMpe3JldHVybiBzPDEyOD90W24rK109czpzPDIwNDg/KHRbbisrXT0xOTJ8KHMmMTk4NCk+Pj42LHRbbisrXT0xMjh8KHMmNjMpPj4+MCk6czw2NTUzNj8odFtuKytdPTIyNHwocyY2MTQ0MCk+Pj4xMix0W24rK109MTI4fChzJjQwMzIpPj4+Nix0W24rK109MTI4fChzJjYzKT4+PjApOih0W24rK109MjQwfChzJjE4MzUwMDgpPj4+MTgsdFtuKytdPTEyOHwocyYyNTgwNDgpPj4+MTIsdFtuKytdPTEyOHwocyY0MDMyKT4+PjYsdFtuKytdPTEyOHwocyY2Myk+Pj4wKSxuPj02NCYmKHRoaXMuX3N0ZXAoKSxuLT02NCx0aGlzLl90b3RhbExlbis9NjQsdFswXT10WzY0XSx0WzFdPXRbNjVdLHRbMl09dFs2Nl0pLG59ZGlnZXN0KCl7cmV0dXJuIHRoaXMuX2ZpbmlzaGVkfHwodGhpcy5fZmluaXNoZWQ9ITAsdGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlJiYodGhpcy5fbGVmdG92ZXJIaWdoU3Vycm9nYXRlPTAsdGhpcy5fYnVmZkxlbj10aGlzLl9wdXNoKHRoaXMuX2J1ZmYsdGhpcy5fYnVmZkxlbiw2NTUzMykpLHRoaXMuX3RvdGFsTGVuKz10aGlzLl9idWZmTGVuLHRoaXMuX3dyYXBVcCgpKSx0dCh0aGlzLl9oMCkrdHQodGhpcy5faDEpK3R0KHRoaXMuX2gyKSt0dCh0aGlzLl9oMykrdHQodGhpcy5faDQpfV93cmFwVXAoKXt0aGlzLl9idWZmW3RoaXMuX2J1ZmZMZW4rK109MTI4LG5zKHRoaXMuX2J1ZmYsdGhpcy5fYnVmZkxlbiksdGhpcy5fYnVmZkxlbj41NiYmKHRoaXMuX3N0ZXAoKSxucyh0aGlzLl9idWZmKSk7Y29uc3QgdD04KnRoaXMuX3RvdGFsTGVuO3RoaXMuX2J1ZmZEVi5zZXRVaW50MzIoNTYsTWF0aC5mbG9vcih0LzQyOTQ5NjcyOTYpLCExKSx0aGlzLl9idWZmRFYuc2V0VWludDMyKDYwLHQlNDI5NDk2NzI5NiwhMSksdGhpcy5fc3RlcCgpfV9zdGVwKCl7Y29uc3QgdD1UdC5fYmlnQmxvY2szMixuPXRoaXMuX2J1ZmZEVjtmb3IobGV0IGg9MDtoPDY0O2grPTQpdC5zZXRVaW50MzIoaCxuLmdldFVpbnQzMihoLCExKSwhMSk7Zm9yKGxldCBoPTY0O2g8MzIwO2grPTQpdC5zZXRVaW50MzIoaCxvbih0LmdldFVpbnQzMihoLTEyLCExKV50LmdldFVpbnQzMihoLTMyLCExKV50LmdldFVpbnQzMihoLTU2LCExKV50LmdldFVpbnQzMihoLTY0LCExKSwxKSwhMSk7bGV0IHM9dGhpcy5faDAscj10aGlzLl9oMSxpPXRoaXMuX2gyLG89dGhpcy5faDMsbD10aGlzLl9oNCx1LGMsZjtmb3IobGV0IGg9MDtoPDgwO2grKyloPDIwPyh1PXImaXx+ciZvLGM9MTUxODUwMDI0OSk6aDw0MD8odT1yXmlebyxjPTE4NTk3NzUzOTMpOmg8NjA/KHU9ciZpfHImb3xpJm8sYz0yNDAwOTU5NzA4KToodT1yXmlebyxjPTMzOTU0Njk3ODIpLGY9b24ocyw1KSt1K2wrYyt0LmdldFVpbnQzMihoKjQsITEpJjQyOTQ5NjcyOTUsbD1vLG89aSxpPW9uKHIsMzApLHI9cyxzPWY7dGhpcy5faDA9dGhpcy5faDArcyY0Mjk0OTY3Mjk1LHRoaXMuX2gxPXRoaXMuX2gxK3ImNDI5NDk2NzI5NSx0aGlzLl9oMj10aGlzLl9oMitpJjQyOTQ5NjcyOTUsdGhpcy5faDM9dGhpcy5faDMrbyY0Mjk0OTY3Mjk1LHRoaXMuX2g0PXRoaXMuX2g0K2wmNDI5NDk2NzI5NX19O1R0Ll9iaWdCbG9jazMyPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMzIwKSk7bGV0IHNzPVR0O2NsYXNzIHJze2NvbnN0cnVjdG9yKHQpe3RoaXMuc291cmNlPXR9Z2V0RWxlbWVudHMoKXtjb25zdCB0PXRoaXMuc291cmNlLG49bmV3IEludDMyQXJyYXkodC5sZW5ndGgpO2ZvcihsZXQgcz0wLHI9dC5sZW5ndGg7czxyO3MrKyluW3NdPXQuY2hhckNvZGVBdChzKTtyZXR1cm4gbn19ZnVuY3Rpb24gcmEoZSx0LG4pe3JldHVybiBuZXcgUmUobmV3IHJzKGUpLG5ldyBycyh0KSkuQ29tcHV0ZURpZmYobikuY2hhbmdlc31jbGFzcyBWZXtzdGF0aWMgQXNzZXJ0KHQsbil7aWYoIXQpdGhyb3cgbmV3IEVycm9yKG4pfX1jbGFzcyBJZXtzdGF0aWMgQ29weSh0LG4scyxyLGkpe2ZvcihsZXQgbz0wO288aTtvKyspc1tyK29dPXRbbitvXX1zdGF0aWMgQ29weTIodCxuLHMscixpKXtmb3IobGV0IG89MDtvPGk7bysrKXNbcitvXT10W24rb119fWNsYXNzIGlze2NvbnN0cnVjdG9yKCl7dGhpcy5tX2NoYW5nZXM9W10sdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0LHRoaXMubV9vcmlnaW5hbENvdW50PTAsdGhpcy5tX21vZGlmaWVkQ291bnQ9MH1NYXJrTmV4dENoYW5nZSgpeyh0aGlzLm1fb3JpZ2luYWxDb3VudD4wfHx0aGlzLm1fbW9kaWZpZWRDb3VudD4wKSYmdGhpcy5tX2NoYW5nZXMucHVzaChuZXcgQWUodGhpcy5tX29yaWdpbmFsU3RhcnQsdGhpcy5tX29yaWdpbmFsQ291bnQsdGhpcy5tX21vZGlmaWVkU3RhcnQsdGhpcy5tX21vZGlmaWVkQ291bnQpKSx0aGlzLm1fb3JpZ2luYWxDb3VudD0wLHRoaXMubV9tb2RpZmllZENvdW50PTAsdGhpcy5tX29yaWdpbmFsU3RhcnQ9MTA3Mzc0MTgyNCx0aGlzLm1fbW9kaWZpZWRTdGFydD0xMDczNzQxODI0fUFkZE9yaWdpbmFsRWxlbWVudCh0LG4pe3RoaXMubV9vcmlnaW5hbFN0YXJ0PU1hdGgubWluKHRoaXMubV9vcmlnaW5hbFN0YXJ0LHQpLHRoaXMubV9tb2RpZmllZFN0YXJ0PU1hdGgubWluKHRoaXMubV9tb2RpZmllZFN0YXJ0LG4pLHRoaXMubV9vcmlnaW5hbENvdW50Kyt9QWRkTW9kaWZpZWRFbGVtZW50KHQsbil7dGhpcy5tX29yaWdpbmFsU3RhcnQ9TWF0aC5taW4odGhpcy5tX29yaWdpbmFsU3RhcnQsdCksdGhpcy5tX21vZGlmaWVkU3RhcnQ9TWF0aC5taW4odGhpcy5tX21vZGlmaWVkU3RhcnQsbiksdGhpcy5tX21vZGlmaWVkQ291bnQrK31nZXRDaGFuZ2VzKCl7cmV0dXJuKHRoaXMubV9vcmlnaW5hbENvdW50PjB8fHRoaXMubV9tb2RpZmllZENvdW50PjApJiZ0aGlzLk1hcmtOZXh0Q2hhbmdlKCksdGhpcy5tX2NoYW5nZXN9Z2V0UmV2ZXJzZUNoYW5nZXMoKXtyZXR1cm4odGhpcy5tX29yaWdpbmFsQ291bnQ+MHx8dGhpcy5tX21vZGlmaWVkQ291bnQ+MCkmJnRoaXMuTWFya05leHRDaGFuZ2UoKSx0aGlzLm1fY2hhbmdlcy5yZXZlcnNlKCksdGhpcy5tX2NoYW5nZXN9fWNsYXNzIFJle2NvbnN0cnVjdG9yKHQsbixzPW51bGwpe3RoaXMuQ29udGludWVQcm9jZXNzaW5nUHJlZGljYXRlPXMsdGhpcy5fb3JpZ2luYWxTZXF1ZW5jZT10LHRoaXMuX21vZGlmaWVkU2VxdWVuY2U9bjtjb25zdFtyLGksb109UmUuX2dldEVsZW1lbnRzKHQpLFtsLHUsY109UmUuX2dldEVsZW1lbnRzKG4pO3RoaXMuX2hhc1N0cmluZ3M9byYmYyx0aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzPXIsdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaD1pLHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHM9bCx0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoPXUsdGhpcy5tX2ZvcndhcmRIaXN0b3J5PVtdLHRoaXMubV9yZXZlcnNlSGlzdG9yeT1bXX1zdGF0aWMgX2lzU3RyaW5nQXJyYXkodCl7cmV0dXJuIHQubGVuZ3RoPjAmJnR5cGVvZiB0WzBdPT0ic3RyaW5nIn1zdGF0aWMgX2dldEVsZW1lbnRzKHQpe2NvbnN0IG49dC5nZXRFbGVtZW50cygpO2lmKFJlLl9pc1N0cmluZ0FycmF5KG4pKXtjb25zdCBzPW5ldyBJbnQzMkFycmF5KG4ubGVuZ3RoKTtmb3IobGV0IHI9MCxpPW4ubGVuZ3RoO3I8aTtyKyspc1tyXT1uYShuW3JdLDApO3JldHVybltuLHMsITBdfXJldHVybiBuIGluc3RhbmNlb2YgSW50MzJBcnJheT9bW10sbiwhMV06W1tdLG5ldyBJbnQzMkFycmF5KG4pLCExXX1FbGVtZW50c0FyZUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbdF0hPT10aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoW25dPyExOnRoaXMuX2hhc1N0cmluZ3M/dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XT09PXRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbbl06ITB9RWxlbWVudHNBcmVTdHJpY3RFcXVhbCh0LG4pe2lmKCF0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCxuKSlyZXR1cm4hMTtjb25zdCBzPVJlLl9nZXRTdHJpY3RFbGVtZW50KHRoaXMuX29yaWdpbmFsU2VxdWVuY2UsdCkscj1SZS5fZ2V0U3RyaWN0RWxlbWVudCh0aGlzLl9tb2RpZmllZFNlcXVlbmNlLG4pO3JldHVybiBzPT09cn1zdGF0aWMgX2dldFN0cmljdEVsZW1lbnQodCxuKXtyZXR1cm4gdHlwZW9mIHQuZ2V0U3RyaWN0RWxlbWVudD09ImZ1bmN0aW9uIj90LmdldFN0cmljdEVsZW1lbnQobik6bnVsbH1PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX29yaWdpbmFsRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9vcmlnaW5hbFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1tuXTohMH1Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwodCxuKXtyZXR1cm4gdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaFt0XSE9PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2hbbl0/ITE6dGhpcy5faGFzU3RyaW5ncz90aGlzLl9tb2RpZmllZFN0cmluZ0VsZW1lbnRzW3RdPT09dGhpcy5fbW9kaWZpZWRTdHJpbmdFbGVtZW50c1tuXTohMH1Db21wdXRlRGlmZih0KXtyZXR1cm4gdGhpcy5fQ29tcHV0ZURpZmYoMCx0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aC0xLDAsdGhpcy5fbW9kaWZpZWRFbGVtZW50c09ySGFzaC5sZW5ndGgtMSx0KX1fQ29tcHV0ZURpZmYodCxuLHMscixpKXtjb25zdCBvPVshMV07bGV0IGw9dGhpcy5Db21wdXRlRGlmZlJlY3Vyc2l2ZSh0LG4scyxyLG8pO3JldHVybiBpJiYobD10aGlzLlByZXR0aWZ5Q2hhbmdlcyhsKSkse3F1aXRFYXJseTpvWzBdLGNoYW5nZXM6bH19Q29tcHV0ZURpZmZSZWN1cnNpdmUodCxuLHMscixpKXtmb3IoaVswXT0hMTt0PD1uJiZzPD1yJiZ0aGlzLkVsZW1lbnRzQXJlRXF1YWwodCxzKTspdCsrLHMrKztmb3IoO24+PXQmJnI+PXMmJnRoaXMuRWxlbWVudHNBcmVFcXVhbChuLHIpOyluLS0sci0tO2lmKHQ+bnx8cz5yKXtsZXQgaDtyZXR1cm4gczw9cj8oVmUuQXNzZXJ0KHQ9PT1uKzEsIm9yaWdpbmFsU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBvcmlnaW5hbEVuZCIpLGg9W25ldyBBZSh0LDAscyxyLXMrMSldKTp0PD1uPyhWZS5Bc3NlcnQocz09PXIrMSwibW9kaWZpZWRTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG1vZGlmaWVkRW5kIiksaD1bbmV3IEFlKHQsbi10KzEscywwKV0pOihWZS5Bc3NlcnQodD09PW4rMSwib3JpZ2luYWxTdGFydCBzaG91bGQgb25seSBiZSBvbmUgbW9yZSB0aGFuIG9yaWdpbmFsRW5kIiksVmUuQXNzZXJ0KHM9PT1yKzEsIm1vZGlmaWVkU3RhcnQgc2hvdWxkIG9ubHkgYmUgb25lIG1vcmUgdGhhbiBtb2RpZmllZEVuZCIpLGg9W10pLGh9Y29uc3Qgbz1bMF0sbD1bMF0sdT10aGlzLkNvbXB1dGVSZWN1cnNpb25Qb2ludCh0LG4scyxyLG8sbCxpKSxjPW9bMF0sZj1sWzBdO2lmKHUhPT1udWxsKXJldHVybiB1O2lmKCFpWzBdKXtjb25zdCBoPXRoaXMuQ29tcHV0ZURpZmZSZWN1cnNpdmUodCxjLHMsZixpKTtsZXQgZD1bXTtyZXR1cm4gaVswXT9kPVtuZXcgQWUoYysxLG4tKGMrMSkrMSxmKzEsci0oZisxKSsxKV06ZD10aGlzLkNvbXB1dGVEaWZmUmVjdXJzaXZlKGMrMSxuLGYrMSxyLGkpLHRoaXMuQ29uY2F0ZW5hdGVDaGFuZ2VzKGgsZCl9cmV0dXJuW25ldyBBZSh0LG4tdCsxLHMsci1zKzEpXX1XQUxLVFJBQ0UodCxuLHMscixpLG8sbCx1LGMsZixoLGQsbSxnLGIseCx2LFMpe2xldCBOPW51bGwscD1udWxsLF89bmV3IGlzLEw9bixBPXMseT1tWzBdLXhbMF0tcixCPS0xMDczNzQxODI0LFE9dGhpcy5tX2ZvcndhcmRIaXN0b3J5Lmxlbmd0aC0xO2Rve2NvbnN0IHE9eSt0O3E9PT1MfHxxPEEmJmNbcS0xXTxjW3ErMV0/KGg9Y1txKzFdLGc9aC15LXIsaDxCJiZfLk1hcmtOZXh0Q2hhbmdlKCksQj1oLF8uQWRkTW9kaWZpZWRFbGVtZW50KGgrMSxnKSx5PXErMS10KTooaD1jW3EtMV0rMSxnPWgteS1yLGg8QiYmXy5NYXJrTmV4dENoYW5nZSgpLEI9aC0xLF8uQWRkT3JpZ2luYWxFbGVtZW50KGgsZysxKSx5PXEtMS10KSxRPj0wJiYoYz10aGlzLm1fZm9yd2FyZEhpc3RvcnlbUV0sdD1jWzBdLEw9MSxBPWMubGVuZ3RoLTEpfXdoaWxlKC0tUT49LTEpO2lmKE49Xy5nZXRSZXZlcnNlQ2hhbmdlcygpLFNbMF0pe2xldCBxPW1bMF0rMSxGPXhbMF0rMTtpZihOIT09bnVsbCYmTi5sZW5ndGg+MCl7Y29uc3QgQz1OW04ubGVuZ3RoLTFdO3E9TWF0aC5tYXgocSxDLmdldE9yaWdpbmFsRW5kKCkpLEY9TWF0aC5tYXgoRixDLmdldE1vZGlmaWVkRW5kKCkpfXA9W25ldyBBZShxLGQtcSsxLEYsYi1GKzEpXX1lbHNle189bmV3IGlzLEw9byxBPWwseT1tWzBdLXhbMF0tdSxCPTEwNzM3NDE4MjQsUT12P3RoaXMubV9yZXZlcnNlSGlzdG9yeS5sZW5ndGgtMTp0aGlzLm1fcmV2ZXJzZUhpc3RvcnkubGVuZ3RoLTI7ZG97Y29uc3QgcT15K2k7cT09PUx8fHE8QSYmZltxLTFdPj1mW3ErMV0/KGg9ZltxKzFdLTEsZz1oLXktdSxoPkImJl8uTWFya05leHRDaGFuZ2UoKSxCPWgrMSxfLkFkZE9yaWdpbmFsRWxlbWVudChoKzEsZysxKSx5PXErMS1pKTooaD1mW3EtMV0sZz1oLXktdSxoPkImJl8uTWFya05leHRDaGFuZ2UoKSxCPWgsXy5BZGRNb2RpZmllZEVsZW1lbnQoaCsxLGcrMSkseT1xLTEtaSksUT49MCYmKGY9dGhpcy5tX3JldmVyc2VIaXN0b3J5W1FdLGk9ZlswXSxMPTEsQT1mLmxlbmd0aC0xKX13aGlsZSgtLVE+PS0xKTtwPV8uZ2V0Q2hhbmdlcygpfXJldHVybiB0aGlzLkNvbmNhdGVuYXRlQ2hhbmdlcyhOLHApfUNvbXB1dGVSZWN1cnNpb25Qb2ludCh0LG4scyxyLGksbyxsKXtsZXQgdT0wLGM9MCxmPTAsaD0wLGQ9MCxtPTA7dC0tLHMtLSxpWzBdPTAsb1swXT0wLHRoaXMubV9mb3J3YXJkSGlzdG9yeT1bXSx0aGlzLm1fcmV2ZXJzZUhpc3Rvcnk9W107Y29uc3QgZz1uLXQrKHItcyksYj1nKzEseD1uZXcgSW50MzJBcnJheShiKSx2PW5ldyBJbnQzMkFycmF5KGIpLFM9ci1zLE49bi10LHA9dC1zLF89bi1yLEE9KE4tUyklMj09PTA7eFtTXT10LHZbTl09bixsWzBdPSExO2ZvcihsZXQgeT0xO3k8PWcvMisxO3krKyl7bGV0IEI9MCxRPTA7Zj10aGlzLkNsaXBEaWFnb25hbEJvdW5kKFMteSx5LFMsYiksaD10aGlzLkNsaXBEaWFnb25hbEJvdW5kKFMreSx5LFMsYik7Zm9yKGxldCBGPWY7Rjw9aDtGKz0yKXtGPT09Znx8RjxoJiZ4W0YtMV08eFtGKzFdP3U9eFtGKzFdOnU9eFtGLTFdKzEsYz11LShGLVMpLXA7Y29uc3QgQz11O2Zvcig7dTxuJiZjPHImJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh1KzEsYysxKTspdSsrLGMrKztpZih4W0ZdPXUsdStjPkIrUSYmKEI9dSxRPWMpLCFBJiZNYXRoLmFicyhGLU4pPD15LTEmJnU+PXZbRl0pcmV0dXJuIGlbMF09dSxvWzBdPWMsQzw9dltGXSYmeTw9MTQ0OD90aGlzLldBTEtUUkFDRShTLGYsaCxwLE4sZCxtLF8seCx2LHUsbixpLGMscixvLEEsbCk6bnVsbH1jb25zdCBxPShCLXQrKFEtcykteSkvMjtpZih0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZSE9PW51bGwmJiF0aGlzLkNvbnRpbnVlUHJvY2Vzc2luZ1ByZWRpY2F0ZShCLHEpKXJldHVybiBsWzBdPSEwLGlbMF09QixvWzBdPVEscT4wJiZ5PD0xNDQ4P3RoaXMuV0FMS1RSQUNFKFMsZixoLHAsTixkLG0sXyx4LHYsdSxuLGksYyxyLG8sQSxsKToodCsrLHMrKyxbbmV3IEFlKHQsbi10KzEscyxyLXMrMSldKTtkPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoTi15LHksTixiKSxtPXRoaXMuQ2xpcERpYWdvbmFsQm91bmQoTit5LHksTixiKTtmb3IobGV0IEY9ZDtGPD1tO0YrPTIpe0Y9PT1kfHxGPG0mJnZbRi0xXT49dltGKzFdP3U9dltGKzFdLTE6dT12W0YtMV0sYz11LShGLU4pLV87Y29uc3QgQz11O2Zvcig7dT50JiZjPnMmJnRoaXMuRWxlbWVudHNBcmVFcXVhbCh1LGMpOyl1LS0sYy0tO2lmKHZbRl09dSxBJiZNYXRoLmFicyhGLVMpPD15JiZ1PD14W0ZdKXJldHVybiBpWzBdPXUsb1swXT1jLEM+PXhbRl0mJnk8PTE0NDg/dGhpcy5XQUxLVFJBQ0UoUyxmLGgscCxOLGQsbSxfLHgsdix1LG4saSxjLHIsbyxBLGwpOm51bGx9aWYoeTw9MTQ0Nyl7bGV0IEY9bmV3IEludDMyQXJyYXkoaC1mKzIpO0ZbMF09Uy1mKzEsSWUuQ29weTIoeCxmLEYsMSxoLWYrMSksdGhpcy5tX2ZvcndhcmRIaXN0b3J5LnB1c2goRiksRj1uZXcgSW50MzJBcnJheShtLWQrMiksRlswXT1OLWQrMSxJZS5Db3B5Mih2LGQsRiwxLG0tZCsxKSx0aGlzLm1fcmV2ZXJzZUhpc3RvcnkucHVzaChGKX19cmV0dXJuIHRoaXMuV0FMS1RSQUNFKFMsZixoLHAsTixkLG0sXyx4LHYsdSxuLGksYyxyLG8sQSxsKX1QcmV0dGlmeUNoYW5nZXModCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHM9dFtuXSxyPW48dC5sZW5ndGgtMT90W24rMV0ub3JpZ2luYWxTdGFydDp0aGlzLl9vcmlnaW5hbEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxpPW48dC5sZW5ndGgtMT90W24rMV0ubW9kaWZpZWRTdGFydDp0aGlzLl9tb2RpZmllZEVsZW1lbnRzT3JIYXNoLmxlbmd0aCxvPXMub3JpZ2luYWxMZW5ndGg+MCxsPXMubW9kaWZpZWRMZW5ndGg+MDtmb3IoO3Mub3JpZ2luYWxTdGFydCtzLm9yaWdpbmFsTGVuZ3RoPHImJnMubW9kaWZpZWRTdGFydCtzLm1vZGlmaWVkTGVuZ3RoPGkmJighb3x8dGhpcy5PcmlnaW5hbEVsZW1lbnRzQXJlRXF1YWwocy5vcmlnaW5hbFN0YXJ0LHMub3JpZ2luYWxTdGFydCtzLm9yaWdpbmFsTGVuZ3RoKSkmJighbHx8dGhpcy5Nb2RpZmllZEVsZW1lbnRzQXJlRXF1YWwocy5tb2RpZmllZFN0YXJ0LHMubW9kaWZpZWRTdGFydCtzLm1vZGlmaWVkTGVuZ3RoKSk7KXtjb25zdCBjPXRoaXMuRWxlbWVudHNBcmVTdHJpY3RFcXVhbChzLm9yaWdpbmFsU3RhcnQscy5tb2RpZmllZFN0YXJ0KTtpZih0aGlzLkVsZW1lbnRzQXJlU3RyaWN0RXF1YWwocy5vcmlnaW5hbFN0YXJ0K3Mub3JpZ2luYWxMZW5ndGgscy5tb2RpZmllZFN0YXJ0K3MubW9kaWZpZWRMZW5ndGgpJiYhYylicmVhaztzLm9yaWdpbmFsU3RhcnQrKyxzLm1vZGlmaWVkU3RhcnQrK31jb25zdCB1PVtudWxsXTtpZihuPHQubGVuZ3RoLTEmJnRoaXMuQ2hhbmdlc092ZXJsYXAodFtuXSx0W24rMV0sdSkpe3Rbbl09dVswXSx0LnNwbGljZShuKzEsMSksbi0tO2NvbnRpbnVlfX1mb3IobGV0IG49dC5sZW5ndGgtMTtuPj0wO24tLSl7Y29uc3Qgcz10W25dO2xldCByPTAsaT0wO2lmKG4+MCl7Y29uc3QgaD10W24tMV07cj1oLm9yaWdpbmFsU3RhcnQraC5vcmlnaW5hbExlbmd0aCxpPWgubW9kaWZpZWRTdGFydCtoLm1vZGlmaWVkTGVuZ3RofWNvbnN0IG89cy5vcmlnaW5hbExlbmd0aD4wLGw9cy5tb2RpZmllZExlbmd0aD4wO2xldCB1PTAsYz10aGlzLl9ib3VuZGFyeVNjb3JlKHMub3JpZ2luYWxTdGFydCxzLm9yaWdpbmFsTGVuZ3RoLHMubW9kaWZpZWRTdGFydCxzLm1vZGlmaWVkTGVuZ3RoKTtmb3IobGV0IGg9MTs7aCsrKXtjb25zdCBkPXMub3JpZ2luYWxTdGFydC1oLG09cy5tb2RpZmllZFN0YXJ0LWg7aWYoZDxyfHxtPGl8fG8mJiF0aGlzLk9yaWdpbmFsRWxlbWVudHNBcmVFcXVhbChkLGQrcy5vcmlnaW5hbExlbmd0aCl8fGwmJiF0aGlzLk1vZGlmaWVkRWxlbWVudHNBcmVFcXVhbChtLG0rcy5tb2RpZmllZExlbmd0aCkpYnJlYWs7Y29uc3QgYj0oZD09PXImJm09PT1pPzU6MCkrdGhpcy5fYm91bmRhcnlTY29yZShkLHMub3JpZ2luYWxMZW5ndGgsbSxzLm1vZGlmaWVkTGVuZ3RoKTtiPmMmJihjPWIsdT1oKX1zLm9yaWdpbmFsU3RhcnQtPXUscy5tb2RpZmllZFN0YXJ0LT11O2NvbnN0IGY9W251bGxdO2lmKG4+MCYmdGhpcy5DaGFuZ2VzT3ZlcmxhcCh0W24tMV0sdFtuXSxmKSl7dFtuLTFdPWZbMF0sdC5zcGxpY2UobiwxKSxuKys7Y29udGludWV9fWlmKHRoaXMuX2hhc1N0cmluZ3MpZm9yKGxldCBuPTEscz10Lmxlbmd0aDtuPHM7bisrKXtjb25zdCByPXRbbi0xXSxpPXRbbl0sbz1pLm9yaWdpbmFsU3RhcnQtci5vcmlnaW5hbFN0YXJ0LXIub3JpZ2luYWxMZW5ndGgsbD1yLm9yaWdpbmFsU3RhcnQsdT1pLm9yaWdpbmFsU3RhcnQraS5vcmlnaW5hbExlbmd0aCxjPXUtbCxmPXIubW9kaWZpZWRTdGFydCxoPWkubW9kaWZpZWRTdGFydCtpLm1vZGlmaWVkTGVuZ3RoLGQ9aC1mO2lmKG88NSYmYzwyMCYmZDwyMCl7Y29uc3QgbT10aGlzLl9maW5kQmV0dGVyQ29udGlndW91c1NlcXVlbmNlKGwsYyxmLGQsbyk7aWYobSl7Y29uc3RbZyxiXT1tOyhnIT09ci5vcmlnaW5hbFN0YXJ0K3Iub3JpZ2luYWxMZW5ndGh8fGIhPT1yLm1vZGlmaWVkU3RhcnQrci5tb2RpZmllZExlbmd0aCkmJihyLm9yaWdpbmFsTGVuZ3RoPWctci5vcmlnaW5hbFN0YXJ0LHIubW9kaWZpZWRMZW5ndGg9Yi1yLm1vZGlmaWVkU3RhcnQsaS5vcmlnaW5hbFN0YXJ0PWcrbyxpLm1vZGlmaWVkU3RhcnQ9YitvLGkub3JpZ2luYWxMZW5ndGg9dS1pLm9yaWdpbmFsU3RhcnQsaS5tb2RpZmllZExlbmd0aD1oLWkubW9kaWZpZWRTdGFydCl9fX1yZXR1cm4gdH1fZmluZEJldHRlckNvbnRpZ3VvdXNTZXF1ZW5jZSh0LG4scyxyLGkpe2lmKG48aXx8cjxpKXJldHVybiBudWxsO2NvbnN0IG89dCtuLWkrMSxsPXMrci1pKzE7bGV0IHU9MCxjPTAsZj0wO2ZvcihsZXQgaD10O2g8bztoKyspZm9yKGxldCBkPXM7ZDxsO2QrKyl7Y29uc3QgbT10aGlzLl9jb250aWd1b3VzU2VxdWVuY2VTY29yZShoLGQsaSk7bT4wJiZtPnUmJih1PW0sYz1oLGY9ZCl9cmV0dXJuIHU+MD9bYyxmXTpudWxsfV9jb250aWd1b3VzU2VxdWVuY2VTY29yZSh0LG4scyl7bGV0IHI9MDtmb3IobGV0IGk9MDtpPHM7aSsrKXtpZighdGhpcy5FbGVtZW50c0FyZUVxdWFsKHQraSxuK2kpKXJldHVybiAwO3IrPXRoaXMuX29yaWdpbmFsU3RyaW5nRWxlbWVudHNbdCtpXS5sZW5ndGh9cmV0dXJuIHJ9X09yaWdpbmFsSXNCb3VuZGFyeSh0KXtyZXR1cm4gdDw9MHx8dD49dGhpcy5fb3JpZ2luYWxFbGVtZW50c09ySGFzaC5sZW5ndGgtMT8hMDp0aGlzLl9oYXNTdHJpbmdzJiYvXlxzKiQvLnRlc3QodGhpcy5fb3JpZ2luYWxTdHJpbmdFbGVtZW50c1t0XSl9X09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeSh0LG4pe2lmKHRoaXMuX09yaWdpbmFsSXNCb3VuZGFyeSh0KXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHQtMSkpcmV0dXJuITA7aWYobj4wKXtjb25zdCBzPXQrbjtpZih0aGlzLl9PcmlnaW5hbElzQm91bmRhcnkocy0xKXx8dGhpcy5fT3JpZ2luYWxJc0JvdW5kYXJ5KHMpKXJldHVybiEwfXJldHVybiExfV9Nb2RpZmllZElzQm91bmRhcnkodCl7cmV0dXJuIHQ8PTB8fHQ+PXRoaXMuX21vZGlmaWVkRWxlbWVudHNPckhhc2gubGVuZ3RoLTE/ITA6dGhpcy5faGFzU3RyaW5ncyYmL15ccyokLy50ZXN0KHRoaXMuX21vZGlmaWVkU3RyaW5nRWxlbWVudHNbdF0pfV9Nb2RpZmllZFJlZ2lvbklzQm91bmRhcnkodCxuKXtpZih0aGlzLl9Nb2RpZmllZElzQm91bmRhcnkodCl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeSh0LTEpKXJldHVybiEwO2lmKG4+MCl7Y29uc3Qgcz10K247aWYodGhpcy5fTW9kaWZpZWRJc0JvdW5kYXJ5KHMtMSl8fHRoaXMuX01vZGlmaWVkSXNCb3VuZGFyeShzKSlyZXR1cm4hMH1yZXR1cm4hMX1fYm91bmRhcnlTY29yZSh0LG4scyxyKXtjb25zdCBpPXRoaXMuX09yaWdpbmFsUmVnaW9uSXNCb3VuZGFyeSh0LG4pPzE6MCxvPXRoaXMuX01vZGlmaWVkUmVnaW9uSXNCb3VuZGFyeShzLHIpPzE6MDtyZXR1cm4gaStvfUNvbmNhdGVuYXRlQ2hhbmdlcyh0LG4pe2NvbnN0IHM9W107aWYodC5sZW5ndGg9PT0wfHxuLmxlbmd0aD09PTApcmV0dXJuIG4ubGVuZ3RoPjA/bjp0O2lmKHRoaXMuQ2hhbmdlc092ZXJsYXAodFt0Lmxlbmd0aC0xXSxuWzBdLHMpKXtjb25zdCByPW5ldyBBcnJheSh0Lmxlbmd0aCtuLmxlbmd0aC0xKTtyZXR1cm4gSWUuQ29weSh0LDAsciwwLHQubGVuZ3RoLTEpLHJbdC5sZW5ndGgtMV09c1swXSxJZS5Db3B5KG4sMSxyLHQubGVuZ3RoLG4ubGVuZ3RoLTEpLHJ9ZWxzZXtjb25zdCByPW5ldyBBcnJheSh0Lmxlbmd0aCtuLmxlbmd0aCk7cmV0dXJuIEllLkNvcHkodCwwLHIsMCx0Lmxlbmd0aCksSWUuQ29weShuLDAscix0Lmxlbmd0aCxuLmxlbmd0aCkscn19Q2hhbmdlc092ZXJsYXAodCxuLHMpe2lmKFZlLkFzc2VydCh0Lm9yaWdpbmFsU3RhcnQ8PW4ub3JpZ2luYWxTdGFydCwiTGVmdCBjaGFuZ2UgaXMgbm90IGxlc3MgdGhhbiBvciBlcXVhbCB0byByaWdodCBjaGFuZ2UiKSxWZS5Bc3NlcnQodC5tb2RpZmllZFN0YXJ0PD1uLm1vZGlmaWVkU3RhcnQsIkxlZnQgY2hhbmdlIGlzIG5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gcmlnaHQgY2hhbmdlIiksdC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGg+PW4ub3JpZ2luYWxTdGFydHx8dC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGg+PW4ubW9kaWZpZWRTdGFydCl7Y29uc3Qgcj10Lm9yaWdpbmFsU3RhcnQ7bGV0IGk9dC5vcmlnaW5hbExlbmd0aDtjb25zdCBvPXQubW9kaWZpZWRTdGFydDtsZXQgbD10Lm1vZGlmaWVkTGVuZ3RoO3JldHVybiB0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aD49bi5vcmlnaW5hbFN0YXJ0JiYoaT1uLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC10Lm9yaWdpbmFsU3RhcnQpLHQubW9kaWZpZWRTdGFydCt0Lm1vZGlmaWVkTGVuZ3RoPj1uLm1vZGlmaWVkU3RhcnQmJihsPW4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLXQubW9kaWZpZWRTdGFydCksc1swXT1uZXcgQWUocixpLG8sbCksITB9ZWxzZSByZXR1cm4gc1swXT1udWxsLCExfUNsaXBEaWFnb25hbEJvdW5kKHQsbixzLHIpe2lmKHQ+PTAmJnQ8cilyZXR1cm4gdDtjb25zdCBpPXMsbz1yLXMtMSxsPW4lMj09PTA7aWYodDwwKXtjb25zdCB1PWklMj09PTA7cmV0dXJuIGw9PT11PzA6MX1lbHNle2NvbnN0IHU9byUyPT09MDtyZXR1cm4gbD09PXU/ci0xOnItMn19fWNsYXNzIFV7Y29uc3RydWN0b3IodCxuKXt0aGlzLmxpbmVOdW1iZXI9dCx0aGlzLmNvbHVtbj1ufXdpdGgodD10aGlzLmxpbmVOdW1iZXIsbj10aGlzLmNvbHVtbil7cmV0dXJuIHQ9PT10aGlzLmxpbmVOdW1iZXImJm49PT10aGlzLmNvbHVtbj90aGlzOm5ldyBVKHQsbil9ZGVsdGEodD0wLG49MCl7cmV0dXJuIHRoaXMud2l0aCh0aGlzLmxpbmVOdW1iZXIrdCx0aGlzLmNvbHVtbituKX1lcXVhbHModCl7cmV0dXJuIFUuZXF1YWxzKHRoaXMsdCl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiF0JiYhbj8hMDohIXQmJiEhbiYmdC5saW5lTnVtYmVyPT09bi5saW5lTnVtYmVyJiZ0LmNvbHVtbj09PW4uY29sdW1ufWlzQmVmb3JlKHQpe3JldHVybiBVLmlzQmVmb3JlKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlKHQsbil7cmV0dXJuIHQubGluZU51bWJlcjxuLmxpbmVOdW1iZXI/ITA6bi5saW5lTnVtYmVyPHQubGluZU51bWJlcj8hMTp0LmNvbHVtbjxuLmNvbHVtbn1pc0JlZm9yZU9yRXF1YWwodCl7cmV0dXJuIFUuaXNCZWZvcmVPckVxdWFsKHRoaXMsdCl9c3RhdGljIGlzQmVmb3JlT3JFcXVhbCh0LG4pe3JldHVybiB0LmxpbmVOdW1iZXI8bi5saW5lTnVtYmVyPyEwOm4ubGluZU51bWJlcjx0LmxpbmVOdW1iZXI/ITE6dC5jb2x1bW48PW4uY29sdW1ufXN0YXRpYyBjb21wYXJlKHQsbil7Y29uc3Qgcz10LmxpbmVOdW1iZXJ8MCxyPW4ubGluZU51bWJlcnwwO2lmKHM9PT1yKXtjb25zdCBpPXQuY29sdW1ufDAsbz1uLmNvbHVtbnwwO3JldHVybiBpLW99cmV0dXJuIHMtcn1jbG9uZSgpe3JldHVybiBuZXcgVSh0aGlzLmxpbmVOdW1iZXIsdGhpcy5jb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIigiK3RoaXMubGluZU51bWJlcisiLCIrdGhpcy5jb2x1bW4rIikifXN0YXRpYyBsaWZ0KHQpe3JldHVybiBuZXcgVSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4pfXN0YXRpYyBpc0lQb3NpdGlvbih0KXtyZXR1cm4gdCYmdHlwZW9mIHQubGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmNvbHVtbj09Im51bWJlciJ9dG9KU09OKCl7cmV0dXJue2xpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbjp0aGlzLmNvbHVtbn19fWNsYXNzIGt7Y29uc3RydWN0b3IodCxuLHMscil7dD5zfHx0PT09cyYmbj5yPyh0aGlzLnN0YXJ0TGluZU51bWJlcj1zLHRoaXMuc3RhcnRDb2x1bW49cix0aGlzLmVuZExpbmVOdW1iZXI9dCx0aGlzLmVuZENvbHVtbj1uKToodGhpcy5zdGFydExpbmVOdW1iZXI9dCx0aGlzLnN0YXJ0Q29sdW1uPW4sdGhpcy5lbmRMaW5lTnVtYmVyPXMsdGhpcy5lbmRDb2x1bW49cil9aXNFbXB0eSgpe3JldHVybiBrLmlzRW1wdHkodGhpcyl9c3RhdGljIGlzRW1wdHkodCl7cmV0dXJuIHQuc3RhcnRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZ0LnN0YXJ0Q29sdW1uPT09dC5lbmRDb2x1bW59Y29udGFpbnNQb3NpdGlvbih0KXtyZXR1cm4gay5jb250YWluc1Bvc2l0aW9uKHRoaXMsdCl9c3RhdGljIGNvbnRhaW5zUG9zaXRpb24odCxuKXtyZXR1cm4hKG4ubGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5saW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5saW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uY29sdW1uPHQuc3RhcnRDb2x1bW58fG4ubGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlciYmbi5jb2x1bW4+dC5lbmRDb2x1bW4pfXN0YXRpYyBzdHJpY3RDb250YWluc1Bvc2l0aW9uKHQsbil7cmV0dXJuIShuLmxpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4ubGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmNvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5saW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmNvbHVtbj49dC5lbmRDb2x1bW4pfWNvbnRhaW5zUmFuZ2UodCl7cmV0dXJuIGsuY29udGFpbnNSYW5nZSh0aGlzLHQpfXN0YXRpYyBjb250YWluc1JhbmdlKHQsbil7cmV0dXJuIShuLnN0YXJ0TGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLnN0YXJ0TGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj50LmVuZExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uc3RhcnRDb2x1bW48dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj50LmVuZENvbHVtbil9c3RyaWN0Q29udGFpbnNSYW5nZSh0KXtyZXR1cm4gay5zdHJpY3RDb250YWluc1JhbmdlKHRoaXMsdCl9c3RhdGljIHN0cmljdENvbnRhaW5zUmFuZ2UodCxuKXtyZXR1cm4hKG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyfHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uc3RhcnRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcnx8bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlciYmbi5zdGFydENvbHVtbjw9dC5zdGFydENvbHVtbnx8bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbj49dC5lbmRDb2x1bW4pfXBsdXNSYW5nZSh0KXtyZXR1cm4gay5wbHVzUmFuZ2UodGhpcyx0KX1zdGF0aWMgcGx1c1JhbmdlKHQsbil7bGV0IHMscixpLG87cmV0dXJuIG4uc3RhcnRMaW5lTnVtYmVyPHQuc3RhcnRMaW5lTnVtYmVyPyhzPW4uc3RhcnRMaW5lTnVtYmVyLHI9bi5zdGFydENvbHVtbik6bi5zdGFydExpbmVOdW1iZXI9PT10LnN0YXJ0TGluZU51bWJlcj8ocz1uLnN0YXJ0TGluZU51bWJlcixyPU1hdGgubWluKG4uc3RhcnRDb2x1bW4sdC5zdGFydENvbHVtbikpOihzPXQuc3RhcnRMaW5lTnVtYmVyLHI9dC5zdGFydENvbHVtbiksbi5lbmRMaW5lTnVtYmVyPnQuZW5kTGluZU51bWJlcj8oaT1uLmVuZExpbmVOdW1iZXIsbz1uLmVuZENvbHVtbik6bi5lbmRMaW5lTnVtYmVyPT09dC5lbmRMaW5lTnVtYmVyPyhpPW4uZW5kTGluZU51bWJlcixvPU1hdGgubWF4KG4uZW5kQ29sdW1uLHQuZW5kQ29sdW1uKSk6KGk9dC5lbmRMaW5lTnVtYmVyLG89dC5lbmRDb2x1bW4pLG5ldyBrKHMscixpLG8pfWludGVyc2VjdFJhbmdlcyh0KXtyZXR1cm4gay5pbnRlcnNlY3RSYW5nZXModGhpcyx0KX1zdGF0aWMgaW50ZXJzZWN0UmFuZ2VzKHQsbil7bGV0IHM9dC5zdGFydExpbmVOdW1iZXIscj10LnN0YXJ0Q29sdW1uLGk9dC5lbmRMaW5lTnVtYmVyLG89dC5lbmRDb2x1bW47Y29uc3QgbD1uLnN0YXJ0TGluZU51bWJlcix1PW4uc3RhcnRDb2x1bW4sYz1uLmVuZExpbmVOdW1iZXIsZj1uLmVuZENvbHVtbjtyZXR1cm4gczxsPyhzPWwscj11KTpzPT09bCYmKHI9TWF0aC5tYXgocix1KSksaT5jPyhpPWMsbz1mKTppPT09YyYmKG89TWF0aC5taW4obyxmKSkscz5pfHxzPT09aSYmcj5vP251bGw6bmV3IGsocyxyLGksbyl9ZXF1YWxzUmFuZ2UodCl7cmV0dXJuIGsuZXF1YWxzUmFuZ2UodGhpcyx0KX1zdGF0aWMgZXF1YWxzUmFuZ2UodCxuKXtyZXR1cm4hdCYmIW4/ITA6ISF0JiYhIW4mJnQuc3RhcnRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuc3RhcnRDb2x1bW49PT1uLnN0YXJ0Q29sdW1uJiZ0LmVuZExpbmVOdW1iZXI9PT1uLmVuZExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW59Z2V0RW5kUG9zaXRpb24oKXtyZXR1cm4gay5nZXRFbmRQb3NpdGlvbih0aGlzKX1zdGF0aWMgZ2V0RW5kUG9zaXRpb24odCl7cmV0dXJuIG5ldyBVKHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9Z2V0U3RhcnRQb3NpdGlvbigpe3JldHVybiBrLmdldFN0YXJ0UG9zaXRpb24odGhpcyl9c3RhdGljIGdldFN0YXJ0UG9zaXRpb24odCl7cmV0dXJuIG5ldyBVKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuc3RhcnRMaW5lTnVtYmVyKyIsIit0aGlzLnN0YXJ0Q29sdW1uKyIgLT4gIit0aGlzLmVuZExpbmVOdW1iZXIrIiwiK3RoaXMuZW5kQ29sdW1uKyJdIn1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgayh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLnN0YXJ0Q29sdW1uLHQsbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiBuZXcgayh0LG4sdGhpcy5lbmRMaW5lTnVtYmVyLHRoaXMuZW5kQ29sdW1uKX1jb2xsYXBzZVRvU3RhcnQoKXtyZXR1cm4gay5jb2xsYXBzZVRvU3RhcnQodGhpcyl9c3RhdGljIGNvbGxhcHNlVG9TdGFydCh0KXtyZXR1cm4gbmV3IGsodC5zdGFydExpbmVOdW1iZXIsdC5zdGFydENvbHVtbix0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uKX1jb2xsYXBzZVRvRW5kKCl7cmV0dXJuIGsuY29sbGFwc2VUb0VuZCh0aGlzKX1zdGF0aWMgY29sbGFwc2VUb0VuZCh0KXtyZXR1cm4gbmV3IGsodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbil9ZGVsdGEodCl7cmV0dXJuIG5ldyBrKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5zdGFydENvbHVtbix0aGlzLmVuZExpbmVOdW1iZXIrdCx0aGlzLmVuZENvbHVtbil9c3RhdGljIGZyb21Qb3NpdGlvbnModCxuPXQpe3JldHVybiBuZXcgayh0LmxpbmVOdW1iZXIsdC5jb2x1bW4sbi5saW5lTnVtYmVyLG4uY29sdW1uKX1zdGF0aWMgbGlmdCh0KXtyZXR1cm4gdD9uZXcgayh0LnN0YXJ0TGluZU51bWJlcix0LnN0YXJ0Q29sdW1uLHQuZW5kTGluZU51bWJlcix0LmVuZENvbHVtbik6bnVsbH1zdGF0aWMgaXNJUmFuZ2UodCl7cmV0dXJuIHQmJnR5cGVvZiB0LnN0YXJ0TGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnN0YXJ0Q29sdW1uPT0ibnVtYmVyIiYmdHlwZW9mIHQuZW5kTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LmVuZENvbHVtbj09Im51bWJlciJ9c3RhdGljIGFyZUludGVyc2VjdGluZ09yVG91Y2hpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPG4uc3RhcnRDb2x1bW58fG4uZW5kTGluZU51bWJlcjx0LnN0YXJ0TGluZU51bWJlcnx8bi5lbmRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJm4uZW5kQ29sdW1uPHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBhcmVJbnRlcnNlY3RpbmcodCxuKXtyZXR1cm4hKHQuZW5kTGluZU51bWJlcjxuLnN0YXJ0TGluZU51bWJlcnx8dC5lbmRMaW5lTnVtYmVyPT09bi5zdGFydExpbmVOdW1iZXImJnQuZW5kQ29sdW1uPD1uLnN0YXJ0Q29sdW1ufHxuLmVuZExpbmVOdW1iZXI8dC5zdGFydExpbmVOdW1iZXJ8fG4uZW5kTGluZU51bWJlcj09PXQuc3RhcnRMaW5lTnVtYmVyJiZuLmVuZENvbHVtbjw9dC5zdGFydENvbHVtbil9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ1N0YXJ0cyh0LG4pe2lmKHQmJm4pe2NvbnN0IGk9dC5zdGFydExpbmVOdW1iZXJ8MCxvPW4uc3RhcnRMaW5lTnVtYmVyfDA7aWYoaT09PW8pe2NvbnN0IGw9dC5zdGFydENvbHVtbnwwLHU9bi5zdGFydENvbHVtbnwwO2lmKGw9PT11KXtjb25zdCBjPXQuZW5kTGluZU51bWJlcnwwLGY9bi5lbmRMaW5lTnVtYmVyfDA7aWYoYz09PWYpe2NvbnN0IGg9dC5lbmRDb2x1bW58MCxkPW4uZW5kQ29sdW1ufDA7cmV0dXJuIGgtZH1yZXR1cm4gYy1mfXJldHVybiBsLXV9cmV0dXJuIGktb31yZXR1cm4odD8xOjApLShuPzE6MCl9c3RhdGljIGNvbXBhcmVSYW5nZXNVc2luZ0VuZHModCxuKXtyZXR1cm4gdC5lbmRMaW5lTnVtYmVyPT09bi5lbmRMaW5lTnVtYmVyP3QuZW5kQ29sdW1uPT09bi5lbmRDb2x1bW4/dC5zdGFydExpbmVOdW1iZXI9PT1uLnN0YXJ0TGluZU51bWJlcj90LnN0YXJ0Q29sdW1uLW4uc3RhcnRDb2x1bW46dC5zdGFydExpbmVOdW1iZXItbi5zdGFydExpbmVOdW1iZXI6dC5lbmRDb2x1bW4tbi5lbmRDb2x1bW46dC5lbmRMaW5lTnVtYmVyLW4uZW5kTGluZU51bWJlcn1zdGF0aWMgc3BhbnNNdWx0aXBsZUxpbmVzKHQpe3JldHVybiB0LmVuZExpbmVOdW1iZXI+dC5zdGFydExpbmVOdW1iZXJ9dG9KU09OKCl7cmV0dXJuIHRoaXN9fWZ1bmN0aW9uIGFzKGUpe3JldHVybiBlPDA/MDplPjI1NT8yNTU6ZXwwfWZ1bmN0aW9uIEJlKGUpe3JldHVybiBlPDA/MDplPjQyOTQ5NjcyOTU/NDI5NDk2NzI5NTplfDB9Y2xhc3MgbG57Y29uc3RydWN0b3IodCl7Y29uc3Qgbj1hcyh0KTt0aGlzLl9kZWZhdWx0VmFsdWU9bix0aGlzLl9hc2NpaU1hcD1sbi5fY3JlYXRlQXNjaWlNYXAobiksdGhpcy5fbWFwPW5ldyBNYXB9c3RhdGljIF9jcmVhdGVBc2NpaU1hcCh0KXtjb25zdCBuPW5ldyBVaW50OEFycmF5KDI1Nik7cmV0dXJuIG4uZmlsbCh0KSxufXNldCh0LG4pe2NvbnN0IHM9YXMobik7dD49MCYmdDwyNTY/dGhpcy5fYXNjaWlNYXBbdF09czp0aGlzLl9tYXAuc2V0KHQscyl9Z2V0KHQpe3JldHVybiB0Pj0wJiZ0PDI1Nj90aGlzLl9hc2NpaU1hcFt0XTp0aGlzLl9tYXAuZ2V0KHQpfHx0aGlzLl9kZWZhdWx0VmFsdWV9Y2xlYXIoKXt0aGlzLl9hc2NpaU1hcC5maWxsKHRoaXMuX2RlZmF1bHRWYWx1ZSksdGhpcy5fbWFwLmNsZWFyKCl9fWNsYXNzIGlhe2NvbnN0cnVjdG9yKHQsbixzKXtjb25zdCByPW5ldyBVaW50OEFycmF5KHQqbik7Zm9yKGxldCBpPTAsbz10Km47aTxvO2krKylyW2ldPXM7dGhpcy5fZGF0YT1yLHRoaXMucm93cz10LHRoaXMuY29scz1ufWdldCh0LG4pe3JldHVybiB0aGlzLl9kYXRhW3QqdGhpcy5jb2xzK25dfXNldCh0LG4scyl7dGhpcy5fZGF0YVt0KnRoaXMuY29scytuXT1zfX1jbGFzcyBhYXtjb25zdHJ1Y3Rvcih0KXtsZXQgbj0wLHM9MDtmb3IobGV0IGk9MCxvPXQubGVuZ3RoO2k8bztpKyspe2NvbnN0W2wsdSxjXT10W2ldO3U+biYmKG49dSksbD5zJiYocz1sKSxjPnMmJihzPWMpfW4rKyxzKys7Y29uc3Qgcj1uZXcgaWEocyxuLDApO2ZvcihsZXQgaT0wLG89dC5sZW5ndGg7aTxvO2krKyl7Y29uc3RbbCx1LGNdPXRbaV07ci5zZXQobCx1LGMpfXRoaXMuX3N0YXRlcz1yLHRoaXMuX21heENoYXJDb2RlPW59bmV4dFN0YXRlKHQsbil7cmV0dXJuIG48MHx8bj49dGhpcy5fbWF4Q2hhckNvZGU/MDp0aGlzLl9zdGF0ZXMuZ2V0KHQsbil9fWxldCB1bj1udWxsO2Z1bmN0aW9uIG9hKCl7cmV0dXJuIHVuPT09bnVsbCYmKHVuPW5ldyBhYShbWzEsMTA0LDJdLFsxLDcyLDJdLFsxLDEwMiw2XSxbMSw3MCw2XSxbMiwxMTYsM10sWzIsODQsM10sWzMsMTE2LDRdLFszLDg0LDRdLFs0LDExMiw1XSxbNCw4MCw1XSxbNSwxMTUsOV0sWzUsODMsOV0sWzUsNTgsMTBdLFs2LDEwNSw3XSxbNiw3Myw3XSxbNywxMDgsOF0sWzcsNzYsOF0sWzgsMTAxLDldLFs4LDY5LDldLFs5LDU4LDEwXSxbMTAsNDcsMTFdLFsxMSw0NywxMl1dKSksdW59bGV0IG50PW51bGw7ZnVuY3Rpb24gbGEoKXtpZihudD09PW51bGwpe250PW5ldyBsbigwKTtjb25zdCBlPWAgCTw+JyLjgIHjgILvvaHvvaTvvIzvvI7vvJrvvJvigJjjgIjjgIzjgI7jgJTvvIjvvLvvvZvvvaLvvaPvvZ3vvL3vvInjgJXjgI/jgI3jgInigJnvvYDvvZ7igKZgO2ZvcihsZXQgbj0wO248ZS5sZW5ndGg7bisrKW50LnNldChlLmNoYXJDb2RlQXQobiksMSk7Y29uc3QgdD0iLiw7OiI7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspbnQuc2V0KHQuY2hhckNvZGVBdChuKSwyKX1yZXR1cm4gbnR9Y2xhc3MgTHR7c3RhdGljIF9jcmVhdGVMaW5rKHQsbixzLHIsaSl7bGV0IG89aS0xO2Rve2NvbnN0IGw9bi5jaGFyQ29kZUF0KG8pO2lmKHQuZ2V0KGwpIT09MilicmVhaztvLS19d2hpbGUobz5yKTtpZihyPjApe2NvbnN0IGw9bi5jaGFyQ29kZUF0KHItMSksdT1uLmNoYXJDb2RlQXQobyk7KGw9PT00MCYmdT09PTQxfHxsPT09OTEmJnU9PT05M3x8bD09PTEyMyYmdT09PTEyNSkmJm8tLX1yZXR1cm57cmFuZ2U6e3N0YXJ0TGluZU51bWJlcjpzLHN0YXJ0Q29sdW1uOnIrMSxlbmRMaW5lTnVtYmVyOnMsZW5kQ29sdW1uOm8rMn0sdXJsOm4uc3Vic3RyaW5nKHIsbysxKX19c3RhdGljIGNvbXB1dGVMaW5rcyh0LG49b2EoKSl7Y29uc3Qgcz1sYSgpLHI9W107Zm9yKGxldCBpPTEsbz10LmdldExpbmVDb3VudCgpO2k8PW87aSsrKXtjb25zdCBsPXQuZ2V0TGluZUNvbnRlbnQoaSksdT1sLmxlbmd0aDtsZXQgYz0wLGY9MCxoPTAsZD0xLG09ITEsZz0hMSxiPSExLHg9ITE7Zm9yKDtjPHU7KXtsZXQgdj0hMTtjb25zdCBTPWwuY2hhckNvZGVBdChjKTtpZihkPT09MTMpe2xldCBOO3N3aXRjaChTKXtjYXNlIDQwOm09ITAsTj0wO2JyZWFrO2Nhc2UgNDE6Tj1tPzA6MTticmVhaztjYXNlIDkxOmI9ITAsZz0hMCxOPTA7YnJlYWs7Y2FzZSA5MzpiPSExLE49Zz8wOjE7YnJlYWs7Y2FzZSAxMjM6eD0hMCxOPTA7YnJlYWs7Y2FzZSAxMjU6Tj14PzA6MTticmVhaztjYXNlIDM5OmNhc2UgMzQ6Y2FzZSA5NjpoPT09Uz9OPTE6aD09PTM5fHxoPT09MzR8fGg9PT05Nj9OPTA6Tj0xO2JyZWFrO2Nhc2UgNDI6Tj1oPT09NDI/MTowO2JyZWFrO2Nhc2UgMTI0Ok49aD09PTEyND8xOjA7YnJlYWs7Y2FzZSAzMjpOPWI/MDoxO2JyZWFrO2RlZmF1bHQ6Tj1zLmdldChTKX1OPT09MSYmKHIucHVzaChMdC5fY3JlYXRlTGluayhzLGwsaSxmLGMpKSx2PSEwKX1lbHNlIGlmKGQ9PT0xMil7bGV0IE47Uz09PTkxPyhnPSEwLE49MCk6Tj1zLmdldChTKSxOPT09MT92PSEwOmQ9MTN9ZWxzZSBkPW4ubmV4dFN0YXRlKGQsUyksZD09PTAmJih2PSEwKTt2JiYoZD0xLG09ITEsZz0hMSx4PSExLGY9YysxLGg9UyksYysrfWQ9PT0xMyYmci5wdXNoKEx0Ll9jcmVhdGVMaW5rKHMsbCxpLGYsdSkpfXJldHVybiByfX1mdW5jdGlvbiB1YShlKXtyZXR1cm4hZXx8dHlwZW9mIGUuZ2V0TGluZUNvdW50IT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5nZXRMaW5lQ29udGVudCE9ImZ1bmN0aW9uIj9bXTpMdC5jb21wdXRlTGlua3MoZSl9Y29uc3QgVnQ9Y2xhc3MgVnR7Y29uc3RydWN0b3IoKXt0aGlzLl9kZWZhdWx0VmFsdWVTZXQ9W1sidHJ1ZSIsImZhbHNlIl0sWyJUcnVlIiwiRmFsc2UiXSxbIlByaXZhdGUiLCJQdWJsaWMiLCJGcmllbmQiLCJSZWFkT25seSIsIlBhcnRpYWwiLCJQcm90ZWN0ZWQiLCJXcml0ZU9ubHkiXSxbInB1YmxpYyIsInByb3RlY3RlZCIsInByaXZhdGUiXV19bmF2aWdhdGVWYWx1ZVNldCh0LG4scyxyLGkpe2lmKHQmJm4pe2NvbnN0IG89dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQobixpKTtpZihvKXJldHVybntyYW5nZTp0LHZhbHVlOm99fWlmKHMmJnIpe2NvbnN0IG89dGhpcy5kb05hdmlnYXRlVmFsdWVTZXQocixpKTtpZihvKXJldHVybntyYW5nZTpzLHZhbHVlOm99fXJldHVybiBudWxsfWRvTmF2aWdhdGVWYWx1ZVNldCh0LG4pe2NvbnN0IHM9dGhpcy5udW1iZXJSZXBsYWNlKHQsbik7cmV0dXJuIHMhPT1udWxsP3M6dGhpcy50ZXh0UmVwbGFjZSh0LG4pfW51bWJlclJlcGxhY2UodCxuKXtjb25zdCBzPU1hdGgucG93KDEwLHQubGVuZ3RoLSh0Lmxhc3RJbmRleE9mKCIuIikrMSkpO2xldCByPU51bWJlcih0KTtjb25zdCBpPXBhcnNlRmxvYXQodCk7cmV0dXJuIWlzTmFOKHIpJiYhaXNOYU4oaSkmJnI9PT1pP3I9PT0wJiYhbj9udWxsOihyPU1hdGguZmxvb3IocipzKSxyKz1uP3M6LXMsU3RyaW5nKHIvcykpOm51bGx9dGV4dFJlcGxhY2UodCxuKXtyZXR1cm4gdGhpcy52YWx1ZVNldHNSZXBsYWNlKHRoaXMuX2RlZmF1bHRWYWx1ZVNldCx0LG4pfXZhbHVlU2V0c1JlcGxhY2UodCxuLHMpe2xldCByPW51bGw7Zm9yKGxldCBpPTAsbz10Lmxlbmd0aDtyPT09bnVsbCYmaTxvO2krKylyPXRoaXMudmFsdWVTZXRSZXBsYWNlKHRbaV0sbixzKTtyZXR1cm4gcn12YWx1ZVNldFJlcGxhY2UodCxuLHMpe2xldCByPXQuaW5kZXhPZihuKTtyZXR1cm4gcj49MD8ocis9cz8xOi0xLHI8MD9yPXQubGVuZ3RoLTE6ciU9dC5sZW5ndGgsdFtyXSk6bnVsbH19O1Z0LklOU1RBTkNFPW5ldyBWdDtsZXQgY249VnQ7Y29uc3Qgb3M9T2JqZWN0LmZyZWV6ZShmdW5jdGlvbihlLHQpe2NvbnN0IG49c2V0VGltZW91dChlLmJpbmQodCksMCk7cmV0dXJue2Rpc3Bvc2UoKXtjbGVhclRpbWVvdXQobil9fX0pO3ZhciB2dDsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChuKXtyZXR1cm4gbj09PWUuTm9uZXx8bj09PWUuQ2FuY2VsbGVkfHxuIGluc3RhbmNlb2YgTnQ/ITA6IW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pc0NhbmNlbGxhdGlvblJlcXVlc3RlZD09ImJvb2xlYW4iJiZ0eXBlb2Ygbi5vbkNhbmNlbGxhdGlvblJlcXVlc3RlZD09ImZ1bmN0aW9uIn1lLmlzQ2FuY2VsbGF0aW9uVG9rZW49dCxlLk5vbmU9T2JqZWN0LmZyZWV6ZSh7aXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6ITEsb25DYW5jZWxsYXRpb25SZXF1ZXN0ZWQ6Z3QuTm9uZX0pLGUuQ2FuY2VsbGVkPU9iamVjdC5mcmVlemUoe2lzQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOiEwLG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkOm9zfSl9KSh2dHx8KHZ0PXt9KSk7Y2xhc3MgTnR7Y29uc3RydWN0b3IoKXt0aGlzLl9pc0NhbmNlbGxlZD0hMSx0aGlzLl9lbWl0dGVyPW51bGx9Y2FuY2VsKCl7dGhpcy5faXNDYW5jZWxsZWR8fCh0aGlzLl9pc0NhbmNlbGxlZD0hMCx0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5maXJlKHZvaWQgMCksdGhpcy5kaXNwb3NlKCkpKX1nZXQgaXNDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoKXtyZXR1cm4gdGhpcy5faXNDYW5jZWxsZWR9Z2V0IG9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKCl7cmV0dXJuIHRoaXMuX2lzQ2FuY2VsbGVkP29zOih0aGlzLl9lbWl0dGVyfHwodGhpcy5fZW1pdHRlcj1uZXcgb2UpLHRoaXMuX2VtaXR0ZXIuZXZlbnQpfWRpc3Bvc2UoKXt0aGlzLl9lbWl0dGVyJiYodGhpcy5fZW1pdHRlci5kaXNwb3NlKCksdGhpcy5fZW1pdHRlcj1udWxsKX19Y2xhc3MgY2F7Y29uc3RydWN0b3IodCl7dGhpcy5fdG9rZW49dm9pZCAwLHRoaXMuX3BhcmVudExpc3RlbmVyPXZvaWQgMCx0aGlzLl9wYXJlbnRMaXN0ZW5lcj10JiZ0Lm9uQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKHRoaXMuY2FuY2VsLHRoaXMpfWdldCB0b2tlbigpe3JldHVybiB0aGlzLl90b2tlbnx8KHRoaXMuX3Rva2VuPW5ldyBOdCksdGhpcy5fdG9rZW59Y2FuY2VsKCl7dGhpcy5fdG9rZW4/dGhpcy5fdG9rZW4gaW5zdGFuY2VvZiBOdCYmdGhpcy5fdG9rZW4uY2FuY2VsKCk6dGhpcy5fdG9rZW49dnQuQ2FuY2VsbGVkfWRpc3Bvc2UodD0hMSl7dCYmdGhpcy5jYW5jZWwoKSx0aGlzLl9wYXJlbnRMaXN0ZW5lcj8uZGlzcG9zZSgpLHRoaXMuX3Rva2VuP3RoaXMuX3Rva2VuIGluc3RhbmNlb2YgTnQmJnRoaXMuX3Rva2VuLmRpc3Bvc2UoKTp0aGlzLl90b2tlbj12dC5Ob25lfX1jbGFzcyBobntjb25zdHJ1Y3Rvcigpe3RoaXMuX2tleUNvZGVUb1N0cj1bXSx0aGlzLl9zdHJUb0tleUNvZGU9T2JqZWN0LmNyZWF0ZShudWxsKX1kZWZpbmUodCxuKXt0aGlzLl9rZXlDb2RlVG9TdHJbdF09bix0aGlzLl9zdHJUb0tleUNvZGVbbi50b0xvd2VyQ2FzZSgpXT10fWtleUNvZGVUb1N0cih0KXtyZXR1cm4gdGhpcy5fa2V5Q29kZVRvU3RyW3RdfXN0clRvS2V5Q29kZSh0KXtyZXR1cm4gdGhpcy5fc3RyVG9LZXlDb2RlW3QudG9Mb3dlckNhc2UoKV18fDB9fWNvbnN0IFN0PW5ldyBobixmbj1uZXcgaG4sZG49bmV3IGhuLGhhPW5ldyBBcnJheSgyMzApLGZhPU9iamVjdC5jcmVhdGUobnVsbCksZGE9T2JqZWN0LmNyZWF0ZShudWxsKTsoZnVuY3Rpb24oKXtjb25zdCBlPSIiLHQ9W1sxLDAsIk5vbmUiLDAsInVua25vd24iLDAsIlZLX1VOS05PV04iLGUsZV0sWzEsMSwiSHlwZXIiLDAsZSwwLGUsZSxlXSxbMSwyLCJTdXBlciIsMCxlLDAsZSxlLGVdLFsxLDMsIkZuIiwwLGUsMCxlLGUsZV0sWzEsNCwiRm5Mb2NrIiwwLGUsMCxlLGUsZV0sWzEsNSwiU3VzcGVuZCIsMCxlLDAsZSxlLGVdLFsxLDYsIlJlc3VtZSIsMCxlLDAsZSxlLGVdLFsxLDcsIlR1cmJvIiwwLGUsMCxlLGUsZV0sWzEsOCwiU2xlZXAiLDAsZSwwLCJWS19TTEVFUCIsZSxlXSxbMSw5LCJXYWtlVXAiLDAsZSwwLGUsZSxlXSxbMCwxMCwiS2V5QSIsMzEsIkEiLDY1LCJWS19BIixlLGVdLFswLDExLCJLZXlCIiwzMiwiQiIsNjYsIlZLX0IiLGUsZV0sWzAsMTIsIktleUMiLDMzLCJDIiw2NywiVktfQyIsZSxlXSxbMCwxMywiS2V5RCIsMzQsIkQiLDY4LCJWS19EIixlLGVdLFswLDE0LCJLZXlFIiwzNSwiRSIsNjksIlZLX0UiLGUsZV0sWzAsMTUsIktleUYiLDM2LCJGIiw3MCwiVktfRiIsZSxlXSxbMCwxNiwiS2V5RyIsMzcsIkciLDcxLCJWS19HIixlLGVdLFswLDE3LCJLZXlIIiwzOCwiSCIsNzIsIlZLX0giLGUsZV0sWzAsMTgsIktleUkiLDM5LCJJIiw3MywiVktfSSIsZSxlXSxbMCwxOSwiS2V5SiIsNDAsIkoiLDc0LCJWS19KIixlLGVdLFswLDIwLCJLZXlLIiw0MSwiSyIsNzUsIlZLX0siLGUsZV0sWzAsMjEsIktleUwiLDQyLCJMIiw3NiwiVktfTCIsZSxlXSxbMCwyMiwiS2V5TSIsNDMsIk0iLDc3LCJWS19NIixlLGVdLFswLDIzLCJLZXlOIiw0NCwiTiIsNzgsIlZLX04iLGUsZV0sWzAsMjQsIktleU8iLDQ1LCJPIiw3OSwiVktfTyIsZSxlXSxbMCwyNSwiS2V5UCIsNDYsIlAiLDgwLCJWS19QIixlLGVdLFswLDI2LCJLZXlRIiw0NywiUSIsODEsIlZLX1EiLGUsZV0sWzAsMjcsIktleVIiLDQ4LCJSIiw4MiwiVktfUiIsZSxlXSxbMCwyOCwiS2V5UyIsNDksIlMiLDgzLCJWS19TIixlLGVdLFswLDI5LCJLZXlUIiw1MCwiVCIsODQsIlZLX1QiLGUsZV0sWzAsMzAsIktleVUiLDUxLCJVIiw4NSwiVktfVSIsZSxlXSxbMCwzMSwiS2V5ViIsNTIsIlYiLDg2LCJWS19WIixlLGVdLFswLDMyLCJLZXlXIiw1MywiVyIsODcsIlZLX1ciLGUsZV0sWzAsMzMsIktleVgiLDU0LCJYIiw4OCwiVktfWCIsZSxlXSxbMCwzNCwiS2V5WSIsNTUsIlkiLDg5LCJWS19ZIixlLGVdLFswLDM1LCJLZXlaIiw1NiwiWiIsOTAsIlZLX1oiLGUsZV0sWzAsMzYsIkRpZ2l0MSIsMjIsIjEiLDQ5LCJWS18xIixlLGVdLFswLDM3LCJEaWdpdDIiLDIzLCIyIiw1MCwiVktfMiIsZSxlXSxbMCwzOCwiRGlnaXQzIiwyNCwiMyIsNTEsIlZLXzMiLGUsZV0sWzAsMzksIkRpZ2l0NCIsMjUsIjQiLDUyLCJWS180IixlLGVdLFswLDQwLCJEaWdpdDUiLDI2LCI1Iiw1MywiVktfNSIsZSxlXSxbMCw0MSwiRGlnaXQ2IiwyNywiNiIsNTQsIlZLXzYiLGUsZV0sWzAsNDIsIkRpZ2l0NyIsMjgsIjciLDU1LCJWS183IixlLGVdLFswLDQzLCJEaWdpdDgiLDI5LCI4Iiw1NiwiVktfOCIsZSxlXSxbMCw0NCwiRGlnaXQ5IiwzMCwiOSIsNTcsIlZLXzkiLGUsZV0sWzAsNDUsIkRpZ2l0MCIsMjEsIjAiLDQ4LCJWS18wIixlLGVdLFsxLDQ2LCJFbnRlciIsMywiRW50ZXIiLDEzLCJWS19SRVRVUk4iLGUsZV0sWzEsNDcsIkVzY2FwZSIsOSwiRXNjYXBlIiwyNywiVktfRVNDQVBFIixlLGVdLFsxLDQ4LCJCYWNrc3BhY2UiLDEsIkJhY2tzcGFjZSIsOCwiVktfQkFDSyIsZSxlXSxbMSw0OSwiVGFiIiwyLCJUYWIiLDksIlZLX1RBQiIsZSxlXSxbMSw1MCwiU3BhY2UiLDEwLCJTcGFjZSIsMzIsIlZLX1NQQUNFIixlLGVdLFswLDUxLCJNaW51cyIsODgsIi0iLDE4OSwiVktfT0VNX01JTlVTIiwiLSIsIk9FTV9NSU5VUyJdLFswLDUyLCJFcXVhbCIsODYsIj0iLDE4NywiVktfT0VNX1BMVVMiLCI9IiwiT0VNX1BMVVMiXSxbMCw1MywiQnJhY2tldExlZnQiLDkyLCJbIiwyMTksIlZLX09FTV80IiwiWyIsIk9FTV80Il0sWzAsNTQsIkJyYWNrZXRSaWdodCIsOTQsIl0iLDIyMSwiVktfT0VNXzYiLCJdIiwiT0VNXzYiXSxbMCw1NSwiQmFja3NsYXNoIiw5MywiXFwiLDIyMCwiVktfT0VNXzUiLCJcXCIsIk9FTV81Il0sWzAsNTYsIkludGxIYXNoIiwwLGUsMCxlLGUsZV0sWzAsNTcsIlNlbWljb2xvbiIsODUsIjsiLDE4NiwiVktfT0VNXzEiLCI7IiwiT0VNXzEiXSxbMCw1OCwiUXVvdGUiLDk1LCInIiwyMjIsIlZLX09FTV83IiwiJyIsIk9FTV83Il0sWzAsNTksIkJhY2txdW90ZSIsOTEsImAiLDE5MiwiVktfT0VNXzMiLCJgIiwiT0VNXzMiXSxbMCw2MCwiQ29tbWEiLDg3LCIsIiwxODgsIlZLX09FTV9DT01NQSIsIiwiLCJPRU1fQ09NTUEiXSxbMCw2MSwiUGVyaW9kIiw4OSwiLiIsMTkwLCJWS19PRU1fUEVSSU9EIiwiLiIsIk9FTV9QRVJJT0QiXSxbMCw2MiwiU2xhc2giLDkwLCIvIiwxOTEsIlZLX09FTV8yIiwiLyIsIk9FTV8yIl0sWzEsNjMsIkNhcHNMb2NrIiw4LCJDYXBzTG9jayIsMjAsIlZLX0NBUElUQUwiLGUsZV0sWzEsNjQsIkYxIiw1OSwiRjEiLDExMiwiVktfRjEiLGUsZV0sWzEsNjUsIkYyIiw2MCwiRjIiLDExMywiVktfRjIiLGUsZV0sWzEsNjYsIkYzIiw2MSwiRjMiLDExNCwiVktfRjMiLGUsZV0sWzEsNjcsIkY0Iiw2MiwiRjQiLDExNSwiVktfRjQiLGUsZV0sWzEsNjgsIkY1Iiw2MywiRjUiLDExNiwiVktfRjUiLGUsZV0sWzEsNjksIkY2Iiw2NCwiRjYiLDExNywiVktfRjYiLGUsZV0sWzEsNzAsIkY3Iiw2NSwiRjciLDExOCwiVktfRjciLGUsZV0sWzEsNzEsIkY4Iiw2NiwiRjgiLDExOSwiVktfRjgiLGUsZV0sWzEsNzIsIkY5Iiw2NywiRjkiLDEyMCwiVktfRjkiLGUsZV0sWzEsNzMsIkYxMCIsNjgsIkYxMCIsMTIxLCJWS19GMTAiLGUsZV0sWzEsNzQsIkYxMSIsNjksIkYxMSIsMTIyLCJWS19GMTEiLGUsZV0sWzEsNzUsIkYxMiIsNzAsIkYxMiIsMTIzLCJWS19GMTIiLGUsZV0sWzEsNzYsIlByaW50U2NyZWVuIiwwLGUsMCxlLGUsZV0sWzEsNzcsIlNjcm9sbExvY2siLDg0LCJTY3JvbGxMb2NrIiwxNDUsIlZLX1NDUk9MTCIsZSxlXSxbMSw3OCwiUGF1c2UiLDcsIlBhdXNlQnJlYWsiLDE5LCJWS19QQVVTRSIsZSxlXSxbMSw3OSwiSW5zZXJ0IiwxOSwiSW5zZXJ0Iiw0NSwiVktfSU5TRVJUIixlLGVdLFsxLDgwLCJIb21lIiwxNCwiSG9tZSIsMzYsIlZLX0hPTUUiLGUsZV0sWzEsODEsIlBhZ2VVcCIsMTEsIlBhZ2VVcCIsMzMsIlZLX1BSSU9SIixlLGVdLFsxLDgyLCJEZWxldGUiLDIwLCJEZWxldGUiLDQ2LCJWS19ERUxFVEUiLGUsZV0sWzEsODMsIkVuZCIsMTMsIkVuZCIsMzUsIlZLX0VORCIsZSxlXSxbMSw4NCwiUGFnZURvd24iLDEyLCJQYWdlRG93biIsMzQsIlZLX05FWFQiLGUsZV0sWzEsODUsIkFycm93UmlnaHQiLDE3LCJSaWdodEFycm93IiwzOSwiVktfUklHSFQiLCJSaWdodCIsZV0sWzEsODYsIkFycm93TGVmdCIsMTUsIkxlZnRBcnJvdyIsMzcsIlZLX0xFRlQiLCJMZWZ0IixlXSxbMSw4NywiQXJyb3dEb3duIiwxOCwiRG93bkFycm93Iiw0MCwiVktfRE9XTiIsIkRvd24iLGVdLFsxLDg4LCJBcnJvd1VwIiwxNiwiVXBBcnJvdyIsMzgsIlZLX1VQIiwiVXAiLGVdLFsxLDg5LCJOdW1Mb2NrIiw4MywiTnVtTG9jayIsMTQ0LCJWS19OVU1MT0NLIixlLGVdLFsxLDkwLCJOdW1wYWREaXZpZGUiLDExMywiTnVtUGFkX0RpdmlkZSIsMTExLCJWS19ESVZJREUiLGUsZV0sWzEsOTEsIk51bXBhZE11bHRpcGx5IiwxMDgsIk51bVBhZF9NdWx0aXBseSIsMTA2LCJWS19NVUxUSVBMWSIsZSxlXSxbMSw5MiwiTnVtcGFkU3VidHJhY3QiLDExMSwiTnVtUGFkX1N1YnRyYWN0IiwxMDksIlZLX1NVQlRSQUNUIixlLGVdLFsxLDkzLCJOdW1wYWRBZGQiLDEwOSwiTnVtUGFkX0FkZCIsMTA3LCJWS19BREQiLGUsZV0sWzEsOTQsIk51bXBhZEVudGVyIiwzLGUsMCxlLGUsZV0sWzEsOTUsIk51bXBhZDEiLDk5LCJOdW1QYWQxIiw5NywiVktfTlVNUEFEMSIsZSxlXSxbMSw5NiwiTnVtcGFkMiIsMTAwLCJOdW1QYWQyIiw5OCwiVktfTlVNUEFEMiIsZSxlXSxbMSw5NywiTnVtcGFkMyIsMTAxLCJOdW1QYWQzIiw5OSwiVktfTlVNUEFEMyIsZSxlXSxbMSw5OCwiTnVtcGFkNCIsMTAyLCJOdW1QYWQ0IiwxMDAsIlZLX05VTVBBRDQiLGUsZV0sWzEsOTksIk51bXBhZDUiLDEwMywiTnVtUGFkNSIsMTAxLCJWS19OVU1QQUQ1IixlLGVdLFsxLDEwMCwiTnVtcGFkNiIsMTA0LCJOdW1QYWQ2IiwxMDIsIlZLX05VTVBBRDYiLGUsZV0sWzEsMTAxLCJOdW1wYWQ3IiwxMDUsIk51bVBhZDciLDEwMywiVktfTlVNUEFENyIsZSxlXSxbMSwxMDIsIk51bXBhZDgiLDEwNiwiTnVtUGFkOCIsMTA0LCJWS19OVU1QQUQ4IixlLGVdLFsxLDEwMywiTnVtcGFkOSIsMTA3LCJOdW1QYWQ5IiwxMDUsIlZLX05VTVBBRDkiLGUsZV0sWzEsMTA0LCJOdW1wYWQwIiw5OCwiTnVtUGFkMCIsOTYsIlZLX05VTVBBRDAiLGUsZV0sWzEsMTA1LCJOdW1wYWREZWNpbWFsIiwxMTIsIk51bVBhZF9EZWNpbWFsIiwxMTAsIlZLX0RFQ0lNQUwiLGUsZV0sWzAsMTA2LCJJbnRsQmFja3NsYXNoIiw5NywiT0VNXzEwMiIsMjI2LCJWS19PRU1fMTAyIixlLGVdLFsxLDEwNywiQ29udGV4dE1lbnUiLDU4LCJDb250ZXh0TWVudSIsOTMsZSxlLGVdLFsxLDEwOCwiUG93ZXIiLDAsZSwwLGUsZSxlXSxbMSwxMDksIk51bXBhZEVxdWFsIiwwLGUsMCxlLGUsZV0sWzEsMTEwLCJGMTMiLDcxLCJGMTMiLDEyNCwiVktfRjEzIixlLGVdLFsxLDExMSwiRjE0Iiw3MiwiRjE0IiwxMjUsIlZLX0YxNCIsZSxlXSxbMSwxMTIsIkYxNSIsNzMsIkYxNSIsMTI2LCJWS19GMTUiLGUsZV0sWzEsMTEzLCJGMTYiLDc0LCJGMTYiLDEyNywiVktfRjE2IixlLGVdLFsxLDExNCwiRjE3Iiw3NSwiRjE3IiwxMjgsIlZLX0YxNyIsZSxlXSxbMSwxMTUsIkYxOCIsNzYsIkYxOCIsMTI5LCJWS19GMTgiLGUsZV0sWzEsMTE2LCJGMTkiLDc3LCJGMTkiLDEzMCwiVktfRjE5IixlLGVdLFsxLDExNywiRjIwIiw3OCwiRjIwIiwxMzEsIlZLX0YyMCIsZSxlXSxbMSwxMTgsIkYyMSIsNzksIkYyMSIsMTMyLCJWS19GMjEiLGUsZV0sWzEsMTE5LCJGMjIiLDgwLCJGMjIiLDEzMywiVktfRjIyIixlLGVdLFsxLDEyMCwiRjIzIiw4MSwiRjIzIiwxMzQsIlZLX0YyMyIsZSxlXSxbMSwxMjEsIkYyNCIsODIsIkYyNCIsMTM1LCJWS19GMjQiLGUsZV0sWzEsMTIyLCJPcGVuIiwwLGUsMCxlLGUsZV0sWzEsMTIzLCJIZWxwIiwwLGUsMCxlLGUsZV0sWzEsMTI0LCJTZWxlY3QiLDAsZSwwLGUsZSxlXSxbMSwxMjUsIkFnYWluIiwwLGUsMCxlLGUsZV0sWzEsMTI2LCJVbmRvIiwwLGUsMCxlLGUsZV0sWzEsMTI3LCJDdXQiLDAsZSwwLGUsZSxlXSxbMSwxMjgsIkNvcHkiLDAsZSwwLGUsZSxlXSxbMSwxMjksIlBhc3RlIiwwLGUsMCxlLGUsZV0sWzEsMTMwLCJGaW5kIiwwLGUsMCxlLGUsZV0sWzEsMTMxLCJBdWRpb1ZvbHVtZU11dGUiLDExNywiQXVkaW9Wb2x1bWVNdXRlIiwxNzMsIlZLX1ZPTFVNRV9NVVRFIixlLGVdLFsxLDEzMiwiQXVkaW9Wb2x1bWVVcCIsMTE4LCJBdWRpb1ZvbHVtZVVwIiwxNzUsIlZLX1ZPTFVNRV9VUCIsZSxlXSxbMSwxMzMsIkF1ZGlvVm9sdW1lRG93biIsMTE5LCJBdWRpb1ZvbHVtZURvd24iLDE3NCwiVktfVk9MVU1FX0RPV04iLGUsZV0sWzEsMTM0LCJOdW1wYWRDb21tYSIsMTEwLCJOdW1QYWRfU2VwYXJhdG9yIiwxMDgsIlZLX1NFUEFSQVRPUiIsZSxlXSxbMCwxMzUsIkludGxSbyIsMTE1LCJBQk5UX0MxIiwxOTMsIlZLX0FCTlRfQzEiLGUsZV0sWzEsMTM2LCJLYW5hTW9kZSIsMCxlLDAsZSxlLGVdLFswLDEzNywiSW50bFllbiIsMCxlLDAsZSxlLGVdLFsxLDEzOCwiQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDEzOSwiTm9uQ29udmVydCIsMCxlLDAsZSxlLGVdLFsxLDE0MCwiTGFuZzEiLDAsZSwwLGUsZSxlXSxbMSwxNDEsIkxhbmcyIiwwLGUsMCxlLGUsZV0sWzEsMTQyLCJMYW5nMyIsMCxlLDAsZSxlLGVdLFsxLDE0MywiTGFuZzQiLDAsZSwwLGUsZSxlXSxbMSwxNDQsIkxhbmc1IiwwLGUsMCxlLGUsZV0sWzEsMTQ1LCJBYm9ydCIsMCxlLDAsZSxlLGVdLFsxLDE0NiwiUHJvcHMiLDAsZSwwLGUsZSxlXSxbMSwxNDcsIk51bXBhZFBhcmVuTGVmdCIsMCxlLDAsZSxlLGVdLFsxLDE0OCwiTnVtcGFkUGFyZW5SaWdodCIsMCxlLDAsZSxlLGVdLFsxLDE0OSwiTnVtcGFkQmFja3NwYWNlIiwwLGUsMCxlLGUsZV0sWzEsMTUwLCJOdW1wYWRNZW1vcnlTdG9yZSIsMCxlLDAsZSxlLGVdLFsxLDE1MSwiTnVtcGFkTWVtb3J5UmVjYWxsIiwwLGUsMCxlLGUsZV0sWzEsMTUyLCJOdW1wYWRNZW1vcnlDbGVhciIsMCxlLDAsZSxlLGVdLFsxLDE1MywiTnVtcGFkTWVtb3J5QWRkIiwwLGUsMCxlLGUsZV0sWzEsMTU0LCJOdW1wYWRNZW1vcnlTdWJ0cmFjdCIsMCxlLDAsZSxlLGVdLFsxLDE1NSwiTnVtcGFkQ2xlYXIiLDEzMSwiQ2xlYXIiLDEyLCJWS19DTEVBUiIsZSxlXSxbMSwxNTYsIk51bXBhZENsZWFyRW50cnkiLDAsZSwwLGUsZSxlXSxbMSwwLGUsNSwiQ3RybCIsMTcsIlZLX0NPTlRST0wiLGUsZV0sWzEsMCxlLDQsIlNoaWZ0IiwxNiwiVktfU0hJRlQiLGUsZV0sWzEsMCxlLDYsIkFsdCIsMTgsIlZLX01FTlUiLGUsZV0sWzEsMCxlLDU3LCJNZXRhIiw5MSwiVktfQ09NTUFORCIsZSxlXSxbMSwxNTcsIkNvbnRyb2xMZWZ0Iiw1LGUsMCwiVktfTENPTlRST0wiLGUsZV0sWzEsMTU4LCJTaGlmdExlZnQiLDQsZSwwLCJWS19MU0hJRlQiLGUsZV0sWzEsMTU5LCJBbHRMZWZ0Iiw2LGUsMCwiVktfTE1FTlUiLGUsZV0sWzEsMTYwLCJNZXRhTGVmdCIsNTcsZSwwLCJWS19MV0lOIixlLGVdLFsxLDE2MSwiQ29udHJvbFJpZ2h0Iiw1LGUsMCwiVktfUkNPTlRST0wiLGUsZV0sWzEsMTYyLCJTaGlmdFJpZ2h0Iiw0LGUsMCwiVktfUlNISUZUIixlLGVdLFsxLDE2MywiQWx0UmlnaHQiLDYsZSwwLCJWS19STUVOVSIsZSxlXSxbMSwxNjQsIk1ldGFSaWdodCIsNTcsZSwwLCJWS19SV0lOIixlLGVdLFsxLDE2NSwiQnJpZ2h0bmVzc1VwIiwwLGUsMCxlLGUsZV0sWzEsMTY2LCJCcmlnaHRuZXNzRG93biIsMCxlLDAsZSxlLGVdLFsxLDE2NywiTWVkaWFQbGF5IiwwLGUsMCxlLGUsZV0sWzEsMTY4LCJNZWRpYVJlY29yZCIsMCxlLDAsZSxlLGVdLFsxLDE2OSwiTWVkaWFGYXN0Rm9yd2FyZCIsMCxlLDAsZSxlLGVdLFsxLDE3MCwiTWVkaWFSZXdpbmQiLDAsZSwwLGUsZSxlXSxbMSwxNzEsIk1lZGlhVHJhY2tOZXh0IiwxMjQsIk1lZGlhVHJhY2tOZXh0IiwxNzYsIlZLX01FRElBX05FWFRfVFJBQ0siLGUsZV0sWzEsMTcyLCJNZWRpYVRyYWNrUHJldmlvdXMiLDEyNSwiTWVkaWFUcmFja1ByZXZpb3VzIiwxNzcsIlZLX01FRElBX1BSRVZfVFJBQ0siLGUsZV0sWzEsMTczLCJNZWRpYVN0b3AiLDEyNiwiTWVkaWFTdG9wIiwxNzgsIlZLX01FRElBX1NUT1AiLGUsZV0sWzEsMTc0LCJFamVjdCIsMCxlLDAsZSxlLGVdLFsxLDE3NSwiTWVkaWFQbGF5UGF1c2UiLDEyNywiTWVkaWFQbGF5UGF1c2UiLDE3OSwiVktfTUVESUFfUExBWV9QQVVTRSIsZSxlXSxbMSwxNzYsIk1lZGlhU2VsZWN0IiwxMjgsIkxhdW5jaE1lZGlhUGxheWVyIiwxODEsIlZLX01FRElBX0xBVU5DSF9NRURJQV9TRUxFQ1QiLGUsZV0sWzEsMTc3LCJMYXVuY2hNYWlsIiwxMjksIkxhdW5jaE1haWwiLDE4MCwiVktfTUVESUFfTEFVTkNIX01BSUwiLGUsZV0sWzEsMTc4LCJMYXVuY2hBcHAyIiwxMzAsIkxhdW5jaEFwcDIiLDE4MywiVktfTUVESUFfTEFVTkNIX0FQUDIiLGUsZV0sWzEsMTc5LCJMYXVuY2hBcHAxIiwwLGUsMCwiVktfTUVESUFfTEFVTkNIX0FQUDEiLGUsZV0sWzEsMTgwLCJTZWxlY3RUYXNrIiwwLGUsMCxlLGUsZV0sWzEsMTgxLCJMYXVuY2hTY3JlZW5TYXZlciIsMCxlLDAsZSxlLGVdLFsxLDE4MiwiQnJvd3NlclNlYXJjaCIsMTIwLCJCcm93c2VyU2VhcmNoIiwxNzAsIlZLX0JST1dTRVJfU0VBUkNIIixlLGVdLFsxLDE4MywiQnJvd3NlckhvbWUiLDEyMSwiQnJvd3NlckhvbWUiLDE3MiwiVktfQlJPV1NFUl9IT01FIixlLGVdLFsxLDE4NCwiQnJvd3NlckJhY2siLDEyMiwiQnJvd3NlckJhY2siLDE2NiwiVktfQlJPV1NFUl9CQUNLIixlLGVdLFsxLDE4NSwiQnJvd3NlckZvcndhcmQiLDEyMywiQnJvd3NlckZvcndhcmQiLDE2NywiVktfQlJPV1NFUl9GT1JXQVJEIixlLGVdLFsxLDE4NiwiQnJvd3NlclN0b3AiLDAsZSwwLCJWS19CUk9XU0VSX1NUT1AiLGUsZV0sWzEsMTg3LCJCcm93c2VyUmVmcmVzaCIsMCxlLDAsIlZLX0JST1dTRVJfUkVGUkVTSCIsZSxlXSxbMSwxODgsIkJyb3dzZXJGYXZvcml0ZXMiLDAsZSwwLCJWS19CUk9XU0VSX0ZBVk9SSVRFUyIsZSxlXSxbMSwxODksIlpvb21Ub2dnbGUiLDAsZSwwLGUsZSxlXSxbMSwxOTAsIk1haWxSZXBseSIsMCxlLDAsZSxlLGVdLFsxLDE5MSwiTWFpbEZvcndhcmQiLDAsZSwwLGUsZSxlXSxbMSwxOTIsIk1haWxTZW5kIiwwLGUsMCxlLGUsZV0sWzEsMCxlLDExNCwiS2V5SW5Db21wb3NpdGlvbiIsMjI5LGUsZSxlXSxbMSwwLGUsMTE2LCJBQk5UX0MyIiwxOTQsIlZLX0FCTlRfQzIiLGUsZV0sWzEsMCxlLDk2LCJPRU1fOCIsMjIzLCJWS19PRU1fOCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0tBTkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19IQU5HVUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19KVU5KQSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0ZJTkFMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEFOSkEiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19LQU5KSSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NPTlZFUlQiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19OT05DT05WRVJUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQUNDRVBUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTU9ERUNIQU5HRSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NFTEVDVCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BSSU5UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhFQ1VURSIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1NOQVBTSE9UIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfSEVMUCIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0FQUFMiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19QUk9DRVNTS0VZIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEFDS0VUIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX1NCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfREJFX0RCQ1NDSEFSIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfQVRUTiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX0NSU0VMIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfRVhTRUwiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19FUkVPRiIsZSxlXSxbMSwwLGUsMCxlLDAsIlZLX1BMQVkiLGUsZV0sWzEsMCxlLDAsZSwwLCJWS19aT09NIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfTk9OQU1FIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfUEExIixlLGVdLFsxLDAsZSwwLGUsMCwiVktfT0VNX0NMRUFSIixlLGVdXSxuPVtdLHM9W107Zm9yKGNvbnN0IHIgb2YgdCl7Y29uc3RbaSxvLGwsdSxjLGYsaCxkLG1dPXI7aWYoc1tvXXx8KHNbb109ITAsZmFbbF09byxkYVtsLnRvTG93ZXJDYXNlKCldPW8pLCFuW3VdKXtpZihuW3VdPSEwLCFjKXRocm93IG5ldyBFcnJvcihgU3RyaW5nIHJlcHJlc2VudGF0aW9uIG1pc3NpbmcgZm9yIGtleSBjb2RlICR7dX0gYXJvdW5kIHNjYW4gY29kZSAke2x9YCk7U3QuZGVmaW5lKHUsYyksZm4uZGVmaW5lKHUsZHx8YyksZG4uZGVmaW5lKHUsbXx8ZHx8Yyl9ZiYmKGhhW2ZdPXUpfX0pKCk7dmFyIGxzOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGwpe3JldHVybiBTdC5rZXlDb2RlVG9TdHIobCl9ZS50b1N0cmluZz10O2Z1bmN0aW9uIG4obCl7cmV0dXJuIFN0LnN0clRvS2V5Q29kZShsKX1lLmZyb21TdHJpbmc9bjtmdW5jdGlvbiBzKGwpe3JldHVybiBmbi5rZXlDb2RlVG9TdHIobCl9ZS50b1VzZXJTZXR0aW5nc1VTPXM7ZnVuY3Rpb24gcihsKXtyZXR1cm4gZG4ua2V5Q29kZVRvU3RyKGwpfWUudG9Vc2VyU2V0dGluZ3NHZW5lcmFsPXI7ZnVuY3Rpb24gaShsKXtyZXR1cm4gZm4uc3RyVG9LZXlDb2RlKGwpfHxkbi5zdHJUb0tleUNvZGUobCl9ZS5mcm9tVXNlclNldHRpbmdzPWk7ZnVuY3Rpb24gbyhsKXtpZihsPj05OCYmbDw9MTEzKXJldHVybiBudWxsO3N3aXRjaChsKXtjYXNlIDE2OnJldHVybiJVcCI7Y2FzZSAxODpyZXR1cm4iRG93biI7Y2FzZSAxNTpyZXR1cm4iTGVmdCI7Y2FzZSAxNzpyZXR1cm4iUmlnaHQifXJldHVybiBTdC5rZXlDb2RlVG9TdHIobCl9ZS50b0VsZWN0cm9uQWNjZWxlcmF0b3I9b30pKGxzfHwobHM9e30pKTtmdW5jdGlvbiBtYShlLHQpe2NvbnN0IG49KHQmNjU1MzUpPDwxNj4+PjA7cmV0dXJuKGV8bik+Pj4wfWNsYXNzIGFlIGV4dGVuZHMga3tjb25zdHJ1Y3Rvcih0LG4scyxyKXtzdXBlcih0LG4scyxyKSx0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj10LHRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49bix0aGlzLnBvc2l0aW9uTGluZU51bWJlcj1zLHRoaXMucG9zaXRpb25Db2x1bW49cn10b1N0cmluZygpe3JldHVybiJbIit0aGlzLnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcisiLCIrdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbisiIC0+ICIrdGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIrIiwiK3RoaXMucG9zaXRpb25Db2x1bW4rIl0ifWVxdWFsc1NlbGVjdGlvbih0KXtyZXR1cm4gYWUuc2VsZWN0aW9uc0VxdWFsKHRoaXMsdCl9c3RhdGljIHNlbGVjdGlvbnNFcXVhbCh0LG4pe3JldHVybiB0LnNlbGVjdGlvblN0YXJ0TGluZU51bWJlcj09PW4uc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyJiZ0LnNlbGVjdGlvblN0YXJ0Q29sdW1uPT09bi5zZWxlY3Rpb25TdGFydENvbHVtbiYmdC5wb3NpdGlvbkxpbmVOdW1iZXI9PT1uLnBvc2l0aW9uTGluZU51bWJlciYmdC5wb3NpdGlvbkNvbHVtbj09PW4ucG9zaXRpb25Db2x1bW59Z2V0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhcnRMaW5lTnVtYmVyPT09dGhpcy5zdGFydExpbmVOdW1iZXImJnRoaXMuc2VsZWN0aW9uU3RhcnRDb2x1bW49PT10aGlzLnN0YXJ0Q29sdW1uPzA6MX1zZXRFbmRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgYWUodGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbix0LG4pOm5ldyBhZSh0LG4sdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5zdGFydENvbHVtbil9Z2V0UG9zaXRpb24oKXtyZXR1cm4gbmV3IFUodGhpcy5wb3NpdGlvbkxpbmVOdW1iZXIsdGhpcy5wb3NpdGlvbkNvbHVtbil9Z2V0U2VsZWN0aW9uU3RhcnQoKXtyZXR1cm4gbmV3IFUodGhpcy5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdGhpcy5zZWxlY3Rpb25TdGFydENvbHVtbil9c2V0U3RhcnRQb3NpdGlvbih0LG4pe3JldHVybiB0aGlzLmdldERpcmVjdGlvbigpPT09MD9uZXcgYWUodCxuLHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbik6bmV3IGFlKHRoaXMuZW5kTGluZU51bWJlcix0aGlzLmVuZENvbHVtbix0LG4pfXN0YXRpYyBmcm9tUG9zaXRpb25zKHQsbj10KXtyZXR1cm4gbmV3IGFlKHQubGluZU51bWJlcix0LmNvbHVtbixuLmxpbmVOdW1iZXIsbi5jb2x1bW4pfXN0YXRpYyBmcm9tUmFuZ2UodCxuKXtyZXR1cm4gbj09PTA/bmV3IGFlKHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4sdC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uKTpuZXcgYWUodC5lbmRMaW5lTnVtYmVyLHQuZW5kQ29sdW1uLHQuc3RhcnRMaW5lTnVtYmVyLHQuc3RhcnRDb2x1bW4pfXN0YXRpYyBsaWZ0U2VsZWN0aW9uKHQpe3JldHVybiBuZXcgYWUodC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXIsdC5zZWxlY3Rpb25TdGFydENvbHVtbix0LnBvc2l0aW9uTGluZU51bWJlcix0LnBvc2l0aW9uQ29sdW1uKX1zdGF0aWMgc2VsZWN0aW9uc0FyckVxdWFsKHQsbil7aWYodCYmIW58fCF0JiZuKXJldHVybiExO2lmKCF0JiYhbilyZXR1cm4hMDtpZih0Lmxlbmd0aCE9PW4ubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgcz0wLHI9dC5sZW5ndGg7czxyO3MrKylpZighdGhpcy5zZWxlY3Rpb25zRXF1YWwodFtzXSxuW3NdKSlyZXR1cm4hMTtyZXR1cm4hMH1zdGF0aWMgaXNJU2VsZWN0aW9uKHQpe3JldHVybiB0JiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydExpbmVOdW1iZXI9PSJudW1iZXIiJiZ0eXBlb2YgdC5zZWxlY3Rpb25TdGFydENvbHVtbj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uTGluZU51bWJlcj09Im51bWJlciImJnR5cGVvZiB0LnBvc2l0aW9uQ29sdW1uPT0ibnVtYmVyIn1zdGF0aWMgY3JlYXRlV2l0aERpcmVjdGlvbih0LG4scyxyLGkpe3JldHVybiBpPT09MD9uZXcgYWUodCxuLHMscik6bmV3IGFlKHMscix0LG4pfX1mdW5jdGlvbiBnYShlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmcifWNvbnN0IHVzPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gYShlLHQpe2lmKGdhKHQpKXtjb25zdCBuPXVzW3RdO2lmKG49PT12b2lkIDApdGhyb3cgbmV3IEVycm9yKGAke2V9IHJlZmVyZW5jZXMgYW4gdW5rbm93biBjb2RpY29uOiAke3R9YCk7dD1ufXJldHVybiB1c1tlXT10LHtpZDplfX1jb25zdCBiYT17YWRkOmEoImFkZCIsNmU0KSxwbHVzOmEoInBsdXMiLDZlNCksZ2lzdE5ldzphKCJnaXN0LW5ldyIsNmU0KSxyZXBvQ3JlYXRlOmEoInJlcG8tY3JlYXRlIiw2ZTQpLGxpZ2h0YnVsYjphKCJsaWdodGJ1bGIiLDYwMDAxKSxsaWdodEJ1bGI6YSgibGlnaHQtYnVsYiIsNjAwMDEpLHJlcG86YSgicmVwbyIsNjAwMDIpLHJlcG9EZWxldGU6YSgicmVwby1kZWxldGUiLDYwMDAyKSxnaXN0Rm9yazphKCJnaXN0LWZvcmsiLDYwMDAzKSxyZXBvRm9ya2VkOmEoInJlcG8tZm9ya2VkIiw2MDAwMyksZ2l0UHVsbFJlcXVlc3Q6YSgiZ2l0LXB1bGwtcmVxdWVzdCIsNjAwMDQpLGdpdFB1bGxSZXF1ZXN0QWJhbmRvbmVkOmEoImdpdC1wdWxsLXJlcXVlc3QtYWJhbmRvbmVkIiw2MDAwNCkscmVjb3JkS2V5czphKCJyZWNvcmQta2V5cyIsNjAwMDUpLGtleWJvYXJkOmEoImtleWJvYXJkIiw2MDAwNSksdGFnOmEoInRhZyIsNjAwMDYpLGdpdFB1bGxSZXF1ZXN0TGFiZWw6YSgiZ2l0LXB1bGwtcmVxdWVzdC1sYWJlbCIsNjAwMDYpLHRhZ0FkZDphKCJ0YWctYWRkIiw2MDAwNiksdGFnUmVtb3ZlOmEoInRhZy1yZW1vdmUiLDYwMDA2KSxwZXJzb246YSgicGVyc29uIiw2MDAwNykscGVyc29uRm9sbG93OmEoInBlcnNvbi1mb2xsb3ciLDYwMDA3KSxwZXJzb25PdXRsaW5lOmEoInBlcnNvbi1vdXRsaW5lIiw2MDAwNykscGVyc29uRmlsbGVkOmEoInBlcnNvbi1maWxsZWQiLDYwMDA3KSxnaXRCcmFuY2g6YSgiZ2l0LWJyYW5jaCIsNjAwMDgpLGdpdEJyYW5jaENyZWF0ZTphKCJnaXQtYnJhbmNoLWNyZWF0ZSIsNjAwMDgpLGdpdEJyYW5jaERlbGV0ZTphKCJnaXQtYnJhbmNoLWRlbGV0ZSIsNjAwMDgpLHNvdXJjZUNvbnRyb2w6YSgic291cmNlLWNvbnRyb2wiLDYwMDA4KSxtaXJyb3I6YSgibWlycm9yIiw2MDAwOSksbWlycm9yUHVibGljOmEoIm1pcnJvci1wdWJsaWMiLDYwMDA5KSxzdGFyOmEoInN0YXIiLDYwMDEwKSxzdGFyQWRkOmEoInN0YXItYWRkIiw2MDAxMCksc3RhckRlbGV0ZTphKCJzdGFyLWRlbGV0ZSIsNjAwMTApLHN0YXJFbXB0eTphKCJzdGFyLWVtcHR5Iiw2MDAxMCksY29tbWVudDphKCJjb21tZW50Iiw2MDAxMSksY29tbWVudEFkZDphKCJjb21tZW50LWFkZCIsNjAwMTEpLGFsZXJ0OmEoImFsZXJ0Iiw2MDAxMiksd2FybmluZzphKCJ3YXJuaW5nIiw2MDAxMiksc2VhcmNoOmEoInNlYXJjaCIsNjAwMTMpLHNlYXJjaFNhdmU6YSgic2VhcmNoLXNhdmUiLDYwMDEzKSxsb2dPdXQ6YSgibG9nLW91dCIsNjAwMTQpLHNpZ25PdXQ6YSgic2lnbi1vdXQiLDYwMDE0KSxsb2dJbjphKCJsb2ctaW4iLDYwMDE1KSxzaWduSW46YSgic2lnbi1pbiIsNjAwMTUpLGV5ZTphKCJleWUiLDYwMDE2KSxleWVVbndhdGNoOmEoImV5ZS11bndhdGNoIiw2MDAxNiksZXllV2F0Y2g6YSgiZXllLXdhdGNoIiw2MDAxNiksY2lyY2xlRmlsbGVkOmEoImNpcmNsZS1maWxsZWQiLDYwMDE3KSxwcmltaXRpdmVEb3Q6YSgicHJpbWl0aXZlLWRvdCIsNjAwMTcpLGNsb3NlRGlydHk6YSgiY2xvc2UtZGlydHkiLDYwMDE3KSxkZWJ1Z0JyZWFrcG9pbnQ6YSgiZGVidWctYnJlYWtwb2ludCIsNjAwMTcpLGRlYnVnQnJlYWtwb2ludERpc2FibGVkOmEoImRlYnVnLWJyZWFrcG9pbnQtZGlzYWJsZWQiLDYwMDE3KSxkZWJ1Z0hpbnQ6YSgiZGVidWctaGludCIsNjAwMTcpLHRlcm1pbmFsRGVjb3JhdGlvblN1Y2Nlc3M6YSgidGVybWluYWwtZGVjb3JhdGlvbi1zdWNjZXNzIiw2MDAxNykscHJpbWl0aXZlU3F1YXJlOmEoInByaW1pdGl2ZS1zcXVhcmUiLDYwMDE4KSxlZGl0OmEoImVkaXQiLDYwMDE5KSxwZW5jaWw6YSgicGVuY2lsIiw2MDAxOSksaW5mbzphKCJpbmZvIiw2MDAyMCksaXNzdWVPcGVuZWQ6YSgiaXNzdWUtb3BlbmVkIiw2MDAyMCksZ2lzdFByaXZhdGU6YSgiZ2lzdC1wcml2YXRlIiw2MDAyMSksZ2l0Rm9ya1ByaXZhdGU6YSgiZ2l0LWZvcmstcHJpdmF0ZSIsNjAwMjEpLGxvY2s6YSgibG9jayIsNjAwMjEpLG1pcnJvclByaXZhdGU6YSgibWlycm9yLXByaXZhdGUiLDYwMDIxKSxjbG9zZTphKCJjbG9zZSIsNjAwMjIpLHJlbW92ZUNsb3NlOmEoInJlbW92ZS1jbG9zZSIsNjAwMjIpLHg6YSgieCIsNjAwMjIpLHJlcG9TeW5jOmEoInJlcG8tc3luYyIsNjAwMjMpLHN5bmM6YSgic3luYyIsNjAwMjMpLGNsb25lOmEoImNsb25lIiw2MDAyNCksZGVza3RvcERvd25sb2FkOmEoImRlc2t0b3AtZG93bmxvYWQiLDYwMDI0KSxiZWFrZXI6YSgiYmVha2VyIiw2MDAyNSksbWljcm9zY29wZTphKCJtaWNyb3Njb3BlIiw2MDAyNSksdm06YSgidm0iLDYwMDI2KSxkZXZpY2VEZXNrdG9wOmEoImRldmljZS1kZXNrdG9wIiw2MDAyNiksZmlsZTphKCJmaWxlIiw2MDAyNyksZmlsZVRleHQ6YSgiZmlsZS10ZXh0Iiw2MDAyNyksbW9yZTphKCJtb3JlIiw2MDAyOCksZWxsaXBzaXM6YSgiZWxsaXBzaXMiLDYwMDI4KSxrZWJhYkhvcml6b250YWw6YSgia2ViYWItaG9yaXpvbnRhbCIsNjAwMjgpLG1haWxSZXBseTphKCJtYWlsLXJlcGx5Iiw2MDAyOSkscmVwbHk6YSgicmVwbHkiLDYwMDI5KSxvcmdhbml6YXRpb246YSgib3JnYW5pemF0aW9uIiw2MDAzMCksb3JnYW5pemF0aW9uRmlsbGVkOmEoIm9yZ2FuaXphdGlvbi1maWxsZWQiLDYwMDMwKSxvcmdhbml6YXRpb25PdXRsaW5lOmEoIm9yZ2FuaXphdGlvbi1vdXRsaW5lIiw2MDAzMCksbmV3RmlsZTphKCJuZXctZmlsZSIsNjAwMzEpLGZpbGVBZGQ6YSgiZmlsZS1hZGQiLDYwMDMxKSxuZXdGb2xkZXI6YSgibmV3LWZvbGRlciIsNjAwMzIpLGZpbGVEaXJlY3RvcnlDcmVhdGU6YSgiZmlsZS1kaXJlY3RvcnktY3JlYXRlIiw2MDAzMiksdHJhc2g6YSgidHJhc2giLDYwMDMzKSx0cmFzaGNhbjphKCJ0cmFzaGNhbiIsNjAwMzMpLGhpc3Rvcnk6YSgiaGlzdG9yeSIsNjAwMzQpLGNsb2NrOmEoImNsb2NrIiw2MDAzNCksZm9sZGVyOmEoImZvbGRlciIsNjAwMzUpLGZpbGVEaXJlY3Rvcnk6YSgiZmlsZS1kaXJlY3RvcnkiLDYwMDM1KSxzeW1ib2xGb2xkZXI6YSgic3ltYm9sLWZvbGRlciIsNjAwMzUpLGxvZ29HaXRodWI6YSgibG9nby1naXRodWIiLDYwMDM2KSxtYXJrR2l0aHViOmEoIm1hcmstZ2l0aHViIiw2MDAzNiksZ2l0aHViOmEoImdpdGh1YiIsNjAwMzYpLHRlcm1pbmFsOmEoInRlcm1pbmFsIiw2MDAzNyksY29uc29sZTphKCJjb25zb2xlIiw2MDAzNykscmVwbDphKCJyZXBsIiw2MDAzNyksemFwOmEoInphcCIsNjAwMzgpLHN5bWJvbEV2ZW50OmEoInN5bWJvbC1ldmVudCIsNjAwMzgpLGVycm9yOmEoImVycm9yIiw2MDAzOSksc3RvcDphKCJzdG9wIiw2MDAzOSksdmFyaWFibGU6YSgidmFyaWFibGUiLDYwMDQwKSxzeW1ib2xWYXJpYWJsZTphKCJzeW1ib2wtdmFyaWFibGUiLDYwMDQwKSxhcnJheTphKCJhcnJheSIsNjAwNDIpLHN5bWJvbEFycmF5OmEoInN5bWJvbC1hcnJheSIsNjAwNDIpLHN5bWJvbE1vZHVsZTphKCJzeW1ib2wtbW9kdWxlIiw2MDA0Myksc3ltYm9sUGFja2FnZTphKCJzeW1ib2wtcGFja2FnZSIsNjAwNDMpLHN5bWJvbE5hbWVzcGFjZTphKCJzeW1ib2wtbmFtZXNwYWNlIiw2MDA0Myksc3ltYm9sT2JqZWN0OmEoInN5bWJvbC1vYmplY3QiLDYwMDQzKSxzeW1ib2xNZXRob2Q6YSgic3ltYm9sLW1ldGhvZCIsNjAwNDQpLHN5bWJvbEZ1bmN0aW9uOmEoInN5bWJvbC1mdW5jdGlvbiIsNjAwNDQpLHN5bWJvbENvbnN0cnVjdG9yOmEoInN5bWJvbC1jb25zdHJ1Y3RvciIsNjAwNDQpLHN5bWJvbEJvb2xlYW46YSgic3ltYm9sLWJvb2xlYW4iLDYwMDQ3KSxzeW1ib2xOdWxsOmEoInN5bWJvbC1udWxsIiw2MDA0Nyksc3ltYm9sTnVtZXJpYzphKCJzeW1ib2wtbnVtZXJpYyIsNjAwNDgpLHN5bWJvbE51bWJlcjphKCJzeW1ib2wtbnVtYmVyIiw2MDA0OCksc3ltYm9sU3RydWN0dXJlOmEoInN5bWJvbC1zdHJ1Y3R1cmUiLDYwMDQ5KSxzeW1ib2xTdHJ1Y3Q6YSgic3ltYm9sLXN0cnVjdCIsNjAwNDkpLHN5bWJvbFBhcmFtZXRlcjphKCJzeW1ib2wtcGFyYW1ldGVyIiw2MDA1MCksc3ltYm9sVHlwZVBhcmFtZXRlcjphKCJzeW1ib2wtdHlwZS1wYXJhbWV0ZXIiLDYwMDUwKSxzeW1ib2xLZXk6YSgic3ltYm9sLWtleSIsNjAwNTEpLHN5bWJvbFRleHQ6YSgic3ltYm9sLXRleHQiLDYwMDUxKSxzeW1ib2xSZWZlcmVuY2U6YSgic3ltYm9sLXJlZmVyZW5jZSIsNjAwNTIpLGdvVG9GaWxlOmEoImdvLXRvLWZpbGUiLDYwMDUyKSxzeW1ib2xFbnVtOmEoInN5bWJvbC1lbnVtIiw2MDA1Myksc3ltYm9sVmFsdWU6YSgic3ltYm9sLXZhbHVlIiw2MDA1Myksc3ltYm9sUnVsZXI6YSgic3ltYm9sLXJ1bGVyIiw2MDA1NCksc3ltYm9sVW5pdDphKCJzeW1ib2wtdW5pdCIsNjAwNTQpLGFjdGl2YXRlQnJlYWtwb2ludHM6YSgiYWN0aXZhdGUtYnJlYWtwb2ludHMiLDYwMDU1KSxhcmNoaXZlOmEoImFyY2hpdmUiLDYwMDU2KSxhcnJvd0JvdGg6YSgiYXJyb3ctYm90aCIsNjAwNTcpLGFycm93RG93bjphKCJhcnJvdy1kb3duIiw2MDA1OCksYXJyb3dMZWZ0OmEoImFycm93LWxlZnQiLDYwMDU5KSxhcnJvd1JpZ2h0OmEoImFycm93LXJpZ2h0Iiw2MDA2MCksYXJyb3dTbWFsbERvd246YSgiYXJyb3ctc21hbGwtZG93biIsNjAwNjEpLGFycm93U21hbGxMZWZ0OmEoImFycm93LXNtYWxsLWxlZnQiLDYwMDYyKSxhcnJvd1NtYWxsUmlnaHQ6YSgiYXJyb3ctc21hbGwtcmlnaHQiLDYwMDYzKSxhcnJvd1NtYWxsVXA6YSgiYXJyb3ctc21hbGwtdXAiLDYwMDY0KSxhcnJvd1VwOmEoImFycm93LXVwIiw2MDA2NSksYmVsbDphKCJiZWxsIiw2MDA2NiksYm9sZDphKCJib2xkIiw2MDA2NyksYm9vazphKCJib29rIiw2MDA2OCksYm9va21hcms6YSgiYm9va21hcmsiLDYwMDY5KSxkZWJ1Z0JyZWFrcG9pbnRDb25kaXRpb25hbFVudmVyaWZpZWQ6YSgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC11bnZlcmlmaWVkIiw2MDA3MCksZGVidWdCcmVha3BvaW50Q29uZGl0aW9uYWw6YSgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludENvbmRpdGlvbmFsRGlzYWJsZWQ6YSgiZGVidWctYnJlYWtwb2ludC1jb25kaXRpb25hbC1kaXNhYmxlZCIsNjAwNzEpLGRlYnVnQnJlYWtwb2ludERhdGFVbnZlcmlmaWVkOmEoImRlYnVnLWJyZWFrcG9pbnQtZGF0YS11bnZlcmlmaWVkIiw2MDA3MiksZGVidWdCcmVha3BvaW50RGF0YTphKCJkZWJ1Zy1icmVha3BvaW50LWRhdGEiLDYwMDczKSxkZWJ1Z0JyZWFrcG9pbnREYXRhRGlzYWJsZWQ6YSgiZGVidWctYnJlYWtwb2ludC1kYXRhLWRpc2FibGVkIiw2MDA3MyksZGVidWdCcmVha3BvaW50TG9nVW52ZXJpZmllZDphKCJkZWJ1Zy1icmVha3BvaW50LWxvZy11bnZlcmlmaWVkIiw2MDA3NCksZGVidWdCcmVha3BvaW50TG9nOmEoImRlYnVnLWJyZWFrcG9pbnQtbG9nIiw2MDA3NSksZGVidWdCcmVha3BvaW50TG9nRGlzYWJsZWQ6YSgiZGVidWctYnJlYWtwb2ludC1sb2ctZGlzYWJsZWQiLDYwMDc1KSxicmllZmNhc2U6YSgiYnJpZWZjYXNlIiw2MDA3NiksYnJvYWRjYXN0OmEoImJyb2FkY2FzdCIsNjAwNzcpLGJyb3dzZXI6YSgiYnJvd3NlciIsNjAwNzgpLGJ1ZzphKCJidWciLDYwMDc5KSxjYWxlbmRhcjphKCJjYWxlbmRhciIsNjAwODApLGNhc2VTZW5zaXRpdmU6YSgiY2FzZS1zZW5zaXRpdmUiLDYwMDgxKSxjaGVjazphKCJjaGVjayIsNjAwODIpLGNoZWNrbGlzdDphKCJjaGVja2xpc3QiLDYwMDgzKSxjaGV2cm9uRG93bjphKCJjaGV2cm9uLWRvd24iLDYwMDg0KSxjaGV2cm9uTGVmdDphKCJjaGV2cm9uLWxlZnQiLDYwMDg1KSxjaGV2cm9uUmlnaHQ6YSgiY2hldnJvbi1yaWdodCIsNjAwODYpLGNoZXZyb25VcDphKCJjaGV2cm9uLXVwIiw2MDA4NyksY2hyb21lQ2xvc2U6YSgiY2hyb21lLWNsb3NlIiw2MDA4OCksY2hyb21lTWF4aW1pemU6YSgiY2hyb21lLW1heGltaXplIiw2MDA4OSksY2hyb21lTWluaW1pemU6YSgiY2hyb21lLW1pbmltaXplIiw2MDA5MCksY2hyb21lUmVzdG9yZTphKCJjaHJvbWUtcmVzdG9yZSIsNjAwOTEpLGNpcmNsZU91dGxpbmU6YSgiY2lyY2xlLW91dGxpbmUiLDYwMDkyKSxjaXJjbGU6YSgiY2lyY2xlIiw2MDA5MiksZGVidWdCcmVha3BvaW50VW52ZXJpZmllZDphKCJkZWJ1Zy1icmVha3BvaW50LXVudmVyaWZpZWQiLDYwMDkyKSx0ZXJtaW5hbERlY29yYXRpb25JbmNvbXBsZXRlOmEoInRlcm1pbmFsLWRlY29yYXRpb24taW5jb21wbGV0ZSIsNjAwOTIpLGNpcmNsZVNsYXNoOmEoImNpcmNsZS1zbGFzaCIsNjAwOTMpLGNpcmN1aXRCb2FyZDphKCJjaXJjdWl0LWJvYXJkIiw2MDA5NCksY2xlYXJBbGw6YSgiY2xlYXItYWxsIiw2MDA5NSksY2xpcHB5OmEoImNsaXBweSIsNjAwOTYpLGNsb3NlQWxsOmEoImNsb3NlLWFsbCIsNjAwOTcpLGNsb3VkRG93bmxvYWQ6YSgiY2xvdWQtZG93bmxvYWQiLDYwMDk4KSxjbG91ZFVwbG9hZDphKCJjbG91ZC11cGxvYWQiLDYwMDk5KSxjb2RlOmEoImNvZGUiLDYwMTAwKSxjb2xsYXBzZUFsbDphKCJjb2xsYXBzZS1hbGwiLDYwMTAxKSxjb2xvck1vZGU6YSgiY29sb3ItbW9kZSIsNjAxMDIpLGNvbW1lbnREaXNjdXNzaW9uOmEoImNvbW1lbnQtZGlzY3Vzc2lvbiIsNjAxMDMpLGNyZWRpdENhcmQ6YSgiY3JlZGl0LWNhcmQiLDYwMTA1KSxkYXNoOmEoImRhc2giLDYwMTA4KSxkYXNoYm9hcmQ6YSgiZGFzaGJvYXJkIiw2MDEwOSksZGF0YWJhc2U6YSgiZGF0YWJhc2UiLDYwMTEwKSxkZWJ1Z0NvbnRpbnVlOmEoImRlYnVnLWNvbnRpbnVlIiw2MDExMSksZGVidWdEaXNjb25uZWN0OmEoImRlYnVnLWRpc2Nvbm5lY3QiLDYwMTEyKSxkZWJ1Z1BhdXNlOmEoImRlYnVnLXBhdXNlIiw2MDExMyksZGVidWdSZXN0YXJ0OmEoImRlYnVnLXJlc3RhcnQiLDYwMTE0KSxkZWJ1Z1N0YXJ0OmEoImRlYnVnLXN0YXJ0Iiw2MDExNSksZGVidWdTdGVwSW50bzphKCJkZWJ1Zy1zdGVwLWludG8iLDYwMTE2KSxkZWJ1Z1N0ZXBPdXQ6YSgiZGVidWctc3RlcC1vdXQiLDYwMTE3KSxkZWJ1Z1N0ZXBPdmVyOmEoImRlYnVnLXN0ZXAtb3ZlciIsNjAxMTgpLGRlYnVnU3RvcDphKCJkZWJ1Zy1zdG9wIiw2MDExOSksZGVidWc6YSgiZGVidWciLDYwMTIwKSxkZXZpY2VDYW1lcmFWaWRlbzphKCJkZXZpY2UtY2FtZXJhLXZpZGVvIiw2MDEyMSksZGV2aWNlQ2FtZXJhOmEoImRldmljZS1jYW1lcmEiLDYwMTIyKSxkZXZpY2VNb2JpbGU6YSgiZGV2aWNlLW1vYmlsZSIsNjAxMjMpLGRpZmZBZGRlZDphKCJkaWZmLWFkZGVkIiw2MDEyNCksZGlmZklnbm9yZWQ6YSgiZGlmZi1pZ25vcmVkIiw2MDEyNSksZGlmZk1vZGlmaWVkOmEoImRpZmYtbW9kaWZpZWQiLDYwMTI2KSxkaWZmUmVtb3ZlZDphKCJkaWZmLXJlbW92ZWQiLDYwMTI3KSxkaWZmUmVuYW1lZDphKCJkaWZmLXJlbmFtZWQiLDYwMTI4KSxkaWZmOmEoImRpZmYiLDYwMTI5KSxkaWZmU2lkZWJ5c2lkZTphKCJkaWZmLXNpZGVieXNpZGUiLDYwMTI5KSxkaXNjYXJkOmEoImRpc2NhcmQiLDYwMTMwKSxlZGl0b3JMYXlvdXQ6YSgiZWRpdG9yLWxheW91dCIsNjAxMzEpLGVtcHR5V2luZG93OmEoImVtcHR5LXdpbmRvdyIsNjAxMzIpLGV4Y2x1ZGU6YSgiZXhjbHVkZSIsNjAxMzMpLGV4dGVuc2lvbnM6YSgiZXh0ZW5zaW9ucyIsNjAxMzQpLGV5ZUNsb3NlZDphKCJleWUtY2xvc2VkIiw2MDEzNSksZmlsZUJpbmFyeTphKCJmaWxlLWJpbmFyeSIsNjAxMzYpLGZpbGVDb2RlOmEoImZpbGUtY29kZSIsNjAxMzcpLGZpbGVNZWRpYTphKCJmaWxlLW1lZGlhIiw2MDEzOCksZmlsZVBkZjphKCJmaWxlLXBkZiIsNjAxMzkpLGZpbGVTdWJtb2R1bGU6YSgiZmlsZS1zdWJtb2R1bGUiLDYwMTQwKSxmaWxlU3ltbGlua0RpcmVjdG9yeTphKCJmaWxlLXN5bWxpbmstZGlyZWN0b3J5Iiw2MDE0MSksZmlsZVN5bWxpbmtGaWxlOmEoImZpbGUtc3ltbGluay1maWxlIiw2MDE0MiksZmlsZVppcDphKCJmaWxlLXppcCIsNjAxNDMpLGZpbGVzOmEoImZpbGVzIiw2MDE0NCksZmlsdGVyOmEoImZpbHRlciIsNjAxNDUpLGZsYW1lOmEoImZsYW1lIiw2MDE0NiksZm9sZERvd246YSgiZm9sZC1kb3duIiw2MDE0NyksZm9sZFVwOmEoImZvbGQtdXAiLDYwMTQ4KSxmb2xkOmEoImZvbGQiLDYwMTQ5KSxmb2xkZXJBY3RpdmU6YSgiZm9sZGVyLWFjdGl2ZSIsNjAxNTApLGZvbGRlck9wZW5lZDphKCJmb2xkZXItb3BlbmVkIiw2MDE1MSksZ2VhcjphKCJnZWFyIiw2MDE1MiksZ2lmdDphKCJnaWZ0Iiw2MDE1MyksZ2lzdFNlY3JldDphKCJnaXN0LXNlY3JldCIsNjAxNTQpLGdpc3Q6YSgiZ2lzdCIsNjAxNTUpLGdpdENvbW1pdDphKCJnaXQtY29tbWl0Iiw2MDE1NiksZ2l0Q29tcGFyZTphKCJnaXQtY29tcGFyZSIsNjAxNTcpLGNvbXBhcmVDaGFuZ2VzOmEoImNvbXBhcmUtY2hhbmdlcyIsNjAxNTcpLGdpdE1lcmdlOmEoImdpdC1tZXJnZSIsNjAxNTgpLGdpdGh1YkFjdGlvbjphKCJnaXRodWItYWN0aW9uIiw2MDE1OSksZ2l0aHViQWx0OmEoImdpdGh1Yi1hbHQiLDYwMTYwKSxnbG9iZTphKCJnbG9iZSIsNjAxNjEpLGdyYWJiZXI6YSgiZ3JhYmJlciIsNjAxNjIpLGdyYXBoOmEoImdyYXBoIiw2MDE2MyksZ3JpcHBlcjphKCJncmlwcGVyIiw2MDE2NCksaGVhcnQ6YSgiaGVhcnQiLDYwMTY1KSxob21lOmEoImhvbWUiLDYwMTY2KSxob3Jpem9udGFsUnVsZTphKCJob3Jpem9udGFsLXJ1bGUiLDYwMTY3KSxodWJvdDphKCJodWJvdCIsNjAxNjgpLGluYm94OmEoImluYm94Iiw2MDE2OSksaXNzdWVSZW9wZW5lZDphKCJpc3N1ZS1yZW9wZW5lZCIsNjAxNzEpLGlzc3VlczphKCJpc3N1ZXMiLDYwMTcyKSxpdGFsaWM6YSgiaXRhbGljIiw2MDE3MyksamVyc2V5OmEoImplcnNleSIsNjAxNzQpLGpzb246YSgianNvbiIsNjAxNzUpLGtlYmFiVmVydGljYWw6YSgia2ViYWItdmVydGljYWwiLDYwMTc2KSxrZXk6YSgia2V5Iiw2MDE3NyksbGF3OmEoImxhdyIsNjAxNzgpLGxpZ2h0YnVsYkF1dG9maXg6YSgibGlnaHRidWxiLWF1dG9maXgiLDYwMTc5KSxsaW5rRXh0ZXJuYWw6YSgibGluay1leHRlcm5hbCIsNjAxODApLGxpbms6YSgibGluayIsNjAxODEpLGxpc3RPcmRlcmVkOmEoImxpc3Qtb3JkZXJlZCIsNjAxODIpLGxpc3RVbm9yZGVyZWQ6YSgibGlzdC11bm9yZGVyZWQiLDYwMTgzKSxsaXZlU2hhcmU6YSgibGl2ZS1zaGFyZSIsNjAxODQpLGxvYWRpbmc6YSgibG9hZGluZyIsNjAxODUpLGxvY2F0aW9uOmEoImxvY2F0aW9uIiw2MDE4NiksbWFpbFJlYWQ6YSgibWFpbC1yZWFkIiw2MDE4NyksbWFpbDphKCJtYWlsIiw2MDE4OCksbWFya2Rvd246YSgibWFya2Rvd24iLDYwMTg5KSxtZWdhcGhvbmU6YSgibWVnYXBob25lIiw2MDE5MCksbWVudGlvbjphKCJtZW50aW9uIiw2MDE5MSksbWlsZXN0b25lOmEoIm1pbGVzdG9uZSIsNjAxOTIpLGdpdFB1bGxSZXF1ZXN0TWlsZXN0b25lOmEoImdpdC1wdWxsLXJlcXVlc3QtbWlsZXN0b25lIiw2MDE5MiksbW9ydGFyQm9hcmQ6YSgibW9ydGFyLWJvYXJkIiw2MDE5MyksbW92ZTphKCJtb3ZlIiw2MDE5NCksbXVsdGlwbGVXaW5kb3dzOmEoIm11bHRpcGxlLXdpbmRvd3MiLDYwMTk1KSxtdXRlOmEoIm11dGUiLDYwMTk2KSxub05ld2xpbmU6YSgibm8tbmV3bGluZSIsNjAxOTcpLG5vdGU6YSgibm90ZSIsNjAxOTgpLG9jdG9mYWNlOmEoIm9jdG9mYWNlIiw2MDE5OSksb3BlblByZXZpZXc6YSgib3Blbi1wcmV2aWV3Iiw2MDIwMCkscGFja2FnZTphKCJwYWNrYWdlIiw2MDIwMSkscGFpbnRjYW46YSgicGFpbnRjYW4iLDYwMjAyKSxwaW46YSgicGluIiw2MDIwMykscGxheTphKCJwbGF5Iiw2MDIwNCkscnVuOmEoInJ1biIsNjAyMDQpLHBsdWc6YSgicGx1ZyIsNjAyMDUpLHByZXNlcnZlQ2FzZTphKCJwcmVzZXJ2ZS1jYXNlIiw2MDIwNikscHJldmlldzphKCJwcmV2aWV3Iiw2MDIwNykscHJvamVjdDphKCJwcm9qZWN0Iiw2MDIwOCkscHVsc2U6YSgicHVsc2UiLDYwMjA5KSxxdWVzdGlvbjphKCJxdWVzdGlvbiIsNjAyMTApLHF1b3RlOmEoInF1b3RlIiw2MDIxMSkscmFkaW9Ub3dlcjphKCJyYWRpby10b3dlciIsNjAyMTIpLHJlYWN0aW9uczphKCJyZWFjdGlvbnMiLDYwMjEzKSxyZWZlcmVuY2VzOmEoInJlZmVyZW5jZXMiLDYwMjE0KSxyZWZyZXNoOmEoInJlZnJlc2giLDYwMjE1KSxyZWdleDphKCJyZWdleCIsNjAyMTYpLHJlbW90ZUV4cGxvcmVyOmEoInJlbW90ZS1leHBsb3JlciIsNjAyMTcpLHJlbW90ZTphKCJyZW1vdGUiLDYwMjE4KSxyZW1vdmU6YSgicmVtb3ZlIiw2MDIxOSkscmVwbGFjZUFsbDphKCJyZXBsYWNlLWFsbCIsNjAyMjApLHJlcGxhY2U6YSgicmVwbGFjZSIsNjAyMjEpLHJlcG9DbG9uZTphKCJyZXBvLWNsb25lIiw2MDIyMikscmVwb0ZvcmNlUHVzaDphKCJyZXBvLWZvcmNlLXB1c2giLDYwMjIzKSxyZXBvUHVsbDphKCJyZXBvLXB1bGwiLDYwMjI0KSxyZXBvUHVzaDphKCJyZXBvLXB1c2giLDYwMjI1KSxyZXBvcnQ6YSgicmVwb3J0Iiw2MDIyNikscmVxdWVzdENoYW5nZXM6YSgicmVxdWVzdC1jaGFuZ2VzIiw2MDIyNykscm9ja2V0OmEoInJvY2tldCIsNjAyMjgpLHJvb3RGb2xkZXJPcGVuZWQ6YSgicm9vdC1mb2xkZXItb3BlbmVkIiw2MDIyOSkscm9vdEZvbGRlcjphKCJyb290LWZvbGRlciIsNjAyMzApLHJzczphKCJyc3MiLDYwMjMxKSxydWJ5OmEoInJ1YnkiLDYwMjMyKSxzYXZlQWxsOmEoInNhdmUtYWxsIiw2MDIzMyksc2F2ZUFzOmEoInNhdmUtYXMiLDYwMjM0KSxzYXZlOmEoInNhdmUiLDYwMjM1KSxzY3JlZW5GdWxsOmEoInNjcmVlbi1mdWxsIiw2MDIzNiksc2NyZWVuTm9ybWFsOmEoInNjcmVlbi1ub3JtYWwiLDYwMjM3KSxzZWFyY2hTdG9wOmEoInNlYXJjaC1zdG9wIiw2MDIzOCksc2VydmVyOmEoInNlcnZlciIsNjAyNDApLHNldHRpbmdzR2VhcjphKCJzZXR0aW5ncy1nZWFyIiw2MDI0MSksc2V0dGluZ3M6YSgic2V0dGluZ3MiLDYwMjQyKSxzaGllbGQ6YSgic2hpZWxkIiw2MDI0Myksc21pbGV5OmEoInNtaWxleSIsNjAyNDQpLHNvcnRQcmVjZWRlbmNlOmEoInNvcnQtcHJlY2VkZW5jZSIsNjAyNDUpLHNwbGl0SG9yaXpvbnRhbDphKCJzcGxpdC1ob3Jpem9udGFsIiw2MDI0Niksc3BsaXRWZXJ0aWNhbDphKCJzcGxpdC12ZXJ0aWNhbCIsNjAyNDcpLHNxdWlycmVsOmEoInNxdWlycmVsIiw2MDI0OCksc3RhckZ1bGw6YSgic3Rhci1mdWxsIiw2MDI0OSksc3RhckhhbGY6YSgic3Rhci1oYWxmIiw2MDI1MCksc3ltYm9sQ2xhc3M6YSgic3ltYm9sLWNsYXNzIiw2MDI1MSksc3ltYm9sQ29sb3I6YSgic3ltYm9sLWNvbG9yIiw2MDI1Miksc3ltYm9sQ29uc3RhbnQ6YSgic3ltYm9sLWNvbnN0YW50Iiw2MDI1Myksc3ltYm9sRW51bU1lbWJlcjphKCJzeW1ib2wtZW51bS1tZW1iZXIiLDYwMjU0KSxzeW1ib2xGaWVsZDphKCJzeW1ib2wtZmllbGQiLDYwMjU1KSxzeW1ib2xGaWxlOmEoInN5bWJvbC1maWxlIiw2MDI1Niksc3ltYm9sSW50ZXJmYWNlOmEoInN5bWJvbC1pbnRlcmZhY2UiLDYwMjU3KSxzeW1ib2xLZXl3b3JkOmEoInN5bWJvbC1rZXl3b3JkIiw2MDI1OCksc3ltYm9sTWlzYzphKCJzeW1ib2wtbWlzYyIsNjAyNTkpLHN5bWJvbE9wZXJhdG9yOmEoInN5bWJvbC1vcGVyYXRvciIsNjAyNjApLHN5bWJvbFByb3BlcnR5OmEoInN5bWJvbC1wcm9wZXJ0eSIsNjAyNjEpLHdyZW5jaDphKCJ3cmVuY2giLDYwMjYxKSx3cmVuY2hTdWJhY3Rpb246YSgid3JlbmNoLXN1YmFjdGlvbiIsNjAyNjEpLHN5bWJvbFNuaXBwZXQ6YSgic3ltYm9sLXNuaXBwZXQiLDYwMjYyKSx0YXNrbGlzdDphKCJ0YXNrbGlzdCIsNjAyNjMpLHRlbGVzY29wZTphKCJ0ZWxlc2NvcGUiLDYwMjY0KSx0ZXh0U2l6ZTphKCJ0ZXh0LXNpemUiLDYwMjY1KSx0aHJlZUJhcnM6YSgidGhyZWUtYmFycyIsNjAyNjYpLHRodW1ic2Rvd246YSgidGh1bWJzZG93biIsNjAyNjcpLHRodW1ic3VwOmEoInRodW1ic3VwIiw2MDI2OCksdG9vbHM6YSgidG9vbHMiLDYwMjY5KSx0cmlhbmdsZURvd246YSgidHJpYW5nbGUtZG93biIsNjAyNzApLHRyaWFuZ2xlTGVmdDphKCJ0cmlhbmdsZS1sZWZ0Iiw2MDI3MSksdHJpYW5nbGVSaWdodDphKCJ0cmlhbmdsZS1yaWdodCIsNjAyNzIpLHRyaWFuZ2xlVXA6YSgidHJpYW5nbGUtdXAiLDYwMjczKSx0d2l0dGVyOmEoInR3aXR0ZXIiLDYwMjc0KSx1bmZvbGQ6YSgidW5mb2xkIiw2MDI3NSksdW5sb2NrOmEoInVubG9jayIsNjAyNzYpLHVubXV0ZTphKCJ1bm11dGUiLDYwMjc3KSx1bnZlcmlmaWVkOmEoInVudmVyaWZpZWQiLDYwMjc4KSx2ZXJpZmllZDphKCJ2ZXJpZmllZCIsNjAyNzkpLHZlcnNpb25zOmEoInZlcnNpb25zIiw2MDI4MCksdm1BY3RpdmU6YSgidm0tYWN0aXZlIiw2MDI4MSksdm1PdXRsaW5lOmEoInZtLW91dGxpbmUiLDYwMjgyKSx2bVJ1bm5pbmc6YSgidm0tcnVubmluZyIsNjAyODMpLHdhdGNoOmEoIndhdGNoIiw2MDI4NCksd2hpdGVzcGFjZTphKCJ3aGl0ZXNwYWNlIiw2MDI4NSksd2hvbGVXb3JkOmEoIndob2xlLXdvcmQiLDYwMjg2KSx3aW5kb3c6YSgid2luZG93Iiw2MDI4Nyksd29yZFdyYXA6YSgid29yZC13cmFwIiw2MDI4OCksem9vbUluOmEoInpvb20taW4iLDYwMjg5KSx6b29tT3V0OmEoInpvb20tb3V0Iiw2MDI5MCksbGlzdEZpbHRlcjphKCJsaXN0LWZpbHRlciIsNjAyOTEpLGxpc3RGbGF0OmEoImxpc3QtZmxhdCIsNjAyOTIpLGxpc3RTZWxlY3Rpb246YSgibGlzdC1zZWxlY3Rpb24iLDYwMjkzKSxzZWxlY3Rpb246YSgic2VsZWN0aW9uIiw2MDI5MyksbGlzdFRyZWU6YSgibGlzdC10cmVlIiw2MDI5NCksZGVidWdCcmVha3BvaW50RnVuY3Rpb25VbnZlcmlmaWVkOmEoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tdW52ZXJpZmllZCIsNjAyOTUpLGRlYnVnQnJlYWtwb2ludEZ1bmN0aW9uOmEoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24iLDYwMjk2KSxkZWJ1Z0JyZWFrcG9pbnRGdW5jdGlvbkRpc2FibGVkOmEoImRlYnVnLWJyZWFrcG9pbnQtZnVuY3Rpb24tZGlzYWJsZWQiLDYwMjk2KSxkZWJ1Z1N0YWNrZnJhbWVBY3RpdmU6YSgiZGVidWctc3RhY2tmcmFtZS1hY3RpdmUiLDYwMjk3KSxjaXJjbGVTbWFsbEZpbGxlZDphKCJjaXJjbGUtc21hbGwtZmlsbGVkIiw2MDI5OCksZGVidWdTdGFja2ZyYW1lRG90OmEoImRlYnVnLXN0YWNrZnJhbWUtZG90Iiw2MDI5OCksdGVybWluYWxEZWNvcmF0aW9uTWFyazphKCJ0ZXJtaW5hbC1kZWNvcmF0aW9uLW1hcmsiLDYwMjk4KSxkZWJ1Z1N0YWNrZnJhbWU6YSgiZGVidWctc3RhY2tmcmFtZSIsNjAyOTkpLGRlYnVnU3RhY2tmcmFtZUZvY3VzZWQ6YSgiZGVidWctc3RhY2tmcmFtZS1mb2N1c2VkIiw2MDI5OSksZGVidWdCcmVha3BvaW50VW5zdXBwb3J0ZWQ6YSgiZGVidWctYnJlYWtwb2ludC11bnN1cHBvcnRlZCIsNjAzMDApLHN5bWJvbFN0cmluZzphKCJzeW1ib2wtc3RyaW5nIiw2MDMwMSksZGVidWdSZXZlcnNlQ29udGludWU6YSgiZGVidWctcmV2ZXJzZS1jb250aW51ZSIsNjAzMDIpLGRlYnVnU3RlcEJhY2s6YSgiZGVidWctc3RlcC1iYWNrIiw2MDMwMyksZGVidWdSZXN0YXJ0RnJhbWU6YSgiZGVidWctcmVzdGFydC1mcmFtZSIsNjAzMDQpLGRlYnVnQWx0OmEoImRlYnVnLWFsdCIsNjAzMDUpLGNhbGxJbmNvbWluZzphKCJjYWxsLWluY29taW5nIiw2MDMwNiksY2FsbE91dGdvaW5nOmEoImNhbGwtb3V0Z29pbmciLDYwMzA3KSxtZW51OmEoIm1lbnUiLDYwMzA4KSxleHBhbmRBbGw6YSgiZXhwYW5kLWFsbCIsNjAzMDkpLGZlZWRiYWNrOmEoImZlZWRiYWNrIiw2MDMxMCksZ2l0UHVsbFJlcXVlc3RSZXZpZXdlcjphKCJnaXQtcHVsbC1yZXF1ZXN0LXJldmlld2VyIiw2MDMxMCksZ3JvdXBCeVJlZlR5cGU6YSgiZ3JvdXAtYnktcmVmLXR5cGUiLDYwMzExKSx1bmdyb3VwQnlSZWZUeXBlOmEoInVuZ3JvdXAtYnktcmVmLXR5cGUiLDYwMzEyKSxhY2NvdW50OmEoImFjY291bnQiLDYwMzEzKSxnaXRQdWxsUmVxdWVzdEFzc2lnbmVlOmEoImdpdC1wdWxsLXJlcXVlc3QtYXNzaWduZWUiLDYwMzEzKSxiZWxsRG90OmEoImJlbGwtZG90Iiw2MDMxNCksZGVidWdDb25zb2xlOmEoImRlYnVnLWNvbnNvbGUiLDYwMzE1KSxsaWJyYXJ5OmEoImxpYnJhcnkiLDYwMzE2KSxvdXRwdXQ6YSgib3V0cHV0Iiw2MDMxNykscnVuQWxsOmEoInJ1bi1hbGwiLDYwMzE4KSxzeW5jSWdub3JlZDphKCJzeW5jLWlnbm9yZWQiLDYwMzE5KSxwaW5uZWQ6YSgicGlubmVkIiw2MDMyMCksZ2l0aHViSW52ZXJ0ZWQ6YSgiZ2l0aHViLWludmVydGVkIiw2MDMyMSksc2VydmVyUHJvY2VzczphKCJzZXJ2ZXItcHJvY2VzcyIsNjAzMjIpLHNlcnZlckVudmlyb25tZW50OmEoInNlcnZlci1lbnZpcm9ubWVudCIsNjAzMjMpLHBhc3M6YSgicGFzcyIsNjAzMjQpLGlzc3VlQ2xvc2VkOmEoImlzc3VlLWNsb3NlZCIsNjAzMjQpLHN0b3BDaXJjbGU6YSgic3RvcC1jaXJjbGUiLDYwMzI1KSxwbGF5Q2lyY2xlOmEoInBsYXktY2lyY2xlIiw2MDMyNikscmVjb3JkOmEoInJlY29yZCIsNjAzMjcpLGRlYnVnQWx0U21hbGw6YSgiZGVidWctYWx0LXNtYWxsIiw2MDMyOCksdm1Db25uZWN0OmEoInZtLWNvbm5lY3QiLDYwMzI5KSxjbG91ZDphKCJjbG91ZCIsNjAzMzApLG1lcmdlOmEoIm1lcmdlIiw2MDMzMSksZXhwb3J0OmEoImV4cG9ydCIsNjAzMzIpLGdyYXBoTGVmdDphKCJncmFwaC1sZWZ0Iiw2MDMzMyksbWFnbmV0OmEoIm1hZ25ldCIsNjAzMzQpLG5vdGVib29rOmEoIm5vdGVib29rIiw2MDMzNSkscmVkbzphKCJyZWRvIiw2MDMzNiksY2hlY2tBbGw6YSgiY2hlY2stYWxsIiw2MDMzNykscGlubmVkRGlydHk6YSgicGlubmVkLWRpcnR5Iiw2MDMzOCkscGFzc0ZpbGxlZDphKCJwYXNzLWZpbGxlZCIsNjAzMzkpLGNpcmNsZUxhcmdlRmlsbGVkOmEoImNpcmNsZS1sYXJnZS1maWxsZWQiLDYwMzQwKSxjaXJjbGVMYXJnZTphKCJjaXJjbGUtbGFyZ2UiLDYwMzQxKSxjaXJjbGVMYXJnZU91dGxpbmU6YSgiY2lyY2xlLWxhcmdlLW91dGxpbmUiLDYwMzQxKSxjb21iaW5lOmEoImNvbWJpbmUiLDYwMzQyKSxnYXRoZXI6YSgiZ2F0aGVyIiw2MDM0MiksdGFibGU6YSgidGFibGUiLDYwMzQzKSx2YXJpYWJsZUdyb3VwOmEoInZhcmlhYmxlLWdyb3VwIiw2MDM0NCksdHlwZUhpZXJhcmNoeTphKCJ0eXBlLWhpZXJhcmNoeSIsNjAzNDUpLHR5cGVIaWVyYXJjaHlTdWI6YSgidHlwZS1oaWVyYXJjaHktc3ViIiw2MDM0NiksdHlwZUhpZXJhcmNoeVN1cGVyOmEoInR5cGUtaGllcmFyY2h5LXN1cGVyIiw2MDM0NyksZ2l0UHVsbFJlcXVlc3RDcmVhdGU6YSgiZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUiLDYwMzQ4KSxydW5BYm92ZTphKCJydW4tYWJvdmUiLDYwMzQ5KSxydW5CZWxvdzphKCJydW4tYmVsb3ciLDYwMzUwKSxub3RlYm9va1RlbXBsYXRlOmEoIm5vdGVib29rLXRlbXBsYXRlIiw2MDM1MSksZGVidWdSZXJ1bjphKCJkZWJ1Zy1yZXJ1biIsNjAzNTIpLHdvcmtzcGFjZVRydXN0ZWQ6YSgid29ya3NwYWNlLXRydXN0ZWQiLDYwMzUzKSx3b3Jrc3BhY2VVbnRydXN0ZWQ6YSgid29ya3NwYWNlLXVudHJ1c3RlZCIsNjAzNTQpLHdvcmtzcGFjZVVua25vd246YSgid29ya3NwYWNlLXVua25vd24iLDYwMzU1KSx0ZXJtaW5hbENtZDphKCJ0ZXJtaW5hbC1jbWQiLDYwMzU2KSx0ZXJtaW5hbERlYmlhbjphKCJ0ZXJtaW5hbC1kZWJpYW4iLDYwMzU3KSx0ZXJtaW5hbExpbnV4OmEoInRlcm1pbmFsLWxpbnV4Iiw2MDM1OCksdGVybWluYWxQb3dlcnNoZWxsOmEoInRlcm1pbmFsLXBvd2Vyc2hlbGwiLDYwMzU5KSx0ZXJtaW5hbFRtdXg6YSgidGVybWluYWwtdG11eCIsNjAzNjApLHRlcm1pbmFsVWJ1bnR1OmEoInRlcm1pbmFsLXVidW50dSIsNjAzNjEpLHRlcm1pbmFsQmFzaDphKCJ0ZXJtaW5hbC1iYXNoIiw2MDM2MiksYXJyb3dTd2FwOmEoImFycm93LXN3YXAiLDYwMzYzKSxjb3B5OmEoImNvcHkiLDYwMzY0KSxwZXJzb25BZGQ6YSgicGVyc29uLWFkZCIsNjAzNjUpLGZpbHRlckZpbGxlZDphKCJmaWx0ZXItZmlsbGVkIiw2MDM2Niksd2FuZDphKCJ3YW5kIiw2MDM2NyksZGVidWdMaW5lQnlMaW5lOmEoImRlYnVnLWxpbmUtYnktbGluZSIsNjAzNjgpLGluc3BlY3Q6YSgiaW5zcGVjdCIsNjAzNjkpLGxheWVyczphKCJsYXllcnMiLDYwMzcwKSxsYXllcnNEb3Q6YSgibGF5ZXJzLWRvdCIsNjAzNzEpLGxheWVyc0FjdGl2ZTphKCJsYXllcnMtYWN0aXZlIiw2MDM3MiksY29tcGFzczphKCJjb21wYXNzIiw2MDM3MyksY29tcGFzc0RvdDphKCJjb21wYXNzLWRvdCIsNjAzNzQpLGNvbXBhc3NBY3RpdmU6YSgiY29tcGFzcy1hY3RpdmUiLDYwMzc1KSxhenVyZTphKCJhenVyZSIsNjAzNzYpLGlzc3VlRHJhZnQ6YSgiaXNzdWUtZHJhZnQiLDYwMzc3KSxnaXRQdWxsUmVxdWVzdENsb3NlZDphKCJnaXQtcHVsbC1yZXF1ZXN0LWNsb3NlZCIsNjAzNzgpLGdpdFB1bGxSZXF1ZXN0RHJhZnQ6YSgiZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdCIsNjAzNzkpLGRlYnVnQWxsOmEoImRlYnVnLWFsbCIsNjAzODApLGRlYnVnQ292ZXJhZ2U6YSgiZGVidWctY292ZXJhZ2UiLDYwMzgxKSxydW5FcnJvcnM6YSgicnVuLWVycm9ycyIsNjAzODIpLGZvbGRlckxpYnJhcnk6YSgiZm9sZGVyLWxpYnJhcnkiLDYwMzgzKSxkZWJ1Z0NvbnRpbnVlU21hbGw6YSgiZGVidWctY29udGludWUtc21hbGwiLDYwMzg0KSxiZWFrZXJTdG9wOmEoImJlYWtlci1zdG9wIiw2MDM4NSksZ3JhcGhMaW5lOmEoImdyYXBoLWxpbmUiLDYwMzg2KSxncmFwaFNjYXR0ZXI6YSgiZ3JhcGgtc2NhdHRlciIsNjAzODcpLHBpZUNoYXJ0OmEoInBpZS1jaGFydCIsNjAzODgpLGJyYWNrZXQ6YSgiYnJhY2tldCIsNjAxNzUpLGJyYWNrZXREb3Q6YSgiYnJhY2tldC1kb3QiLDYwMzg5KSxicmFja2V0RXJyb3I6YSgiYnJhY2tldC1lcnJvciIsNjAzOTApLGxvY2tTbWFsbDphKCJsb2NrLXNtYWxsIiw2MDM5MSksYXp1cmVEZXZvcHM6YSgiYXp1cmUtZGV2b3BzIiw2MDM5MiksdmVyaWZpZWRGaWxsZWQ6YSgidmVyaWZpZWQtZmlsbGVkIiw2MDM5MyksbmV3bGluZTphKCJuZXdsaW5lIiw2MDM5NCksbGF5b3V0OmEoImxheW91dCIsNjAzOTUpLGxheW91dEFjdGl2aXR5YmFyTGVmdDphKCJsYXlvdXQtYWN0aXZpdHliYXItbGVmdCIsNjAzOTYpLGxheW91dEFjdGl2aXR5YmFyUmlnaHQ6YSgibGF5b3V0LWFjdGl2aXR5YmFyLXJpZ2h0Iiw2MDM5NyksbGF5b3V0UGFuZWxMZWZ0OmEoImxheW91dC1wYW5lbC1sZWZ0Iiw2MDM5OCksbGF5b3V0UGFuZWxDZW50ZXI6YSgibGF5b3V0LXBhbmVsLWNlbnRlciIsNjAzOTkpLGxheW91dFBhbmVsSnVzdGlmeTphKCJsYXlvdXQtcGFuZWwtanVzdGlmeSIsNjA0MDApLGxheW91dFBhbmVsUmlnaHQ6YSgibGF5b3V0LXBhbmVsLXJpZ2h0Iiw2MDQwMSksbGF5b3V0UGFuZWw6YSgibGF5b3V0LXBhbmVsIiw2MDQwMiksbGF5b3V0U2lkZWJhckxlZnQ6YSgibGF5b3V0LXNpZGViYXItbGVmdCIsNjA0MDMpLGxheW91dFNpZGViYXJSaWdodDphKCJsYXlvdXQtc2lkZWJhci1yaWdodCIsNjA0MDQpLGxheW91dFN0YXR1c2JhcjphKCJsYXlvdXQtc3RhdHVzYmFyIiw2MDQwNSksbGF5b3V0TWVudWJhcjphKCJsYXlvdXQtbWVudWJhciIsNjA0MDYpLGxheW91dENlbnRlcmVkOmEoImxheW91dC1jZW50ZXJlZCIsNjA0MDcpLHRhcmdldDphKCJ0YXJnZXQiLDYwNDA4KSxpbmRlbnQ6YSgiaW5kZW50Iiw2MDQwOSkscmVjb3JkU21hbGw6YSgicmVjb3JkLXNtYWxsIiw2MDQxMCksZXJyb3JTbWFsbDphKCJlcnJvci1zbWFsbCIsNjA0MTEpLHRlcm1pbmFsRGVjb3JhdGlvbkVycm9yOmEoInRlcm1pbmFsLWRlY29yYXRpb24tZXJyb3IiLDYwNDExKSxhcnJvd0NpcmNsZURvd246YSgiYXJyb3ctY2lyY2xlLWRvd24iLDYwNDEyKSxhcnJvd0NpcmNsZUxlZnQ6YSgiYXJyb3ctY2lyY2xlLWxlZnQiLDYwNDEzKSxhcnJvd0NpcmNsZVJpZ2h0OmEoImFycm93LWNpcmNsZS1yaWdodCIsNjA0MTQpLGFycm93Q2lyY2xlVXA6YSgiYXJyb3ctY2lyY2xlLXVwIiw2MDQxNSksbGF5b3V0U2lkZWJhclJpZ2h0T2ZmOmEoImxheW91dC1zaWRlYmFyLXJpZ2h0LW9mZiIsNjA0MTYpLGxheW91dFBhbmVsT2ZmOmEoImxheW91dC1wYW5lbC1vZmYiLDYwNDE3KSxsYXlvdXRTaWRlYmFyTGVmdE9mZjphKCJsYXlvdXQtc2lkZWJhci1sZWZ0LW9mZiIsNjA0MTgpLGJsYW5rOmEoImJsYW5rIiw2MDQxOSksaGVhcnRGaWxsZWQ6YSgiaGVhcnQtZmlsbGVkIiw2MDQyMCksbWFwOmEoIm1hcCIsNjA0MjEpLG1hcEhvcml6b250YWw6YSgibWFwLWhvcml6b250YWwiLDYwNDIxKSxmb2xkSG9yaXpvbnRhbDphKCJmb2xkLWhvcml6b250YWwiLDYwNDIxKSxtYXBGaWxsZWQ6YSgibWFwLWZpbGxlZCIsNjA0MjIpLG1hcEhvcml6b250YWxGaWxsZWQ6YSgibWFwLWhvcml6b250YWwtZmlsbGVkIiw2MDQyMiksZm9sZEhvcml6b250YWxGaWxsZWQ6YSgiZm9sZC1ob3Jpem9udGFsLWZpbGxlZCIsNjA0MjIpLGNpcmNsZVNtYWxsOmEoImNpcmNsZS1zbWFsbCIsNjA0MjMpLGJlbGxTbGFzaDphKCJiZWxsLXNsYXNoIiw2MDQyNCksYmVsbFNsYXNoRG90OmEoImJlbGwtc2xhc2gtZG90Iiw2MDQyNSksY29tbWVudFVucmVzb2x2ZWQ6YSgiY29tbWVudC11bnJlc29sdmVkIiw2MDQyNiksZ2l0UHVsbFJlcXVlc3RHb1RvQ2hhbmdlczphKCJnaXQtcHVsbC1yZXF1ZXN0LWdvLXRvLWNoYW5nZXMiLDYwNDI3KSxnaXRQdWxsUmVxdWVzdE5ld0NoYW5nZXM6YSgiZ2l0LXB1bGwtcmVxdWVzdC1uZXctY2hhbmdlcyIsNjA0MjgpLHNlYXJjaEZ1enp5OmEoInNlYXJjaC1mdXp6eSIsNjA0MjkpLGNvbW1lbnREcmFmdDphKCJjb21tZW50LWRyYWZ0Iiw2MDQzMCksc2VuZDphKCJzZW5kIiw2MDQzMSksc3BhcmtsZTphKCJzcGFya2xlIiw2MDQzMiksaW5zZXJ0OmEoImluc2VydCIsNjA0MzMpLG1pYzphKCJtaWMiLDYwNDM0KSx0aHVtYnNkb3duRmlsbGVkOmEoInRodW1ic2Rvd24tZmlsbGVkIiw2MDQzNSksdGh1bWJzdXBGaWxsZWQ6YSgidGh1bWJzdXAtZmlsbGVkIiw2MDQzNiksY29mZmVlOmEoImNvZmZlZSIsNjA0MzcpLHNuYWtlOmEoInNuYWtlIiw2MDQzOCksZ2FtZTphKCJnYW1lIiw2MDQzOSksdnI6YSgidnIiLDYwNDQwKSxjaGlwOmEoImNoaXAiLDYwNDQxKSxwaWFubzphKCJwaWFubyIsNjA0NDIpLG11c2ljOmEoIm11c2ljIiw2MDQ0MyksbWljRmlsbGVkOmEoIm1pYy1maWxsZWQiLDYwNDQ0KSxyZXBvRmV0Y2g6YSgicmVwby1mZXRjaCIsNjA0NDUpLGNvcGlsb3Q6YSgiY29waWxvdCIsNjA0NDYpLGxpZ2h0YnVsYlNwYXJrbGU6YSgibGlnaHRidWxiLXNwYXJrbGUiLDYwNDQ3KSxyb2JvdDphKCJyb2JvdCIsNjA0NDgpLHNwYXJrbGVGaWxsZWQ6YSgic3BhcmtsZS1maWxsZWQiLDYwNDQ5KSxkaWZmU2luZ2xlOmEoImRpZmYtc2luZ2xlIiw2MDQ1MCksZGlmZk11bHRpcGxlOmEoImRpZmYtbXVsdGlwbGUiLDYwNDUxKSxzdXJyb3VuZFdpdGg6YSgic3Vycm91bmQtd2l0aCIsNjA0NTIpLHNoYXJlOmEoInNoYXJlIiw2MDQ1MyksZ2l0U3Rhc2g6YSgiZ2l0LXN0YXNoIiw2MDQ1NCksZ2l0U3Rhc2hBcHBseTphKCJnaXQtc3Rhc2gtYXBwbHkiLDYwNDU1KSxnaXRTdGFzaFBvcDphKCJnaXQtc3Rhc2gtcG9wIiw2MDQ1NiksdnNjb2RlOmEoInZzY29kZSIsNjA0NTcpLHZzY29kZUluc2lkZXJzOmEoInZzY29kZS1pbnNpZGVycyIsNjA0NTgpLGNvZGVPc3M6YSgiY29kZS1vc3MiLDYwNDU5KSxydW5Db3ZlcmFnZTphKCJydW4tY292ZXJhZ2UiLDYwNDYwKSxydW5BbGxDb3ZlcmFnZTphKCJydW4tYWxsLWNvdmVyYWdlIiw2MDQ2MSksY292ZXJhZ2U6YSgiY292ZXJhZ2UiLDYwNDYyKSxnaXRodWJQcm9qZWN0OmEoImdpdGh1Yi1wcm9qZWN0Iiw2MDQ2MyksbWFwVmVydGljYWw6YSgibWFwLXZlcnRpY2FsIiw2MDQ2NCksZm9sZFZlcnRpY2FsOmEoImZvbGQtdmVydGljYWwiLDYwNDY0KSxtYXBWZXJ0aWNhbEZpbGxlZDphKCJtYXAtdmVydGljYWwtZmlsbGVkIiw2MDQ2NSksZm9sZFZlcnRpY2FsRmlsbGVkOmEoImZvbGQtdmVydGljYWwtZmlsbGVkIiw2MDQ2NSksZ29Ub1NlYXJjaDphKCJnby10by1zZWFyY2giLDYwNDY2KSxwZXJjZW50YWdlOmEoInBlcmNlbnRhZ2UiLDYwNDY3KSxzb3J0UGVyY2VudGFnZTphKCJzb3J0LXBlcmNlbnRhZ2UiLDYwNDY3KSxhdHRhY2g6YSgiYXR0YWNoIiw2MDQ2OCl9LF9hPXtkaWFsb2dFcnJvcjphKCJkaWFsb2ctZXJyb3IiLCJlcnJvciIpLGRpYWxvZ1dhcm5pbmc6YSgiZGlhbG9nLXdhcm5pbmciLCJ3YXJuaW5nIiksZGlhbG9nSW5mbzphKCJkaWFsb2ctaW5mbyIsImluZm8iKSxkaWFsb2dDbG9zZTphKCJkaWFsb2ctY2xvc2UiLCJjbG9zZSIpLHRyZWVJdGVtRXhwYW5kZWQ6YSgidHJlZS1pdGVtLWV4cGFuZGVkIiwiY2hldnJvbi1kb3duIiksdHJlZUZpbHRlck9uVHlwZU9uOmEoInRyZWUtZmlsdGVyLW9uLXR5cGUtb24iLCJsaXN0LWZpbHRlciIpLHRyZWVGaWx0ZXJPblR5cGVPZmY6YSgidHJlZS1maWx0ZXItb24tdHlwZS1vZmYiLCJsaXN0LXNlbGVjdGlvbiIpLHRyZWVGaWx0ZXJDbGVhcjphKCJ0cmVlLWZpbHRlci1jbGVhciIsImNsb3NlIiksdHJlZUl0ZW1Mb2FkaW5nOmEoInRyZWUtaXRlbS1sb2FkaW5nIiwibG9hZGluZyIpLG1lbnVTZWxlY3Rpb246YSgibWVudS1zZWxlY3Rpb24iLCJjaGVjayIpLG1lbnVTdWJtZW51OmEoIm1lbnUtc3VibWVudSIsImNoZXZyb24tcmlnaHQiKSxtZW51QmFyTW9yZTphKCJtZW51YmFyLW1vcmUiLCJtb3JlIiksc2Nyb2xsYmFyQnV0dG9uTGVmdDphKCJzY3JvbGxiYXItYnV0dG9uLWxlZnQiLCJ0cmlhbmdsZS1sZWZ0Iiksc2Nyb2xsYmFyQnV0dG9uUmlnaHQ6YSgic2Nyb2xsYmFyLWJ1dHRvbi1yaWdodCIsInRyaWFuZ2xlLXJpZ2h0Iiksc2Nyb2xsYmFyQnV0dG9uVXA6YSgic2Nyb2xsYmFyLWJ1dHRvbi11cCIsInRyaWFuZ2xlLXVwIiksc2Nyb2xsYmFyQnV0dG9uRG93bjphKCJzY3JvbGxiYXItYnV0dG9uLWRvd24iLCJ0cmlhbmdsZS1kb3duIiksdG9vbEJhck1vcmU6YSgidG9vbGJhci1tb3JlIiwibW9yZSIpLHF1aWNrSW5wdXRCYWNrOmEoInF1aWNrLWlucHV0LWJhY2siLCJhcnJvdy1sZWZ0IiksZHJvcERvd25CdXR0b246YSgiZHJvcC1kb3duLWJ1dHRvbiIsNjAwODQpLHN5bWJvbEN1c3RvbUNvbG9yOmEoInN5bWJvbC1jdXN0b21jb2xvciIsNjAyNTIpLGV4cG9ydEljb246YSgiZXhwb3J0Iiw2MDMzMiksd29ya3NwYWNlVW5zcGVjaWZpZWQ6YSgid29ya3NwYWNlLXVuc3BlY2lmaWVkIiw2MDM1NSksbmV3TGluZTphKCJuZXdsaW5lIiw2MDM5NCksdGh1bWJzRG93bkZpbGxlZDphKCJ0aHVtYnNkb3duLWZpbGxlZCIsNjA0MzUpLHRodW1ic1VwRmlsbGVkOmEoInRodW1ic3VwLWZpbGxlZCIsNjA0MzYpLGdpdEZldGNoOmEoImdpdC1mZXRjaCIsNjA0NDUpLGxpZ2h0YnVsYlNwYXJrbGVBdXRvZml4OmEoImxpZ2h0YnVsYi1zcGFya2xlLWF1dG9maXgiLDYwNDQ3KSxkZWJ1Z0JyZWFrcG9pbnRQZW5kaW5nOmEoImRlYnVnLWJyZWFrcG9pbnQtcGVuZGluZyIsNjAzNzcpfSxNPXsuLi5iYSwuLi5fYX07Y2xhc3MgY3N7Y29uc3RydWN0b3IoKXt0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cz1uZXcgTWFwLHRoaXMuX2ZhY3Rvcmllcz1uZXcgTWFwLHRoaXMuX29uRGlkQ2hhbmdlPW5ldyBvZSx0aGlzLm9uRGlkQ2hhbmdlPXRoaXMuX29uRGlkQ2hhbmdlLmV2ZW50LHRoaXMuX2NvbG9yTWFwPW51bGx9aGFuZGxlQ2hhbmdlKHQpe3RoaXMuX29uRGlkQ2hhbmdlLmZpcmUoe2NoYW5nZWRMYW5ndWFnZXM6dCxjaGFuZ2VkQ29sb3JNYXA6ITF9KX1yZWdpc3Rlcih0LG4pe3JldHVybiB0aGlzLl90b2tlbml6YXRpb25TdXBwb3J0cy5zZXQodCxuKSx0aGlzLmhhbmRsZUNoYW5nZShbdF0pLGR0KCgpPT57dGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KHQpPT09biYmKHRoaXMuX3Rva2VuaXphdGlvblN1cHBvcnRzLmRlbGV0ZSh0KSx0aGlzLmhhbmRsZUNoYW5nZShbdF0pKX0pfWdldCh0KXtyZXR1cm4gdGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMuZ2V0KHQpfHxudWxsfXJlZ2lzdGVyRmFjdG9yeSh0LG4pe3RoaXMuX2ZhY3Rvcmllcy5nZXQodCk/LmRpc3Bvc2UoKTtjb25zdCBzPW5ldyBwYSh0aGlzLHQsbik7cmV0dXJuIHRoaXMuX2ZhY3Rvcmllcy5zZXQodCxzKSxkdCgoKT0+e2NvbnN0IHI9dGhpcy5fZmFjdG9yaWVzLmdldCh0KTshcnx8ciE9PXN8fCh0aGlzLl9mYWN0b3JpZXMuZGVsZXRlKHQpLHIuZGlzcG9zZSgpKX0pfWFzeW5jIGdldE9yQ3JlYXRlKHQpe2NvbnN0IG49dGhpcy5nZXQodCk7aWYobilyZXR1cm4gbjtjb25zdCBzPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuIXN8fHMuaXNSZXNvbHZlZD9udWxsOihhd2FpdCBzLnJlc29sdmUoKSx0aGlzLmdldCh0KSl9aXNSZXNvbHZlZCh0KXtpZih0aGlzLmdldCh0KSlyZXR1cm4hMDtjb25zdCBzPXRoaXMuX2ZhY3Rvcmllcy5nZXQodCk7cmV0dXJuISEoIXN8fHMuaXNSZXNvbHZlZCl9c2V0Q29sb3JNYXAodCl7dGhpcy5fY29sb3JNYXA9dCx0aGlzLl9vbkRpZENoYW5nZS5maXJlKHtjaGFuZ2VkTGFuZ3VhZ2VzOkFycmF5LmZyb20odGhpcy5fdG9rZW5pemF0aW9uU3VwcG9ydHMua2V5cygpKSxjaGFuZ2VkQ29sb3JNYXA6ITB9KX1nZXRDb2xvck1hcCgpe3JldHVybiB0aGlzLl9jb2xvck1hcH1nZXREZWZhdWx0QmFja2dyb3VuZCgpe3JldHVybiB0aGlzLl9jb2xvck1hcCYmdGhpcy5fY29sb3JNYXAubGVuZ3RoPjI/dGhpcy5fY29sb3JNYXBbMl06bnVsbH19Y2xhc3MgcGEgZXh0ZW5kcyBQZXtnZXQgaXNSZXNvbHZlZCgpe3JldHVybiB0aGlzLl9pc1Jlc29sdmVkfWNvbnN0cnVjdG9yKHQsbixzKXtzdXBlcigpLHRoaXMuX3JlZ2lzdHJ5PXQsdGhpcy5fbGFuZ3VhZ2VJZD1uLHRoaXMuX2ZhY3Rvcnk9cyx0aGlzLl9pc0Rpc3Bvc2VkPSExLHRoaXMuX3Jlc29sdmVQcm9taXNlPW51bGwsdGhpcy5faXNSZXNvbHZlZD0hMX1kaXNwb3NlKCl7dGhpcy5faXNEaXNwb3NlZD0hMCxzdXBlci5kaXNwb3NlKCl9YXN5bmMgcmVzb2x2ZSgpe3JldHVybiB0aGlzLl9yZXNvbHZlUHJvbWlzZXx8KHRoaXMuX3Jlc29sdmVQcm9taXNlPXRoaXMuX2NyZWF0ZSgpKSx0aGlzLl9yZXNvbHZlUHJvbWlzZX1hc3luYyBfY3JlYXRlKCl7Y29uc3QgdD1hd2FpdCB0aGlzLl9mYWN0b3J5LnRva2VuaXphdGlvblN1cHBvcnQ7dGhpcy5faXNSZXNvbHZlZD0hMCx0JiYhdGhpcy5faXNEaXNwb3NlZCYmdGhpcy5fcmVnaXN0ZXIodGhpcy5fcmVnaXN0cnkucmVnaXN0ZXIodGhpcy5fbGFuZ3VhZ2VJZCx0KSl9fWNsYXNzIHhhe2NvbnN0cnVjdG9yKHQsbixzKXt0aGlzLm9mZnNldD10LHRoaXMudHlwZT1uLHRoaXMubGFuZ3VhZ2U9cyx0aGlzLl90b2tlbkJyYW5kPXZvaWQgMH10b1N0cmluZygpe3JldHVybiIoIit0aGlzLm9mZnNldCsiLCAiK3RoaXMudHlwZSsiKSJ9fXZhciBoczsoZnVuY3Rpb24oZSl7ZVtlLkluY3JlYXNlPTBdPSJJbmNyZWFzZSIsZVtlLkRlY3JlYXNlPTFdPSJEZWNyZWFzZSJ9KShoc3x8KGhzPXt9KSk7dmFyIGZzOyhmdW5jdGlvbihlKXtjb25zdCB0PW5ldyBNYXA7dC5zZXQoMCxNLnN5bWJvbE1ldGhvZCksdC5zZXQoMSxNLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgyLE0uc3ltYm9sQ29uc3RydWN0b3IpLHQuc2V0KDMsTS5zeW1ib2xGaWVsZCksdC5zZXQoNCxNLnN5bWJvbFZhcmlhYmxlKSx0LnNldCg1LE0uc3ltYm9sQ2xhc3MpLHQuc2V0KDYsTS5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDcsTS5zeW1ib2xJbnRlcmZhY2UpLHQuc2V0KDgsTS5zeW1ib2xNb2R1bGUpLHQuc2V0KDksTS5zeW1ib2xQcm9wZXJ0eSksdC5zZXQoMTAsTS5zeW1ib2xFdmVudCksdC5zZXQoMTEsTS5zeW1ib2xPcGVyYXRvciksdC5zZXQoMTIsTS5zeW1ib2xVbml0KSx0LnNldCgxMyxNLnN5bWJvbFZhbHVlKSx0LnNldCgxNSxNLnN5bWJvbEVudW0pLHQuc2V0KDE0LE0uc3ltYm9sQ29uc3RhbnQpLHQuc2V0KDE1LE0uc3ltYm9sRW51bSksdC5zZXQoMTYsTS5zeW1ib2xFbnVtTWVtYmVyKSx0LnNldCgxNyxNLnN5bWJvbEtleXdvcmQpLHQuc2V0KDI3LE0uc3ltYm9sU25pcHBldCksdC5zZXQoMTgsTS5zeW1ib2xUZXh0KSx0LnNldCgxOSxNLnN5bWJvbENvbG9yKSx0LnNldCgyMCxNLnN5bWJvbEZpbGUpLHQuc2V0KDIxLE0uc3ltYm9sUmVmZXJlbmNlKSx0LnNldCgyMixNLnN5bWJvbEN1c3RvbUNvbG9yKSx0LnNldCgyMyxNLnN5bWJvbEZvbGRlciksdC5zZXQoMjQsTS5zeW1ib2xUeXBlUGFyYW1ldGVyKSx0LnNldCgyNSxNLmFjY291bnQpLHQuc2V0KDI2LE0uaXNzdWVzKTtmdW5jdGlvbiBuKGkpe2xldCBvPXQuZ2V0KGkpO3JldHVybiBvfHwoY29uc29sZS5pbmZvKCJObyBjb2RpY29uIGZvdW5kIGZvciBDb21wbGV0aW9uSXRlbUtpbmQgIitpKSxvPU0uc3ltYm9sUHJvcGVydHkpLG99ZS50b0ljb249bjtjb25zdCBzPW5ldyBNYXA7cy5zZXQoIm1ldGhvZCIsMCkscy5zZXQoImZ1bmN0aW9uIiwxKSxzLnNldCgiY29uc3RydWN0b3IiLDIpLHMuc2V0KCJmaWVsZCIsMykscy5zZXQoInZhcmlhYmxlIiw0KSxzLnNldCgiY2xhc3MiLDUpLHMuc2V0KCJzdHJ1Y3QiLDYpLHMuc2V0KCJpbnRlcmZhY2UiLDcpLHMuc2V0KCJtb2R1bGUiLDgpLHMuc2V0KCJwcm9wZXJ0eSIsOSkscy5zZXQoImV2ZW50IiwxMCkscy5zZXQoIm9wZXJhdG9yIiwxMSkscy5zZXQoInVuaXQiLDEyKSxzLnNldCgidmFsdWUiLDEzKSxzLnNldCgiY29uc3RhbnQiLDE0KSxzLnNldCgiZW51bSIsMTUpLHMuc2V0KCJlbnVtLW1lbWJlciIsMTYpLHMuc2V0KCJlbnVtTWVtYmVyIiwxNikscy5zZXQoImtleXdvcmQiLDE3KSxzLnNldCgic25pcHBldCIsMjcpLHMuc2V0KCJ0ZXh0IiwxOCkscy5zZXQoImNvbG9yIiwxOSkscy5zZXQoImZpbGUiLDIwKSxzLnNldCgicmVmZXJlbmNlIiwyMSkscy5zZXQoImN1c3RvbWNvbG9yIiwyMikscy5zZXQoImZvbGRlciIsMjMpLHMuc2V0KCJ0eXBlLXBhcmFtZXRlciIsMjQpLHMuc2V0KCJ0eXBlUGFyYW1ldGVyIiwyNCkscy5zZXQoImFjY291bnQiLDI1KSxzLnNldCgiaXNzdWUiLDI2KTtmdW5jdGlvbiByKGksbyl7bGV0IGw9cy5nZXQoaSk7cmV0dXJuIHR5cGVvZiBsPiJ1IiYmIW8mJihsPTkpLGx9ZS5mcm9tU3RyaW5nPXJ9KShmc3x8KGZzPXt9KSk7dmFyIGRzOyhmdW5jdGlvbihlKXtlW2UuQXV0b21hdGljPTBdPSJBdXRvbWF0aWMiLGVbZS5FeHBsaWNpdD0xXT0iRXhwbGljaXQifSkoZHN8fChkcz17fSkpO3ZhciBtczsoZnVuY3Rpb24oZSl7ZVtlLkF1dG9tYXRpYz0wXT0iQXV0b21hdGljIixlW2UuUGFzdGVBcz0xXT0iUGFzdGVBcyJ9KShtc3x8KG1zPXt9KSk7dmFyIGdzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTFdPSJJbnZva2UiLGVbZS5UcmlnZ2VyQ2hhcmFjdGVyPTJdPSJUcmlnZ2VyQ2hhcmFjdGVyIixlW2UuQ29udGVudENoYW5nZT0zXT0iQ29udGVudENoYW5nZSJ9KShnc3x8KGdzPXt9KSk7dmFyIGJzOyhmdW5jdGlvbihlKXtlW2UuVGV4dD0wXT0iVGV4dCIsZVtlLlJlYWQ9MV09IlJlYWQiLGVbZS5Xcml0ZT0yXT0iV3JpdGUifSkoYnN8fChicz17fSkpLHooIkFycmF5IiwiYXJyYXkiKSx6KCJCb29sZWFuIiwiYm9vbGVhbiIpLHooIkNsYXNzIiwiY2xhc3MiKSx6KCJDb25zdGFudCIsImNvbnN0YW50IikseigiQ29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvciIpLHooIkVudW0iLCJlbnVtZXJhdGlvbiIpLHooIkVudW1NZW1iZXIiLCJlbnVtZXJhdGlvbiBtZW1iZXIiKSx6KCJFdmVudCIsImV2ZW50IikseigiRmllbGQiLCJmaWVsZCIpLHooIkZpbGUiLCJmaWxlIikseigiRnVuY3Rpb24iLCJmdW5jdGlvbiIpLHooIkludGVyZmFjZSIsImludGVyZmFjZSIpLHooIktleSIsImtleSIpLHooIk1ldGhvZCIsIm1ldGhvZCIpLHooIk1vZHVsZSIsIm1vZHVsZSIpLHooIk5hbWVzcGFjZSIsIm5hbWVzcGFjZSIpLHooIk51bGwiLCJudWxsIikseigiTnVtYmVyIiwibnVtYmVyIikseigiT2JqZWN0Iiwib2JqZWN0IikseigiT3BlcmF0b3IiLCJvcGVyYXRvciIpLHooIlBhY2thZ2UiLCJwYWNrYWdlIikseigiUHJvcGVydHkiLCJwcm9wZXJ0eSIpLHooIlN0cmluZyIsInN0cmluZyIpLHooIlN0cnVjdCIsInN0cnVjdCIpLHooIlR5cGVQYXJhbWV0ZXIiLCJ0eXBlIHBhcmFtZXRlciIpLHooIlZhcmlhYmxlIiwidmFyaWFibGUiKTt2YXIgX3M7KGZ1bmN0aW9uKGUpe2NvbnN0IHQ9bmV3IE1hcDt0LnNldCgwLE0uc3ltYm9sRmlsZSksdC5zZXQoMSxNLnN5bWJvbE1vZHVsZSksdC5zZXQoMixNLnN5bWJvbE5hbWVzcGFjZSksdC5zZXQoMyxNLnN5bWJvbFBhY2thZ2UpLHQuc2V0KDQsTS5zeW1ib2xDbGFzcyksdC5zZXQoNSxNLnN5bWJvbE1ldGhvZCksdC5zZXQoNixNLnN5bWJvbFByb3BlcnR5KSx0LnNldCg3LE0uc3ltYm9sRmllbGQpLHQuc2V0KDgsTS5zeW1ib2xDb25zdHJ1Y3RvciksdC5zZXQoOSxNLnN5bWJvbEVudW0pLHQuc2V0KDEwLE0uc3ltYm9sSW50ZXJmYWNlKSx0LnNldCgxMSxNLnN5bWJvbEZ1bmN0aW9uKSx0LnNldCgxMixNLnN5bWJvbFZhcmlhYmxlKSx0LnNldCgxMyxNLnN5bWJvbENvbnN0YW50KSx0LnNldCgxNCxNLnN5bWJvbFN0cmluZyksdC5zZXQoMTUsTS5zeW1ib2xOdW1iZXIpLHQuc2V0KDE2LE0uc3ltYm9sQm9vbGVhbiksdC5zZXQoMTcsTS5zeW1ib2xBcnJheSksdC5zZXQoMTgsTS5zeW1ib2xPYmplY3QpLHQuc2V0KDE5LE0uc3ltYm9sS2V5KSx0LnNldCgyMCxNLnN5bWJvbE51bGwpLHQuc2V0KDIxLE0uc3ltYm9sRW51bU1lbWJlciksdC5zZXQoMjIsTS5zeW1ib2xTdHJ1Y3QpLHQuc2V0KDIzLE0uc3ltYm9sRXZlbnQpLHQuc2V0KDI0LE0uc3ltYm9sT3BlcmF0b3IpLHQuc2V0KDI1LE0uc3ltYm9sVHlwZVBhcmFtZXRlcik7ZnVuY3Rpb24gbihzKXtsZXQgcj10LmdldChzKTtyZXR1cm4gcnx8KGNvbnNvbGUuaW5mbygiTm8gY29kaWNvbiBmb3VuZCBmb3IgU3ltYm9sS2luZCAiK3MpLHI9TS5zeW1ib2xQcm9wZXJ0eSkscn1lLnRvSWNvbj1ufSkoX3N8fChfcz17fSkpO2NvbnN0IGNlPWNsYXNzIGNle3N0YXRpYyBmcm9tVmFsdWUodCl7c3dpdGNoKHQpe2Nhc2UiY29tbWVudCI6cmV0dXJuIGNlLkNvbW1lbnQ7Y2FzZSJpbXBvcnRzIjpyZXR1cm4gY2UuSW1wb3J0cztjYXNlInJlZ2lvbiI6cmV0dXJuIGNlLlJlZ2lvbn1yZXR1cm4gbmV3IGNlKHQpfWNvbnN0cnVjdG9yKHQpe3RoaXMudmFsdWU9dH19O2NlLkNvbW1lbnQ9bmV3IGNlKCJjb21tZW50IiksY2UuSW1wb3J0cz1uZXcgY2UoImltcG9ydHMiKSxjZS5SZWdpb249bmV3IGNlKCJyZWdpb24iKTtsZXQgcHM9Y2U7dmFyIHhzOyhmdW5jdGlvbihlKXtlW2UuQUlHZW5lcmF0ZWQ9MV09IkFJR2VuZXJhdGVkIn0pKHhzfHwoeHM9e30pKTt2YXIgd3M7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLkF1dG9tYXRpYz0xXT0iQXV0b21hdGljIn0pKHdzfHwod3M9e30pKTt2YXIgTHM7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQobil7cmV0dXJuIW58fHR5cGVvZiBuIT0ib2JqZWN0Ij8hMTp0eXBlb2Ygbi5pZD09InN0cmluZyImJnR5cGVvZiBuLnRpdGxlPT0ic3RyaW5nIn1lLmlzPXR9KShMc3x8KExzPXt9KSk7dmFyIHZzOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKHZzfHwodnM9e30pKSxuZXcgY3MsbmV3IGNzO3ZhciBOczsoZnVuY3Rpb24oZSl7ZVtlLkludm9rZT0wXT0iSW52b2tlIixlW2UuQXV0b21hdGljPTFdPSJBdXRvbWF0aWMifSkoTnN8fChOcz17fSkpO3ZhciBTczsoZnVuY3Rpb24oZSl7ZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5EaXNhYmxlZD0xXT0iRGlzYWJsZWQiLGVbZS5FbmFibGVkPTJdPSJFbmFibGVkIn0pKFNzfHwoU3M9e30pKTt2YXIgQ3M7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLkF1dG89Ml09IkF1dG8ifSkoQ3N8fChDcz17fSkpO3ZhciBBczsoZnVuY3Rpb24oZSl7ZVtlLk5vbmU9MF09Ik5vbmUiLGVbZS5LZWVwV2hpdGVzcGFjZT0xXT0iS2VlcFdoaXRlc3BhY2UiLGVbZS5JbnNlcnRBc1NuaXBwZXQ9NF09Ikluc2VydEFzU25pcHBldCJ9KShBc3x8KEFzPXt9KSk7dmFyIFJzOyhmdW5jdGlvbihlKXtlW2UuTWV0aG9kPTBdPSJNZXRob2QiLGVbZS5GdW5jdGlvbj0xXT0iRnVuY3Rpb24iLGVbZS5Db25zdHJ1Y3Rvcj0yXT0iQ29uc3RydWN0b3IiLGVbZS5GaWVsZD0zXT0iRmllbGQiLGVbZS5WYXJpYWJsZT00XT0iVmFyaWFibGUiLGVbZS5DbGFzcz01XT0iQ2xhc3MiLGVbZS5TdHJ1Y3Q9Nl09IlN0cnVjdCIsZVtlLkludGVyZmFjZT03XT0iSW50ZXJmYWNlIixlW2UuTW9kdWxlPThdPSJNb2R1bGUiLGVbZS5Qcm9wZXJ0eT05XT0iUHJvcGVydHkiLGVbZS5FdmVudD0xMF09IkV2ZW50IixlW2UuT3BlcmF0b3I9MTFdPSJPcGVyYXRvciIsZVtlLlVuaXQ9MTJdPSJVbml0IixlW2UuVmFsdWU9MTNdPSJWYWx1ZSIsZVtlLkNvbnN0YW50PTE0XT0iQ29uc3RhbnQiLGVbZS5FbnVtPTE1XT0iRW51bSIsZVtlLkVudW1NZW1iZXI9MTZdPSJFbnVtTWVtYmVyIixlW2UuS2V5d29yZD0xN109IktleXdvcmQiLGVbZS5UZXh0PTE4XT0iVGV4dCIsZVtlLkNvbG9yPTE5XT0iQ29sb3IiLGVbZS5GaWxlPTIwXT0iRmlsZSIsZVtlLlJlZmVyZW5jZT0yMV09IlJlZmVyZW5jZSIsZVtlLkN1c3RvbWNvbG9yPTIyXT0iQ3VzdG9tY29sb3IiLGVbZS5Gb2xkZXI9MjNdPSJGb2xkZXIiLGVbZS5UeXBlUGFyYW1ldGVyPTI0XT0iVHlwZVBhcmFtZXRlciIsZVtlLlVzZXI9MjVdPSJVc2VyIixlW2UuSXNzdWU9MjZdPSJJc3N1ZSIsZVtlLlNuaXBwZXQ9MjddPSJTbmlwcGV0In0pKFJzfHwoUnM9e30pKTt2YXIgeXM7KGZ1bmN0aW9uKGUpe2VbZS5EZXByZWNhdGVkPTFdPSJEZXByZWNhdGVkIn0pKHlzfHwoeXM9e30pKTt2YXIgRXM7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MF09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9MV09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5UcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zPTJdPSJUcmlnZ2VyRm9ySW5jb21wbGV0ZUNvbXBsZXRpb25zIn0pKEVzfHwoRXM9e30pKTt2YXIgTXM7KGZ1bmN0aW9uKGUpe2VbZS5FWEFDVD0wXT0iRVhBQ1QiLGVbZS5BQk9WRT0xXT0iQUJPVkUiLGVbZS5CRUxPVz0yXT0iQkVMT1cifSkoTXN8fChNcz17fSkpO3ZhciBrczsoZnVuY3Rpb24oZSl7ZVtlLk5vdFNldD0wXT0iTm90U2V0IixlW2UuQ29udGVudEZsdXNoPTFdPSJDb250ZW50Rmx1c2giLGVbZS5SZWNvdmVyRnJvbU1hcmtlcnM9Ml09IlJlY292ZXJGcm9tTWFya2VycyIsZVtlLkV4cGxpY2l0PTNdPSJFeHBsaWNpdCIsZVtlLlBhc3RlPTRdPSJQYXN0ZSIsZVtlLlVuZG89NV09IlVuZG8iLGVbZS5SZWRvPTZdPSJSZWRvIn0pKGtzfHwoa3M9e30pKTt2YXIgUHM7KGZ1bmN0aW9uKGUpe2VbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKFBzfHwoUHM9e30pKTt2YXIgRnM7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0PTBdPSJUZXh0IixlW2UuUmVhZD0xXT0iUmVhZCIsZVtlLldyaXRlPTJdPSJXcml0ZSJ9KShGc3x8KEZzPXt9KSk7dmFyIERzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLktlZXA9MV09IktlZXAiLGVbZS5CcmFja2V0cz0yXT0iQnJhY2tldHMiLGVbZS5BZHZhbmNlZD0zXT0iQWR2YW5jZWQiLGVbZS5GdWxsPTRdPSJGdWxsIn0pKERzfHwoRHM9e30pKTt2YXIgVHM7KGZ1bmN0aW9uKGUpe2VbZS5hY2NlcHRTdWdnZXN0aW9uT25Db21taXRDaGFyYWN0ZXI9MF09ImFjY2VwdFN1Z2dlc3Rpb25PbkNvbW1pdENoYXJhY3RlciIsZVtlLmFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyPTFdPSJhY2NlcHRTdWdnZXN0aW9uT25FbnRlciIsZVtlLmFjY2Vzc2liaWxpdHlTdXBwb3J0PTJdPSJhY2Nlc3NpYmlsaXR5U3VwcG9ydCIsZVtlLmFjY2Vzc2liaWxpdHlQYWdlU2l6ZT0zXT0iYWNjZXNzaWJpbGl0eVBhZ2VTaXplIixlW2UuYXJpYUxhYmVsPTRdPSJhcmlhTGFiZWwiLGVbZS5hcmlhUmVxdWlyZWQ9NV09ImFyaWFSZXF1aXJlZCIsZVtlLmF1dG9DbG9zaW5nQnJhY2tldHM9Nl09ImF1dG9DbG9zaW5nQnJhY2tldHMiLGVbZS5hdXRvQ2xvc2luZ0NvbW1lbnRzPTddPSJhdXRvQ2xvc2luZ0NvbW1lbnRzIixlW2Uuc2NyZWVuUmVhZGVyQW5ub3VuY2VJbmxpbmVTdWdnZXN0aW9uPThdPSJzY3JlZW5SZWFkZXJBbm5vdW5jZUlubGluZVN1Z2dlc3Rpb24iLGVbZS5hdXRvQ2xvc2luZ0RlbGV0ZT05XT0iYXV0b0Nsb3NpbmdEZWxldGUiLGVbZS5hdXRvQ2xvc2luZ092ZXJ0eXBlPTEwXT0iYXV0b0Nsb3NpbmdPdmVydHlwZSIsZVtlLmF1dG9DbG9zaW5nUXVvdGVzPTExXT0iYXV0b0Nsb3NpbmdRdW90ZXMiLGVbZS5hdXRvSW5kZW50PTEyXT0iYXV0b0luZGVudCIsZVtlLmF1dG9tYXRpY0xheW91dD0xM109ImF1dG9tYXRpY0xheW91dCIsZVtlLmF1dG9TdXJyb3VuZD0xNF09ImF1dG9TdXJyb3VuZCIsZVtlLmJyYWNrZXRQYWlyQ29sb3JpemF0aW9uPTE1XT0iYnJhY2tldFBhaXJDb2xvcml6YXRpb24iLGVbZS5ndWlkZXM9MTZdPSJndWlkZXMiLGVbZS5jb2RlTGVucz0xN109ImNvZGVMZW5zIixlW2UuY29kZUxlbnNGb250RmFtaWx5PTE4XT0iY29kZUxlbnNGb250RmFtaWx5IixlW2UuY29kZUxlbnNGb250U2l6ZT0xOV09ImNvZGVMZW5zRm9udFNpemUiLGVbZS5jb2xvckRlY29yYXRvcnM9MjBdPSJjb2xvckRlY29yYXRvcnMiLGVbZS5jb2xvckRlY29yYXRvcnNMaW1pdD0yMV09ImNvbG9yRGVjb3JhdG9yc0xpbWl0IixlW2UuY29sdW1uU2VsZWN0aW9uPTIyXT0iY29sdW1uU2VsZWN0aW9uIixlW2UuY29tbWVudHM9MjNdPSJjb21tZW50cyIsZVtlLmNvbnRleHRtZW51PTI0XT0iY29udGV4dG1lbnUiLGVbZS5jb3B5V2l0aFN5bnRheEhpZ2hsaWdodGluZz0yNV09ImNvcHlXaXRoU3ludGF4SGlnaGxpZ2h0aW5nIixlW2UuY3Vyc29yQmxpbmtpbmc9MjZdPSJjdXJzb3JCbGlua2luZyIsZVtlLmN1cnNvclNtb290aENhcmV0QW5pbWF0aW9uPTI3XT0iY3Vyc29yU21vb3RoQ2FyZXRBbmltYXRpb24iLGVbZS5jdXJzb3JTdHlsZT0yOF09ImN1cnNvclN0eWxlIixlW2UuY3Vyc29yU3Vycm91bmRpbmdMaW5lcz0yOV09ImN1cnNvclN1cnJvdW5kaW5nTGluZXMiLGVbZS5jdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGU9MzBdPSJjdXJzb3JTdXJyb3VuZGluZ0xpbmVzU3R5bGUiLGVbZS5jdXJzb3JXaWR0aD0zMV09ImN1cnNvcldpZHRoIixlW2UuZGlzYWJsZUxheWVySGludGluZz0zMl09ImRpc2FibGVMYXllckhpbnRpbmciLGVbZS5kaXNhYmxlTW9ub3NwYWNlT3B0aW1pemF0aW9ucz0zM109ImRpc2FibGVNb25vc3BhY2VPcHRpbWl6YXRpb25zIixlW2UuZG9tUmVhZE9ubHk9MzRdPSJkb21SZWFkT25seSIsZVtlLmRyYWdBbmREcm9wPTM1XT0iZHJhZ0FuZERyb3AiLGVbZS5kcm9wSW50b0VkaXRvcj0zNl09ImRyb3BJbnRvRWRpdG9yIixlW2UuZW1wdHlTZWxlY3Rpb25DbGlwYm9hcmQ9MzddPSJlbXB0eVNlbGVjdGlvbkNsaXBib2FyZCIsZVtlLmV4cGVyaW1lbnRhbFdoaXRlc3BhY2VSZW5kZXJpbmc9MzhdPSJleHBlcmltZW50YWxXaGl0ZXNwYWNlUmVuZGVyaW5nIixlW2UuZXh0cmFFZGl0b3JDbGFzc05hbWU9MzldPSJleHRyYUVkaXRvckNsYXNzTmFtZSIsZVtlLmZhc3RTY3JvbGxTZW5zaXRpdml0eT00MF09ImZhc3RTY3JvbGxTZW5zaXRpdml0eSIsZVtlLmZpbmQ9NDFdPSJmaW5kIixlW2UuZml4ZWRPdmVyZmxvd1dpZGdldHM9NDJdPSJmaXhlZE92ZXJmbG93V2lkZ2V0cyIsZVtlLmZvbGRpbmc9NDNdPSJmb2xkaW5nIixlW2UuZm9sZGluZ1N0cmF0ZWd5PTQ0XT0iZm9sZGluZ1N0cmF0ZWd5IixlW2UuZm9sZGluZ0hpZ2hsaWdodD00NV09ImZvbGRpbmdIaWdobGlnaHQiLGVbZS5mb2xkaW5nSW1wb3J0c0J5RGVmYXVsdD00Nl09ImZvbGRpbmdJbXBvcnRzQnlEZWZhdWx0IixlW2UuZm9sZGluZ01heGltdW1SZWdpb25zPTQ3XT0iZm9sZGluZ01heGltdW1SZWdpb25zIixlW2UudW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lPTQ4XT0idW5mb2xkT25DbGlja0FmdGVyRW5kT2ZMaW5lIixlW2UuZm9udEZhbWlseT00OV09ImZvbnRGYW1pbHkiLGVbZS5mb250SW5mbz01MF09ImZvbnRJbmZvIixlW2UuZm9udExpZ2F0dXJlcz01MV09ImZvbnRMaWdhdHVyZXMiLGVbZS5mb250U2l6ZT01Ml09ImZvbnRTaXplIixlW2UuZm9udFdlaWdodD01M109ImZvbnRXZWlnaHQiLGVbZS5mb250VmFyaWF0aW9ucz01NF09ImZvbnRWYXJpYXRpb25zIixlW2UuZm9ybWF0T25QYXN0ZT01NV09ImZvcm1hdE9uUGFzdGUiLGVbZS5mb3JtYXRPblR5cGU9NTZdPSJmb3JtYXRPblR5cGUiLGVbZS5nbHlwaE1hcmdpbj01N109ImdseXBoTWFyZ2luIixlW2UuZ290b0xvY2F0aW9uPTU4XT0iZ290b0xvY2F0aW9uIixlW2UuaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcj01OV09ImhpZGVDdXJzb3JJbk92ZXJ2aWV3UnVsZXIiLGVbZS5ob3Zlcj02MF09ImhvdmVyIixlW2UuaW5EaWZmRWRpdG9yPTYxXT0iaW5EaWZmRWRpdG9yIixlW2UuaW5saW5lU3VnZ2VzdD02Ml09ImlubGluZVN1Z2dlc3QiLGVbZS5pbmxpbmVFZGl0PTYzXT0iaW5saW5lRWRpdCIsZVtlLmxldHRlclNwYWNpbmc9NjRdPSJsZXR0ZXJTcGFjaW5nIixlW2UubGlnaHRidWxiPTY1XT0ibGlnaHRidWxiIixlW2UubGluZURlY29yYXRpb25zV2lkdGg9NjZdPSJsaW5lRGVjb3JhdGlvbnNXaWR0aCIsZVtlLmxpbmVIZWlnaHQ9NjddPSJsaW5lSGVpZ2h0IixlW2UubGluZU51bWJlcnM9NjhdPSJsaW5lTnVtYmVycyIsZVtlLmxpbmVOdW1iZXJzTWluQ2hhcnM9NjldPSJsaW5lTnVtYmVyc01pbkNoYXJzIixlW2UubGlua2VkRWRpdGluZz03MF09ImxpbmtlZEVkaXRpbmciLGVbZS5saW5rcz03MV09ImxpbmtzIixlW2UubWF0Y2hCcmFja2V0cz03Ml09Im1hdGNoQnJhY2tldHMiLGVbZS5taW5pbWFwPTczXT0ibWluaW1hcCIsZVtlLm1vdXNlU3R5bGU9NzRdPSJtb3VzZVN0eWxlIixlW2UubW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5PTc1XT0ibW91c2VXaGVlbFNjcm9sbFNlbnNpdGl2aXR5IixlW2UubW91c2VXaGVlbFpvb209NzZdPSJtb3VzZVdoZWVsWm9vbSIsZVtlLm11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZz03N109Im11bHRpQ3Vyc29yTWVyZ2VPdmVybGFwcGluZyIsZVtlLm11bHRpQ3Vyc29yTW9kaWZpZXI9NzhdPSJtdWx0aUN1cnNvck1vZGlmaWVyIixlW2UubXVsdGlDdXJzb3JQYXN0ZT03OV09Im11bHRpQ3Vyc29yUGFzdGUiLGVbZS5tdWx0aUN1cnNvckxpbWl0PTgwXT0ibXVsdGlDdXJzb3JMaW1pdCIsZVtlLm9jY3VycmVuY2VzSGlnaGxpZ2h0PTgxXT0ib2NjdXJyZW5jZXNIaWdobGlnaHQiLGVbZS5vdmVydmlld1J1bGVyQm9yZGVyPTgyXT0ib3ZlcnZpZXdSdWxlckJvcmRlciIsZVtlLm92ZXJ2aWV3UnVsZXJMYW5lcz04M109Im92ZXJ2aWV3UnVsZXJMYW5lcyIsZVtlLnBhZGRpbmc9ODRdPSJwYWRkaW5nIixlW2UucGFzdGVBcz04NV09InBhc3RlQXMiLGVbZS5wYXJhbWV0ZXJIaW50cz04Nl09InBhcmFtZXRlckhpbnRzIixlW2UucGVla1dpZGdldERlZmF1bHRGb2N1cz04N109InBlZWtXaWRnZXREZWZhdWx0Rm9jdXMiLGVbZS5wbGFjZWhvbGRlcj04OF09InBsYWNlaG9sZGVyIixlW2UuZGVmaW5pdGlvbkxpbmtPcGVuc0luUGVlaz04OV09ImRlZmluaXRpb25MaW5rT3BlbnNJblBlZWsiLGVbZS5xdWlja1N1Z2dlc3Rpb25zPTkwXT0icXVpY2tTdWdnZXN0aW9ucyIsZVtlLnF1aWNrU3VnZ2VzdGlvbnNEZWxheT05MV09InF1aWNrU3VnZ2VzdGlvbnNEZWxheSIsZVtlLnJlYWRPbmx5PTkyXT0icmVhZE9ubHkiLGVbZS5yZWFkT25seU1lc3NhZ2U9OTNdPSJyZWFkT25seU1lc3NhZ2UiLGVbZS5yZW5hbWVPblR5cGU9OTRdPSJyZW5hbWVPblR5cGUiLGVbZS5yZW5kZXJDb250cm9sQ2hhcmFjdGVycz05NV09InJlbmRlckNvbnRyb2xDaGFyYWN0ZXJzIixlW2UucmVuZGVyRmluYWxOZXdsaW5lPTk2XT0icmVuZGVyRmluYWxOZXdsaW5lIixlW2UucmVuZGVyTGluZUhpZ2hsaWdodD05N109InJlbmRlckxpbmVIaWdobGlnaHQiLGVbZS5yZW5kZXJMaW5lSGlnaGxpZ2h0T25seVdoZW5Gb2N1cz05OF09InJlbmRlckxpbmVIaWdobGlnaHRPbmx5V2hlbkZvY3VzIixlW2UucmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zPTk5XT0icmVuZGVyVmFsaWRhdGlvbkRlY29yYXRpb25zIixlW2UucmVuZGVyV2hpdGVzcGFjZT0xMDBdPSJyZW5kZXJXaGl0ZXNwYWNlIixlW2UucmV2ZWFsSG9yaXpvbnRhbFJpZ2h0UGFkZGluZz0xMDFdPSJyZXZlYWxIb3Jpem9udGFsUmlnaHRQYWRkaW5nIixlW2Uucm91bmRlZFNlbGVjdGlvbj0xMDJdPSJyb3VuZGVkU2VsZWN0aW9uIixlW2UucnVsZXJzPTEwM109InJ1bGVycyIsZVtlLnNjcm9sbGJhcj0xMDRdPSJzY3JvbGxiYXIiLGVbZS5zY3JvbGxCZXlvbmRMYXN0Q29sdW1uPTEwNV09InNjcm9sbEJleW9uZExhc3RDb2x1bW4iLGVbZS5zY3JvbGxCZXlvbmRMYXN0TGluZT0xMDZdPSJzY3JvbGxCZXlvbmRMYXN0TGluZSIsZVtlLnNjcm9sbFByZWRvbWluYW50QXhpcz0xMDddPSJzY3JvbGxQcmVkb21pbmFudEF4aXMiLGVbZS5zZWxlY3Rpb25DbGlwYm9hcmQ9MTA4XT0ic2VsZWN0aW9uQ2xpcGJvYXJkIixlW2Uuc2VsZWN0aW9uSGlnaGxpZ2h0PTEwOV09InNlbGVjdGlvbkhpZ2hsaWdodCIsZVtlLnNlbGVjdE9uTGluZU51bWJlcnM9MTEwXT0ic2VsZWN0T25MaW5lTnVtYmVycyIsZVtlLnNob3dGb2xkaW5nQ29udHJvbHM9MTExXT0ic2hvd0ZvbGRpbmdDb250cm9scyIsZVtlLnNob3dVbnVzZWQ9MTEyXT0ic2hvd1VudXNlZCIsZVtlLnNuaXBwZXRTdWdnZXN0aW9ucz0xMTNdPSJzbmlwcGV0U3VnZ2VzdGlvbnMiLGVbZS5zbWFydFNlbGVjdD0xMTRdPSJzbWFydFNlbGVjdCIsZVtlLnNtb290aFNjcm9sbGluZz0xMTVdPSJzbW9vdGhTY3JvbGxpbmciLGVbZS5zdGlja3lTY3JvbGw9MTE2XT0ic3RpY2t5U2Nyb2xsIixlW2Uuc3RpY2t5VGFiU3RvcHM9MTE3XT0ic3RpY2t5VGFiU3RvcHMiLGVbZS5zdG9wUmVuZGVyaW5nTGluZUFmdGVyPTExOF09InN0b3BSZW5kZXJpbmdMaW5lQWZ0ZXIiLGVbZS5zdWdnZXN0PTExOV09InN1Z2dlc3QiLGVbZS5zdWdnZXN0Rm9udFNpemU9MTIwXT0ic3VnZ2VzdEZvbnRTaXplIixlW2Uuc3VnZ2VzdExpbmVIZWlnaHQ9MTIxXT0ic3VnZ2VzdExpbmVIZWlnaHQiLGVbZS5zdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycz0xMjJdPSJzdWdnZXN0T25UcmlnZ2VyQ2hhcmFjdGVycyIsZVtlLnN1Z2dlc3RTZWxlY3Rpb249MTIzXT0ic3VnZ2VzdFNlbGVjdGlvbiIsZVtlLnRhYkNvbXBsZXRpb249MTI0XT0idGFiQ29tcGxldGlvbiIsZVtlLnRhYkluZGV4PTEyNV09InRhYkluZGV4IixlW2UudW5pY29kZUhpZ2hsaWdodGluZz0xMjZdPSJ1bmljb2RlSGlnaGxpZ2h0aW5nIixlW2UudW51c3VhbExpbmVUZXJtaW5hdG9ycz0xMjddPSJ1bnVzdWFsTGluZVRlcm1pbmF0b3JzIixlW2UudXNlU2hhZG93RE9NPTEyOF09InVzZVNoYWRvd0RPTSIsZVtlLnVzZVRhYlN0b3BzPTEyOV09InVzZVRhYlN0b3BzIixlW2Uud29yZEJyZWFrPTEzMF09IndvcmRCcmVhayIsZVtlLndvcmRTZWdtZW50ZXJMb2NhbGVzPTEzMV09IndvcmRTZWdtZW50ZXJMb2NhbGVzIixlW2Uud29yZFNlcGFyYXRvcnM9MTMyXT0id29yZFNlcGFyYXRvcnMiLGVbZS53b3JkV3JhcD0xMzNdPSJ3b3JkV3JhcCIsZVtlLndvcmRXcmFwQnJlYWtBZnRlckNoYXJhY3RlcnM9MTM0XT0id29yZFdyYXBCcmVha0FmdGVyQ2hhcmFjdGVycyIsZVtlLndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzPTEzNV09IndvcmRXcmFwQnJlYWtCZWZvcmVDaGFyYWN0ZXJzIixlW2Uud29yZFdyYXBDb2x1bW49MTM2XT0id29yZFdyYXBDb2x1bW4iLGVbZS53b3JkV3JhcE92ZXJyaWRlMT0xMzddPSJ3b3JkV3JhcE92ZXJyaWRlMSIsZVtlLndvcmRXcmFwT3ZlcnJpZGUyPTEzOF09IndvcmRXcmFwT3ZlcnJpZGUyIixlW2Uud3JhcHBpbmdJbmRlbnQ9MTM5XT0id3JhcHBpbmdJbmRlbnQiLGVbZS53cmFwcGluZ1N0cmF0ZWd5PTE0MF09IndyYXBwaW5nU3RyYXRlZ3kiLGVbZS5zaG93RGVwcmVjYXRlZD0xNDFdPSJzaG93RGVwcmVjYXRlZCIsZVtlLmlubGF5SGludHM9MTQyXT0iaW5sYXlIaW50cyIsZVtlLmVkaXRvckNsYXNzTmFtZT0xNDNdPSJlZGl0b3JDbGFzc05hbWUiLGVbZS5waXhlbFJhdGlvPTE0NF09InBpeGVsUmF0aW8iLGVbZS50YWJGb2N1c01vZGU9MTQ1XT0idGFiRm9jdXNNb2RlIixlW2UubGF5b3V0SW5mbz0xNDZdPSJsYXlvdXRJbmZvIixlW2Uud3JhcHBpbmdJbmZvPTE0N109IndyYXBwaW5nSW5mbyIsZVtlLmRlZmF1bHRDb2xvckRlY29yYXRvcnM9MTQ4XT0iZGVmYXVsdENvbG9yRGVjb3JhdG9ycyIsZVtlLmNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uPTE0OV09ImNvbG9yRGVjb3JhdG9yc0FjdGl2YXRlZE9uIixlW2UuaW5saW5lQ29tcGxldGlvbnNBY2Nlc3NpYmlsaXR5VmVyYm9zZT0xNTBdPSJpbmxpbmVDb21wbGV0aW9uc0FjY2Vzc2liaWxpdHlWZXJib3NlIn0pKFRzfHwoVHM9e30pKTt2YXIgVnM7KGZ1bmN0aW9uKGUpe2VbZS5UZXh0RGVmaW5lZD0wXT0iVGV4dERlZmluZWQiLGVbZS5MRj0xXT0iTEYiLGVbZS5DUkxGPTJdPSJDUkxGIn0pKFZzfHwoVnM9e30pKTt2YXIgSXM7KGZ1bmN0aW9uKGUpe2VbZS5MRj0wXT0iTEYiLGVbZS5DUkxGPTFdPSJDUkxGIn0pKElzfHwoSXM9e30pKTt2YXIgQnM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD0zXT0iUmlnaHQifSkoQnN8fChCcz17fSkpO3ZhciBxczsoZnVuY3Rpb24oZSl7ZVtlLkluY3JlYXNlPTBdPSJJbmNyZWFzZSIsZVtlLkRlY3JlYXNlPTFdPSJEZWNyZWFzZSJ9KShxc3x8KHFzPXt9KSk7dmFyIFVzOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLkluZGVudD0xXT0iSW5kZW50IixlW2UuSW5kZW50T3V0ZGVudD0yXT0iSW5kZW50T3V0ZGVudCIsZVtlLk91dGRlbnQ9M109Ik91dGRlbnQifSkoVXN8fChVcz17fSkpO3ZhciBIczsoZnVuY3Rpb24oZSl7ZVtlLkJvdGg9MF09IkJvdGgiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5MZWZ0PTJdPSJMZWZ0IixlW2UuTm9uZT0zXT0iTm9uZSJ9KShIc3x8KEhzPXt9KSk7dmFyICRzOyhmdW5jdGlvbihlKXtlW2UuVHlwZT0xXT0iVHlwZSIsZVtlLlBhcmFtZXRlcj0yXT0iUGFyYW1ldGVyIn0pKCRzfHwoJHM9e30pKTt2YXIgV3M7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvbWF0aWM9MF09IkF1dG9tYXRpYyIsZVtlLkV4cGxpY2l0PTFdPSJFeHBsaWNpdCJ9KShXc3x8KFdzPXt9KSk7dmFyIHpzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KSh6c3x8KHpzPXt9KSk7dmFyIG1uOyhmdW5jdGlvbihlKXtlW2UuRGVwZW5kc09uS2JMYXlvdXQ9LTFdPSJEZXBlbmRzT25LYkxheW91dCIsZVtlLlVua25vd249MF09IlVua25vd24iLGVbZS5CYWNrc3BhY2U9MV09IkJhY2tzcGFjZSIsZVtlLlRhYj0yXT0iVGFiIixlW2UuRW50ZXI9M109IkVudGVyIixlW2UuU2hpZnQ9NF09IlNoaWZ0IixlW2UuQ3RybD01XT0iQ3RybCIsZVtlLkFsdD02XT0iQWx0IixlW2UuUGF1c2VCcmVhaz03XT0iUGF1c2VCcmVhayIsZVtlLkNhcHNMb2NrPThdPSJDYXBzTG9jayIsZVtlLkVzY2FwZT05XT0iRXNjYXBlIixlW2UuU3BhY2U9MTBdPSJTcGFjZSIsZVtlLlBhZ2VVcD0xMV09IlBhZ2VVcCIsZVtlLlBhZ2VEb3duPTEyXT0iUGFnZURvd24iLGVbZS5FbmQ9MTNdPSJFbmQiLGVbZS5Ib21lPTE0XT0iSG9tZSIsZVtlLkxlZnRBcnJvdz0xNV09IkxlZnRBcnJvdyIsZVtlLlVwQXJyb3c9MTZdPSJVcEFycm93IixlW2UuUmlnaHRBcnJvdz0xN109IlJpZ2h0QXJyb3ciLGVbZS5Eb3duQXJyb3c9MThdPSJEb3duQXJyb3ciLGVbZS5JbnNlcnQ9MTldPSJJbnNlcnQiLGVbZS5EZWxldGU9MjBdPSJEZWxldGUiLGVbZS5EaWdpdDA9MjFdPSJEaWdpdDAiLGVbZS5EaWdpdDE9MjJdPSJEaWdpdDEiLGVbZS5EaWdpdDI9MjNdPSJEaWdpdDIiLGVbZS5EaWdpdDM9MjRdPSJEaWdpdDMiLGVbZS5EaWdpdDQ9MjVdPSJEaWdpdDQiLGVbZS5EaWdpdDU9MjZdPSJEaWdpdDUiLGVbZS5EaWdpdDY9MjddPSJEaWdpdDYiLGVbZS5EaWdpdDc9MjhdPSJEaWdpdDciLGVbZS5EaWdpdDg9MjldPSJEaWdpdDgiLGVbZS5EaWdpdDk9MzBdPSJEaWdpdDkiLGVbZS5LZXlBPTMxXT0iS2V5QSIsZVtlLktleUI9MzJdPSJLZXlCIixlW2UuS2V5Qz0zM109IktleUMiLGVbZS5LZXlEPTM0XT0iS2V5RCIsZVtlLktleUU9MzVdPSJLZXlFIixlW2UuS2V5Rj0zNl09IktleUYiLGVbZS5LZXlHPTM3XT0iS2V5RyIsZVtlLktleUg9MzhdPSJLZXlIIixlW2UuS2V5ST0zOV09IktleUkiLGVbZS5LZXlKPTQwXT0iS2V5SiIsZVtlLktleUs9NDFdPSJLZXlLIixlW2UuS2V5TD00Ml09IktleUwiLGVbZS5LZXlNPTQzXT0iS2V5TSIsZVtlLktleU49NDRdPSJLZXlOIixlW2UuS2V5Tz00NV09IktleU8iLGVbZS5LZXlQPTQ2XT0iS2V5UCIsZVtlLktleVE9NDddPSJLZXlRIixlW2UuS2V5Uj00OF09IktleVIiLGVbZS5LZXlTPTQ5XT0iS2V5UyIsZVtlLktleVQ9NTBdPSJLZXlUIixlW2UuS2V5VT01MV09IktleVUiLGVbZS5LZXlWPTUyXT0iS2V5ViIsZVtlLktleVc9NTNdPSJLZXlXIixlW2UuS2V5WD01NF09IktleVgiLGVbZS5LZXlZPTU1XT0iS2V5WSIsZVtlLktleVo9NTZdPSJLZXlaIixlW2UuTWV0YT01N109Ik1ldGEiLGVbZS5Db250ZXh0TWVudT01OF09IkNvbnRleHRNZW51IixlW2UuRjE9NTldPSJGMSIsZVtlLkYyPTYwXT0iRjIiLGVbZS5GMz02MV09IkYzIixlW2UuRjQ9NjJdPSJGNCIsZVtlLkY1PTYzXT0iRjUiLGVbZS5GNj02NF09IkY2IixlW2UuRjc9NjVdPSJGNyIsZVtlLkY4PTY2XT0iRjgiLGVbZS5GOT02N109IkY5IixlW2UuRjEwPTY4XT0iRjEwIixlW2UuRjExPTY5XT0iRjExIixlW2UuRjEyPTcwXT0iRjEyIixlW2UuRjEzPTcxXT0iRjEzIixlW2UuRjE0PTcyXT0iRjE0IixlW2UuRjE1PTczXT0iRjE1IixlW2UuRjE2PTc0XT0iRjE2IixlW2UuRjE3PTc1XT0iRjE3IixlW2UuRjE4PTc2XT0iRjE4IixlW2UuRjE5PTc3XT0iRjE5IixlW2UuRjIwPTc4XT0iRjIwIixlW2UuRjIxPTc5XT0iRjIxIixlW2UuRjIyPTgwXT0iRjIyIixlW2UuRjIzPTgxXT0iRjIzIixlW2UuRjI0PTgyXT0iRjI0IixlW2UuTnVtTG9jaz04M109Ik51bUxvY2siLGVbZS5TY3JvbGxMb2NrPTg0XT0iU2Nyb2xsTG9jayIsZVtlLlNlbWljb2xvbj04NV09IlNlbWljb2xvbiIsZVtlLkVxdWFsPTg2XT0iRXF1YWwiLGVbZS5Db21tYT04N109IkNvbW1hIixlW2UuTWludXM9ODhdPSJNaW51cyIsZVtlLlBlcmlvZD04OV09IlBlcmlvZCIsZVtlLlNsYXNoPTkwXT0iU2xhc2giLGVbZS5CYWNrcXVvdGU9OTFdPSJCYWNrcXVvdGUiLGVbZS5CcmFja2V0TGVmdD05Ml09IkJyYWNrZXRMZWZ0IixlW2UuQmFja3NsYXNoPTkzXT0iQmFja3NsYXNoIixlW2UuQnJhY2tldFJpZ2h0PTk0XT0iQnJhY2tldFJpZ2h0IixlW2UuUXVvdGU9OTVdPSJRdW90ZSIsZVtlLk9FTV84PTk2XT0iT0VNXzgiLGVbZS5JbnRsQmFja3NsYXNoPTk3XT0iSW50bEJhY2tzbGFzaCIsZVtlLk51bXBhZDA9OThdPSJOdW1wYWQwIixlW2UuTnVtcGFkMT05OV09Ik51bXBhZDEiLGVbZS5OdW1wYWQyPTEwMF09Ik51bXBhZDIiLGVbZS5OdW1wYWQzPTEwMV09Ik51bXBhZDMiLGVbZS5OdW1wYWQ0PTEwMl09Ik51bXBhZDQiLGVbZS5OdW1wYWQ1PTEwM109Ik51bXBhZDUiLGVbZS5OdW1wYWQ2PTEwNF09Ik51bXBhZDYiLGVbZS5OdW1wYWQ3PTEwNV09Ik51bXBhZDciLGVbZS5OdW1wYWQ4PTEwNl09Ik51bXBhZDgiLGVbZS5OdW1wYWQ5PTEwN109Ik51bXBhZDkiLGVbZS5OdW1wYWRNdWx0aXBseT0xMDhdPSJOdW1wYWRNdWx0aXBseSIsZVtlLk51bXBhZEFkZD0xMDldPSJOdW1wYWRBZGQiLGVbZS5OVU1QQURfU0VQQVJBVE9SPTExMF09Ik5VTVBBRF9TRVBBUkFUT1IiLGVbZS5OdW1wYWRTdWJ0cmFjdD0xMTFdPSJOdW1wYWRTdWJ0cmFjdCIsZVtlLk51bXBhZERlY2ltYWw9MTEyXT0iTnVtcGFkRGVjaW1hbCIsZVtlLk51bXBhZERpdmlkZT0xMTNdPSJOdW1wYWREaXZpZGUiLGVbZS5LRVlfSU5fQ09NUE9TSVRJT049MTE0XT0iS0VZX0lOX0NPTVBPU0lUSU9OIixlW2UuQUJOVF9DMT0xMTVdPSJBQk5UX0MxIixlW2UuQUJOVF9DMj0xMTZdPSJBQk5UX0MyIixlW2UuQXVkaW9Wb2x1bWVNdXRlPTExN109IkF1ZGlvVm9sdW1lTXV0ZSIsZVtlLkF1ZGlvVm9sdW1lVXA9MTE4XT0iQXVkaW9Wb2x1bWVVcCIsZVtlLkF1ZGlvVm9sdW1lRG93bj0xMTldPSJBdWRpb1ZvbHVtZURvd24iLGVbZS5Ccm93c2VyU2VhcmNoPTEyMF09IkJyb3dzZXJTZWFyY2giLGVbZS5Ccm93c2VySG9tZT0xMjFdPSJCcm93c2VySG9tZSIsZVtlLkJyb3dzZXJCYWNrPTEyMl09IkJyb3dzZXJCYWNrIixlW2UuQnJvd3NlckZvcndhcmQ9MTIzXT0iQnJvd3NlckZvcndhcmQiLGVbZS5NZWRpYVRyYWNrTmV4dD0xMjRdPSJNZWRpYVRyYWNrTmV4dCIsZVtlLk1lZGlhVHJhY2tQcmV2aW91cz0xMjVdPSJNZWRpYVRyYWNrUHJldmlvdXMiLGVbZS5NZWRpYVN0b3A9MTI2XT0iTWVkaWFTdG9wIixlW2UuTWVkaWFQbGF5UGF1c2U9MTI3XT0iTWVkaWFQbGF5UGF1c2UiLGVbZS5MYXVuY2hNZWRpYVBsYXllcj0xMjhdPSJMYXVuY2hNZWRpYVBsYXllciIsZVtlLkxhdW5jaE1haWw9MTI5XT0iTGF1bmNoTWFpbCIsZVtlLkxhdW5jaEFwcDI9MTMwXT0iTGF1bmNoQXBwMiIsZVtlLkNsZWFyPTEzMV09IkNsZWFyIixlW2UuTUFYX1ZBTFVFPTEzMl09Ik1BWF9WQUxVRSJ9KShtbnx8KG1uPXt9KSk7dmFyIGduOyhmdW5jdGlvbihlKXtlW2UuSGludD0xXT0iSGludCIsZVtlLkluZm89Ml09IkluZm8iLGVbZS5XYXJuaW5nPTRdPSJXYXJuaW5nIixlW2UuRXJyb3I9OF09IkVycm9yIn0pKGdufHwoZ249e30pKTt2YXIgYm47KGZ1bmN0aW9uKGUpe2VbZS5Vbm5lY2Vzc2FyeT0xXT0iVW5uZWNlc3NhcnkiLGVbZS5EZXByZWNhdGVkPTJdPSJEZXByZWNhdGVkIn0pKGJufHwoYm49e30pKTt2YXIgT3M7KGZ1bmN0aW9uKGUpe2VbZS5JbmxpbmU9MV09IklubGluZSIsZVtlLkd1dHRlcj0yXT0iR3V0dGVyIn0pKE9zfHwoT3M9e30pKTt2YXIganM7KGZ1bmN0aW9uKGUpe2VbZS5Ob3JtYWw9MV09Ik5vcm1hbCIsZVtlLlVuZGVybGluZWQ9Ml09IlVuZGVybGluZWQifSkoanN8fChqcz17fSkpO3ZhciBHczsoZnVuY3Rpb24oZSl7ZVtlLlVOS05PV049MF09IlVOS05PV04iLGVbZS5URVhUQVJFQT0xXT0iVEVYVEFSRUEiLGVbZS5HVVRURVJfR0xZUEhfTUFSR0lOPTJdPSJHVVRURVJfR0xZUEhfTUFSR0lOIixlW2UuR1VUVEVSX0xJTkVfTlVNQkVSUz0zXT0iR1VUVEVSX0xJTkVfTlVNQkVSUyIsZVtlLkdVVFRFUl9MSU5FX0RFQ09SQVRJT05TPTRdPSJHVVRURVJfTElORV9ERUNPUkFUSU9OUyIsZVtlLkdVVFRFUl9WSUVXX1pPTkU9NV09IkdVVFRFUl9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1RFWFQ9Nl09IkNPTlRFTlRfVEVYVCIsZVtlLkNPTlRFTlRfRU1QVFk9N109IkNPTlRFTlRfRU1QVFkiLGVbZS5DT05URU5UX1ZJRVdfWk9ORT04XT0iQ09OVEVOVF9WSUVXX1pPTkUiLGVbZS5DT05URU5UX1dJREdFVD05XT0iQ09OVEVOVF9XSURHRVQiLGVbZS5PVkVSVklFV19SVUxFUj0xMF09Ik9WRVJWSUVXX1JVTEVSIixlW2UuU0NST0xMQkFSPTExXT0iU0NST0xMQkFSIixlW2UuT1ZFUkxBWV9XSURHRVQ9MTJdPSJPVkVSTEFZX1dJREdFVCIsZVtlLk9VVFNJREVfRURJVE9SPTEzXT0iT1VUU0lERV9FRElUT1IifSkoR3N8fChHcz17fSkpO3ZhciBYczsoZnVuY3Rpb24oZSl7ZVtlLkFJR2VuZXJhdGVkPTFdPSJBSUdlbmVyYXRlZCJ9KShYc3x8KFhzPXt9KSk7dmFyIFFzOyhmdW5jdGlvbihlKXtlW2UuSW52b2tlPTBdPSJJbnZva2UiLGVbZS5BdXRvbWF0aWM9MV09IkF1dG9tYXRpYyJ9KShRc3x8KFFzPXt9KSk7dmFyIFlzOyhmdW5jdGlvbihlKXtlW2UuVE9QX1JJR0hUX0NPUk5FUj0wXT0iVE9QX1JJR0hUX0NPUk5FUiIsZVtlLkJPVFRPTV9SSUdIVF9DT1JORVI9MV09IkJPVFRPTV9SSUdIVF9DT1JORVIiLGVbZS5UT1BfQ0VOVEVSPTJdPSJUT1BfQ0VOVEVSIn0pKFlzfHwoWXM9e30pKTt2YXIgSnM7KGZ1bmN0aW9uKGUpe2VbZS5MZWZ0PTFdPSJMZWZ0IixlW2UuQ2VudGVyPTJdPSJDZW50ZXIiLGVbZS5SaWdodD00XT0iUmlnaHQiLGVbZS5GdWxsPTddPSJGdWxsIn0pKEpzfHwoSnM9e30pKTt2YXIgWnM7KGZ1bmN0aW9uKGUpe2VbZS5Xb3JkPTBdPSJXb3JkIixlW2UuTGluZT0xXT0iTGluZSIsZVtlLlN1Z2dlc3Q9Ml09IlN1Z2dlc3QifSkoWnN8fChacz17fSkpO3ZhciBLczsoZnVuY3Rpb24oZSl7ZVtlLkxlZnQ9MF09IkxlZnQiLGVbZS5SaWdodD0xXT0iUmlnaHQiLGVbZS5Ob25lPTJdPSJOb25lIixlW2UuTGVmdE9mSW5qZWN0ZWRUZXh0PTNdPSJMZWZ0T2ZJbmplY3RlZFRleHQiLGVbZS5SaWdodE9mSW5qZWN0ZWRUZXh0PTRdPSJSaWdodE9mSW5qZWN0ZWRUZXh0In0pKEtzfHwoS3M9e30pKTt2YXIgZXI7KGZ1bmN0aW9uKGUpe2VbZS5PZmY9MF09Ik9mZiIsZVtlLk9uPTFdPSJPbiIsZVtlLlJlbGF0aXZlPTJdPSJSZWxhdGl2ZSIsZVtlLkludGVydmFsPTNdPSJJbnRlcnZhbCIsZVtlLkN1c3RvbT00XT0iQ3VzdG9tIn0pKGVyfHwoZXI9e30pKTt2YXIgdHI7KGZ1bmN0aW9uKGUpe2VbZS5Ob25lPTBdPSJOb25lIixlW2UuVGV4dD0xXT0iVGV4dCIsZVtlLkJsb2Nrcz0yXT0iQmxvY2tzIn0pKHRyfHwodHI9e30pKTt2YXIgbnI7KGZ1bmN0aW9uKGUpe2VbZS5TbW9vdGg9MF09IlNtb290aCIsZVtlLkltbWVkaWF0ZT0xXT0iSW1tZWRpYXRlIn0pKG5yfHwobnI9e30pKTt2YXIgc3I7KGZ1bmN0aW9uKGUpe2VbZS5BdXRvPTFdPSJBdXRvIixlW2UuSGlkZGVuPTJdPSJIaWRkZW4iLGVbZS5WaXNpYmxlPTNdPSJWaXNpYmxlIn0pKHNyfHwoc3I9e30pKTt2YXIgX247KGZ1bmN0aW9uKGUpe2VbZS5MVFI9MF09IkxUUiIsZVtlLlJUTD0xXT0iUlRMIn0pKF9ufHwoX249e30pKTt2YXIgcnI7KGZ1bmN0aW9uKGUpe2UuT2ZmPSJvZmYiLGUuT25Db2RlPSJvbkNvZGUiLGUuT249Im9uIn0pKHJyfHwocnI9e30pKTt2YXIgaXI7KGZ1bmN0aW9uKGUpe2VbZS5JbnZva2U9MV09Ikludm9rZSIsZVtlLlRyaWdnZXJDaGFyYWN0ZXI9Ml09IlRyaWdnZXJDaGFyYWN0ZXIiLGVbZS5Db250ZW50Q2hhbmdlPTNdPSJDb250ZW50Q2hhbmdlIn0pKGlyfHwoaXI9e30pKTt2YXIgYXI7KGZ1bmN0aW9uKGUpe2VbZS5GaWxlPTBdPSJGaWxlIixlW2UuTW9kdWxlPTFdPSJNb2R1bGUiLGVbZS5OYW1lc3BhY2U9Ml09Ik5hbWVzcGFjZSIsZVtlLlBhY2thZ2U9M109IlBhY2thZ2UiLGVbZS5DbGFzcz00XT0iQ2xhc3MiLGVbZS5NZXRob2Q9NV09Ik1ldGhvZCIsZVtlLlByb3BlcnR5PTZdPSJQcm9wZXJ0eSIsZVtlLkZpZWxkPTddPSJGaWVsZCIsZVtlLkNvbnN0cnVjdG9yPThdPSJDb25zdHJ1Y3RvciIsZVtlLkVudW09OV09IkVudW0iLGVbZS5JbnRlcmZhY2U9MTBdPSJJbnRlcmZhY2UiLGVbZS5GdW5jdGlvbj0xMV09IkZ1bmN0aW9uIixlW2UuVmFyaWFibGU9MTJdPSJWYXJpYWJsZSIsZVtlLkNvbnN0YW50PTEzXT0iQ29uc3RhbnQiLGVbZS5TdHJpbmc9MTRdPSJTdHJpbmciLGVbZS5OdW1iZXI9MTVdPSJOdW1iZXIiLGVbZS5Cb29sZWFuPTE2XT0iQm9vbGVhbiIsZVtlLkFycmF5PTE3XT0iQXJyYXkiLGVbZS5PYmplY3Q9MThdPSJPYmplY3QiLGVbZS5LZXk9MTldPSJLZXkiLGVbZS5OdWxsPTIwXT0iTnVsbCIsZVtlLkVudW1NZW1iZXI9MjFdPSJFbnVtTWVtYmVyIixlW2UuU3RydWN0PTIyXT0iU3RydWN0IixlW2UuRXZlbnQ9MjNdPSJFdmVudCIsZVtlLk9wZXJhdG9yPTI0XT0iT3BlcmF0b3IiLGVbZS5UeXBlUGFyYW1ldGVyPTI1XT0iVHlwZVBhcmFtZXRlciJ9KShhcnx8KGFyPXt9KSk7dmFyIG9yOyhmdW5jdGlvbihlKXtlW2UuRGVwcmVjYXRlZD0xXT0iRGVwcmVjYXRlZCJ9KShvcnx8KG9yPXt9KSk7dmFyIGxyOyhmdW5jdGlvbihlKXtlW2UuSGlkZGVuPTBdPSJIaWRkZW4iLGVbZS5CbGluaz0xXT0iQmxpbmsiLGVbZS5TbW9vdGg9Ml09IlNtb290aCIsZVtlLlBoYXNlPTNdPSJQaGFzZSIsZVtlLkV4cGFuZD00XT0iRXhwYW5kIixlW2UuU29saWQ9NV09IlNvbGlkIn0pKGxyfHwobHI9e30pKTt2YXIgdXI7KGZ1bmN0aW9uKGUpe2VbZS5MaW5lPTFdPSJMaW5lIixlW2UuQmxvY2s9Ml09IkJsb2NrIixlW2UuVW5kZXJsaW5lPTNdPSJVbmRlcmxpbmUiLGVbZS5MaW5lVGhpbj00XT0iTGluZVRoaW4iLGVbZS5CbG9ja091dGxpbmU9NV09IkJsb2NrT3V0bGluZSIsZVtlLlVuZGVybGluZVRoaW49Nl09IlVuZGVybGluZVRoaW4ifSkodXJ8fCh1cj17fSkpO3ZhciBjcjsoZnVuY3Rpb24oZSl7ZVtlLkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXM9MF09IkFsd2F5c0dyb3dzV2hlblR5cGluZ0F0RWRnZXMiLGVbZS5OZXZlckdyb3dzV2hlblR5cGluZ0F0RWRnZXM9MV09Ik5ldmVyR3Jvd3NXaGVuVHlwaW5nQXRFZGdlcyIsZVtlLkdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmU9Ml09Ikdyb3dzT25seVdoZW5UeXBpbmdCZWZvcmUiLGVbZS5Hcm93c09ubHlXaGVuVHlwaW5nQWZ0ZXI9M109Ikdyb3dzT25seVdoZW5UeXBpbmdBZnRlciJ9KShjcnx8KGNyPXt9KSk7dmFyIGhyOyhmdW5jdGlvbihlKXtlW2UuTm9uZT0wXT0iTm9uZSIsZVtlLlNhbWU9MV09IlNhbWUiLGVbZS5JbmRlbnQ9Ml09IkluZGVudCIsZVtlLkRlZXBJbmRlbnQ9M109IkRlZXBJbmRlbnQifSkoaHJ8fChocj17fSkpO2NvbnN0IEdlPWNsYXNzIEdle3N0YXRpYyBjaG9yZCh0LG4pe3JldHVybiBtYSh0LG4pfX07R2UuQ3RybENtZD0yMDQ4LEdlLlNoaWZ0PTEwMjQsR2UuQWx0PTUxMixHZS5XaW5DdHJsPTI1NjtsZXQgcG49R2U7ZnVuY3Rpb24gd2EoKXtyZXR1cm57ZWRpdG9yOnZvaWQgMCxsYW5ndWFnZXM6dm9pZCAwLENhbmNlbGxhdGlvblRva2VuU291cmNlOmNhLEVtaXR0ZXI6b2UsS2V5Q29kZTptbixLZXlNb2Q6cG4sUG9zaXRpb246VSxSYW5nZTprLFNlbGVjdGlvbjphZSxTZWxlY3Rpb25EaXJlY3Rpb246X24sTWFya2VyU2V2ZXJpdHk6Z24sTWFya2VyVGFnOmJuLFVyaTpzZSxUb2tlbjp4YX19Y29uc3QgdXQ9Y2xhc3MgdXR7c3RhdGljIGdldENoYW5uZWwodCl7cmV0dXJuIHQuZ2V0Q2hhbm5lbCh1dC5DSEFOTkVMX05BTUUpfXN0YXRpYyBzZXRDaGFubmVsKHQsbil7dC5zZXRDaGFubmVsKHV0LkNIQU5ORUxfTkFNRSxuKX19O3V0LkNIQU5ORUxfTkFNRT0iZWRpdG9yV29ya2VySG9zdCI7bGV0IHhuPXV0O3ZhciBmcjtjbGFzcyBMYXtjb25zdHJ1Y3Rvcigpe3RoaXNbZnJdPSJMaW5rZWRNYXAiLHRoaXMuX21hcD1uZXcgTWFwLHRoaXMuX2hlYWQ9dm9pZCAwLHRoaXMuX3RhaWw9dm9pZCAwLHRoaXMuX3NpemU9MCx0aGlzLl9zdGF0ZT0wfWNsZWFyKCl7dGhpcy5fbWFwLmNsZWFyKCksdGhpcy5faGVhZD12b2lkIDAsdGhpcy5fdGFpbD12b2lkIDAsdGhpcy5fc2l6ZT0wLHRoaXMuX3N0YXRlKyt9aXNFbXB0eSgpe3JldHVybiF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbH1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfWdldCBmaXJzdCgpe3JldHVybiB0aGlzLl9oZWFkPy52YWx1ZX1nZXQgbGFzdCgpe3JldHVybiB0aGlzLl90YWlsPy52YWx1ZX1oYXModCl7cmV0dXJuIHRoaXMuX21hcC5oYXModCl9Z2V0KHQsbj0wKXtjb25zdCBzPXRoaXMuX21hcC5nZXQodCk7aWYocylyZXR1cm4gbiE9PTAmJnRoaXMudG91Y2gocyxuKSxzLnZhbHVlfXNldCh0LG4scz0wKXtsZXQgcj10aGlzLl9tYXAuZ2V0KHQpO2lmKHIpci52YWx1ZT1uLHMhPT0wJiZ0aGlzLnRvdWNoKHIscyk7ZWxzZXtzd2l0Y2gocj17a2V5OnQsdmFsdWU6bixuZXh0OnZvaWQgMCxwcmV2aW91czp2b2lkIDB9LHMpe2Nhc2UgMDp0aGlzLmFkZEl0ZW1MYXN0KHIpO2JyZWFrO2Nhc2UgMTp0aGlzLmFkZEl0ZW1GaXJzdChyKTticmVhaztjYXNlIDI6dGhpcy5hZGRJdGVtTGFzdChyKTticmVhaztkZWZhdWx0OnRoaXMuYWRkSXRlbUxhc3Qocik7YnJlYWt9dGhpcy5fbWFwLnNldCh0LHIpLHRoaXMuX3NpemUrK31yZXR1cm4gdGhpc31kZWxldGUodCl7cmV0dXJuISF0aGlzLnJlbW92ZSh0KX1yZW1vdmUodCl7Y29uc3Qgbj10aGlzLl9tYXAuZ2V0KHQpO2lmKG4pcmV0dXJuIHRoaXMuX21hcC5kZWxldGUodCksdGhpcy5yZW1vdmVJdGVtKG4pLHRoaXMuX3NpemUtLSxuLnZhbHVlfXNoaWZ0KCl7aWYoIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsKXJldHVybjtpZighdGhpcy5faGVhZHx8IXRoaXMuX3RhaWwpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtjb25zdCB0PXRoaXMuX2hlYWQ7cmV0dXJuIHRoaXMuX21hcC5kZWxldGUodC5rZXkpLHRoaXMucmVtb3ZlSXRlbSh0KSx0aGlzLl9zaXplLS0sdC52YWx1ZX1mb3JFYWNoKHQsbil7Y29uc3Qgcz10aGlzLl9zdGF0ZTtsZXQgcj10aGlzLl9oZWFkO2Zvcig7cjspe2lmKG4/dC5iaW5kKG4pKHIudmFsdWUsci5rZXksdGhpcyk6dChyLnZhbHVlLHIua2V5LHRoaXMpLHRoaXMuX3N0YXRlIT09cyl0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtyPXIubmV4dH19a2V5cygpe2NvbnN0IHQ9dGhpcyxuPXRoaXMuX3N0YXRlO2xldCBzPXRoaXMuX2hlYWQ7Y29uc3Qgcj17W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gcn0sbmV4dCgpe2lmKHQuX3N0YXRlIT09bil0aHJvdyBuZXcgRXJyb3IoIkxpbmtlZE1hcCBnb3QgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4iKTtpZihzKXtjb25zdCBpPXt2YWx1ZTpzLmtleSxkb25lOiExfTtyZXR1cm4gcz1zLm5leHQsaX1lbHNlIHJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gcn12YWx1ZXMoKXtjb25zdCB0PXRoaXMsbj10aGlzLl9zdGF0ZTtsZXQgcz10aGlzLl9oZWFkO2NvbnN0IHI9e1tTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHJ9LG5leHQoKXtpZih0Ll9zdGF0ZSE9PW4pdGhyb3cgbmV3IEVycm9yKCJMaW5rZWRNYXAgZ290IG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uIik7aWYocyl7Y29uc3QgaT17dmFsdWU6cy52YWx1ZSxkb25lOiExfTtyZXR1cm4gcz1zLm5leHQsaX1lbHNlIHJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gcn1lbnRyaWVzKCl7Y29uc3QgdD10aGlzLG49dGhpcy5fc3RhdGU7bGV0IHM9dGhpcy5faGVhZDtjb25zdCByPXtbU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiByfSxuZXh0KCl7aWYodC5fc3RhdGUhPT1uKXRocm93IG5ldyBFcnJvcigiTGlua2VkTWFwIGdvdCBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLiIpO2lmKHMpe2NvbnN0IGk9e3ZhbHVlOltzLmtleSxzLnZhbHVlXSxkb25lOiExfTtyZXR1cm4gcz1zLm5leHQsaX1lbHNlIHJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fTtyZXR1cm4gcn1bKGZyPVN5bWJvbC50b1N0cmluZ1RhZyxTeW1ib2wuaXRlcmF0b3IpXSgpe3JldHVybiB0aGlzLmVudHJpZXMoKX10cmltT2xkKHQpe2lmKHQ+PXRoaXMuc2l6ZSlyZXR1cm47aWYodD09PTApe3RoaXMuY2xlYXIoKTtyZXR1cm59bGV0IG49dGhpcy5faGVhZCxzPXRoaXMuc2l6ZTtmb3IoO24mJnM+dDspdGhpcy5fbWFwLmRlbGV0ZShuLmtleSksbj1uLm5leHQscy0tO3RoaXMuX2hlYWQ9bix0aGlzLl9zaXplPXMsbiYmKG4ucHJldmlvdXM9dm9pZCAwKSx0aGlzLl9zdGF0ZSsrfXRyaW1OZXcodCl7aWYodD49dGhpcy5zaXplKXJldHVybjtpZih0PT09MCl7dGhpcy5jbGVhcigpO3JldHVybn1sZXQgbj10aGlzLl90YWlsLHM9dGhpcy5zaXplO2Zvcig7biYmcz50Oyl0aGlzLl9tYXAuZGVsZXRlKG4ua2V5KSxuPW4ucHJldmlvdXMscy0tO3RoaXMuX3RhaWw9bix0aGlzLl9zaXplPXMsbiYmKG4ubmV4dD12b2lkIDApLHRoaXMuX3N0YXRlKyt9YWRkSXRlbUZpcnN0KHQpe2lmKCF0aGlzLl9oZWFkJiYhdGhpcy5fdGFpbCl0aGlzLl90YWlsPXQ7ZWxzZSBpZih0aGlzLl9oZWFkKXQubmV4dD10aGlzLl9oZWFkLHRoaXMuX2hlYWQucHJldmlvdXM9dDtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dGhpcy5faGVhZD10LHRoaXMuX3N0YXRlKyt9YWRkSXRlbUxhc3QodCl7aWYoIXRoaXMuX2hlYWQmJiF0aGlzLl90YWlsKXRoaXMuX2hlYWQ9dDtlbHNlIGlmKHRoaXMuX3RhaWwpdC5wcmV2aW91cz10aGlzLl90YWlsLHRoaXMuX3RhaWwubmV4dD10O2Vsc2UgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTt0aGlzLl90YWlsPXQsdGhpcy5fc3RhdGUrK31yZW1vdmVJdGVtKHQpe2lmKHQ9PT10aGlzLl9oZWFkJiZ0PT09dGhpcy5fdGFpbCl0aGlzLl9oZWFkPXZvaWQgMCx0aGlzLl90YWlsPXZvaWQgMDtlbHNlIGlmKHQ9PT10aGlzLl9oZWFkKXtpZighdC5uZXh0KXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsaXN0Iik7dC5uZXh0LnByZXZpb3VzPXZvaWQgMCx0aGlzLl9oZWFkPXQubmV4dH1lbHNlIGlmKHQ9PT10aGlzLl90YWlsKXtpZighdC5wcmV2aW91cyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO3QucHJldmlvdXMubmV4dD12b2lkIDAsdGhpcy5fdGFpbD10LnByZXZpb3VzfWVsc2V7Y29uc3Qgbj10Lm5leHQscz10LnByZXZpb3VzO2lmKCFufHwhcyl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgbGlzdCIpO24ucHJldmlvdXM9cyxzLm5leHQ9bn10Lm5leHQ9dm9pZCAwLHQucHJldmlvdXM9dm9pZCAwLHRoaXMuX3N0YXRlKyt9dG91Y2godCxuKXtpZighdGhpcy5faGVhZHx8IXRoaXMuX3RhaWwpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGxpc3QiKTtpZighKG4hPT0xJiZuIT09Mikpe2lmKG49PT0xKXtpZih0PT09dGhpcy5faGVhZClyZXR1cm47Y29uc3Qgcz10Lm5leHQscj10LnByZXZpb3VzO3Q9PT10aGlzLl90YWlsPyhyLm5leHQ9dm9pZCAwLHRoaXMuX3RhaWw9cik6KHMucHJldmlvdXM9cixyLm5leHQ9cyksdC5wcmV2aW91cz12b2lkIDAsdC5uZXh0PXRoaXMuX2hlYWQsdGhpcy5faGVhZC5wcmV2aW91cz10LHRoaXMuX2hlYWQ9dCx0aGlzLl9zdGF0ZSsrfWVsc2UgaWYobj09PTIpe2lmKHQ9PT10aGlzLl90YWlsKXJldHVybjtjb25zdCBzPXQubmV4dCxyPXQucHJldmlvdXM7dD09PXRoaXMuX2hlYWQ/KHMucHJldmlvdXM9dm9pZCAwLHRoaXMuX2hlYWQ9cyk6KHMucHJldmlvdXM9cixyLm5leHQ9cyksdC5uZXh0PXZvaWQgMCx0LnByZXZpb3VzPXRoaXMuX3RhaWwsdGhpcy5fdGFpbC5uZXh0PXQsdGhpcy5fdGFpbD10LHRoaXMuX3N0YXRlKyt9fX10b0pTT04oKXtjb25zdCB0PVtdO3JldHVybiB0aGlzLmZvckVhY2goKG4scyk9Pnt0LnB1c2goW3Msbl0pfSksdH1mcm9tSlNPTih0KXt0aGlzLmNsZWFyKCk7Zm9yKGNvbnN0W24sc11vZiB0KXRoaXMuc2V0KG4scyl9fWNsYXNzIHZhIGV4dGVuZHMgTGF7Y29uc3RydWN0b3IodCxuPTEpe3N1cGVyKCksdGhpcy5fbGltaXQ9dCx0aGlzLl9yYXRpbz1NYXRoLm1pbihNYXRoLm1heCgwLG4pLDEpfWdldCBsaW1pdCgpe3JldHVybiB0aGlzLl9saW1pdH1zZXQgbGltaXQodCl7dGhpcy5fbGltaXQ9dCx0aGlzLmNoZWNrVHJpbSgpfWdldCh0LG49Mil7cmV0dXJuIHN1cGVyLmdldCh0LG4pfXBlZWsodCl7cmV0dXJuIHN1cGVyLmdldCh0LDApfXNldCh0LG4pe3JldHVybiBzdXBlci5zZXQodCxuLDIpLHRoaXN9Y2hlY2tUcmltKCl7dGhpcy5zaXplPnRoaXMuX2xpbWl0JiZ0aGlzLnRyaW0oTWF0aC5yb3VuZCh0aGlzLl9saW1pdCp0aGlzLl9yYXRpbykpfX1jbGFzcyBOYSBleHRlbmRzIHZhe2NvbnN0cnVjdG9yKHQsbj0xKXtzdXBlcih0LG4pfXRyaW0odCl7dGhpcy50cmltT2xkKHQpfXNldCh0LG4pe3JldHVybiBzdXBlci5zZXQodCxuKSx0aGlzLmNoZWNrVHJpbSgpLHRoaXN9fWNsYXNzIFNhe2NvbnN0cnVjdG9yKCl7dGhpcy5tYXA9bmV3IE1hcH1hZGQodCxuKXtsZXQgcz10aGlzLm1hcC5nZXQodCk7c3x8KHM9bmV3IFNldCx0aGlzLm1hcC5zZXQodCxzKSkscy5hZGQobil9ZGVsZXRlKHQsbil7Y29uc3Qgcz10aGlzLm1hcC5nZXQodCk7cyYmKHMuZGVsZXRlKG4pLHMuc2l6ZT09PTAmJnRoaXMubWFwLmRlbGV0ZSh0KSl9Zm9yRWFjaCh0LG4pe2NvbnN0IHM9dGhpcy5tYXAuZ2V0KHQpO3MmJnMuZm9yRWFjaChuKX1nZXQodCl7Y29uc3Qgbj10aGlzLm1hcC5nZXQodCk7cmV0dXJuIG58fG5ldyBTZXR9fW5ldyBOYSgxMCk7ZnVuY3Rpb24gQ2EoZSl7bGV0IHQ9W107Zm9yKDtPYmplY3QucHJvdG90eXBlIT09ZTspdD10LmNvbmNhdChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKSksZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIHR9ZnVuY3Rpb24gZHIoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3QgbiBvZiBDYShlKSl0eXBlb2YgZVtuXT09ImZ1bmN0aW9uIiYmdC5wdXNoKG4pO3JldHVybiB0fWZ1bmN0aW9uIEFhKGUsdCl7Y29uc3Qgbj1yPT5mdW5jdGlvbigpe2NvbnN0IGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiB0KHIsaSl9LHM9e307Zm9yKGNvbnN0IHIgb2YgZSlzW3JdPW4ocik7cmV0dXJuIHN9dmFyIG1yOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9NF09IlJpZ2h0IixlW2UuRnVsbD03XT0iRnVsbCJ9KShtcnx8KG1yPXt9KSk7dmFyIGdyOyhmdW5jdGlvbihlKXtlW2UuTGVmdD0xXT0iTGVmdCIsZVtlLkNlbnRlcj0yXT0iQ2VudGVyIixlW2UuUmlnaHQ9M109IlJpZ2h0In0pKGdyfHwoZ3I9e30pKTt2YXIgYnI7KGZ1bmN0aW9uKGUpe2VbZS5Cb3RoPTBdPSJCb3RoIixlW2UuUmlnaHQ9MV09IlJpZ2h0IixlW2UuTGVmdD0yXT0iTGVmdCIsZVtlLk5vbmU9M109Ik5vbmUifSkoYnJ8fChicj17fSkpO2Z1bmN0aW9uIFJhKGUsdCxuLHMscil7aWYocz09PTApcmV0dXJuITA7Y29uc3QgaT10LmNoYXJDb2RlQXQocy0xKTtpZihlLmdldChpKSE9PTB8fGk9PT0xM3x8aT09PTEwKXJldHVybiEwO2lmKHI+MCl7Y29uc3Qgbz10LmNoYXJDb2RlQXQocyk7aWYoZS5nZXQobykhPT0wKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHlhKGUsdCxuLHMscil7aWYocytyPT09bilyZXR1cm4hMDtjb25zdCBpPXQuY2hhckNvZGVBdChzK3IpO2lmKGUuZ2V0KGkpIT09MHx8aT09PTEzfHxpPT09MTApcmV0dXJuITA7aWYocj4wKXtjb25zdCBvPXQuY2hhckNvZGVBdChzK3ItMSk7aWYoZS5nZXQobykhPT0wKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEVhKGUsdCxuLHMscil7cmV0dXJuIFJhKGUsdCxuLHMscikmJnlhKGUsdCxuLHMscil9Y2xhc3MgTWF7Y29uc3RydWN0b3IodCxuKXt0aGlzLl93b3JkU2VwYXJhdG9ycz10LHRoaXMuX3NlYXJjaFJlZ2V4PW4sdGhpcy5fcHJldk1hdGNoU3RhcnRJbmRleD0tMSx0aGlzLl9wcmV2TWF0Y2hMZW5ndGg9MH1yZXNldCh0KXt0aGlzLl9zZWFyY2hSZWdleC5sYXN0SW5kZXg9dCx0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PS0xLHRoaXMuX3ByZXZNYXRjaExlbmd0aD0wfW5leHQodCl7Y29uc3Qgbj10Lmxlbmd0aDtsZXQgcztkb3tpZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4K3RoaXMuX3ByZXZNYXRjaExlbmd0aD09PW58fChzPXRoaXMuX3NlYXJjaFJlZ2V4LmV4ZWModCksIXMpKXJldHVybiBudWxsO2NvbnN0IHI9cy5pbmRleCxpPXNbMF0ubGVuZ3RoO2lmKHI9PT10aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4JiZpPT09dGhpcy5fcHJldk1hdGNoTGVuZ3RoKXtpZihpPT09MCl7TmkodCxuLHRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCk+NjU1MzU/dGhpcy5fc2VhcmNoUmVnZXgubGFzdEluZGV4Kz0yOnRoaXMuX3NlYXJjaFJlZ2V4Lmxhc3RJbmRleCs9MTtjb250aW51ZX1yZXR1cm4gbnVsbH1pZih0aGlzLl9wcmV2TWF0Y2hTdGFydEluZGV4PXIsdGhpcy5fcHJldk1hdGNoTGVuZ3RoPWksIXRoaXMuX3dvcmRTZXBhcmF0b3JzfHxFYSh0aGlzLl93b3JkU2VwYXJhdG9ycyx0LG4scixpKSlyZXR1cm4gc313aGlsZShzKTtyZXR1cm4gbnVsbH19ZnVuY3Rpb24ga2EoZSx0PSJVbnJlYWNoYWJsZSIpe3Rocm93IG5ldyBFcnJvcih0KX1mdW5jdGlvbiBDdChlKXtpZighZSgpKXtkZWJ1Z2dlcjtlKCksWWUobmV3IHJlKCJBc3NlcnRpb24gRmFpbGVkIikpfX1mdW5jdGlvbiBfcihlLHQpe2xldCBuPTA7Zm9yKDtuPGUubGVuZ3RoLTE7KXtjb25zdCBzPWVbbl0scj1lW24rMV07aWYoIXQocyxyKSlyZXR1cm4hMTtuKyt9cmV0dXJuITB9Y29uc3QgUGE9ImB+IUAjJCVeJiooKS09K1t7XX1cXHw7OidcIiwuPD4vPyI7ZnVuY3Rpb24gRmEoZT0iIil7bGV0IHQ9IigtP1xcZCpcXC5cXGRcXHcqKXwoW14iO2Zvcihjb25zdCBuIG9mIFBhKWUuaW5kZXhPZihuKT49MHx8KHQrPSJcXCIrbik7cmV0dXJuIHQrPSJcXHNdKykiLG5ldyBSZWdFeHAodCwiZyIpfWNvbnN0IHByPUZhKCk7ZnVuY3Rpb24geHIoZSl7bGV0IHQ9cHI7aWYoZSYmZSBpbnN0YW5jZW9mIFJlZ0V4cClpZihlLmdsb2JhbCl0PWU7ZWxzZXtsZXQgbj0iZyI7ZS5pZ25vcmVDYXNlJiYobis9ImkiKSxlLm11bHRpbGluZSYmKG4rPSJtIiksZS51bmljb2RlJiYobis9InUiKSx0PW5ldyBSZWdFeHAoZS5zb3VyY2Usbil9cmV0dXJuIHQubGFzdEluZGV4PTAsdH1jb25zdCB3cj1uZXcgZWk7d3IudW5zaGlmdCh7bWF4TGVuOjFlMyx3aW5kb3dTaXplOjE1LHRpbWVCdWRnZXQ6MTUwfSk7ZnVuY3Rpb24gd24oZSx0LG4scyxyKXtpZih0PXhyKHQpLHJ8fChyPWZ0LmZpcnN0KHdyKSksbi5sZW5ndGg+ci5tYXhMZW4pe2xldCBjPWUtci5tYXhMZW4vMjtyZXR1cm4gYzwwP2M9MDpzKz1jLG49bi5zdWJzdHJpbmcoYyxlK3IubWF4TGVuLzIpLHduKGUsdCxuLHMscil9Y29uc3QgaT1EYXRlLm5vdygpLG89ZS0xLXM7bGV0IGw9LTEsdT1udWxsO2ZvcihsZXQgYz0xOyEoRGF0ZS5ub3coKS1pPj1yLnRpbWVCdWRnZXQpO2MrKyl7Y29uc3QgZj1vLXIud2luZG93U2l6ZSpjO3QubGFzdEluZGV4PU1hdGgubWF4KDAsZik7Y29uc3QgaD1EYSh0LG4sbyxsKTtpZighaCYmdXx8KHU9aCxmPD0wKSlicmVhaztsPWZ9aWYodSl7Y29uc3QgYz17d29yZDp1WzBdLHN0YXJ0Q29sdW1uOnMrMSt1LmluZGV4LGVuZENvbHVtbjpzKzErdS5pbmRleCt1WzBdLmxlbmd0aH07cmV0dXJuIHQubGFzdEluZGV4PTAsY31yZXR1cm4gbnVsbH1mdW5jdGlvbiBEYShlLHQsbixzKXtsZXQgcjtmb3IoO3I9ZS5leGVjKHQpOyl7Y29uc3QgaT1yLmluZGV4fHwwO2lmKGk8PW4mJmUubGFzdEluZGV4Pj1uKXJldHVybiByO2lmKHM+MCYmaT5zKXJldHVybiBudWxsfXJldHVybiBudWxsfWNsYXNzIFRhe3N0YXRpYyBjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLHMpe2NvbnN0IHI9cz9zLnN0YXJ0TGluZU51bWJlcjoxLGk9cz9zLmVuZExpbmVOdW1iZXI6dC5nZXRMaW5lQ291bnQoKSxvPW5ldyBMcihuKSxsPW8uZ2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpO2xldCB1O2w9PT0iYWxsTm9uQmFzaWNBc2NpaSI/dT1uZXcgUmVnRXhwKCJbXlxcdFxcblxcclxceDIwLVxceDdFXSIsImciKTp1PW5ldyBSZWdFeHAoYCR7VmEoQXJyYXkuZnJvbShsKSl9YCwiZyIpO2NvbnN0IGM9bmV3IE1hKG51bGwsdSksZj1bXTtsZXQgaD0hMSxkLG09MCxnPTAsYj0wO2U6Zm9yKGxldCB4PXIsdj1pO3g8PXY7eCsrKXtjb25zdCBTPXQuZ2V0TGluZUNvbnRlbnQoeCksTj1TLmxlbmd0aDtjLnJlc2V0KDApO2RvIGlmKGQ9Yy5uZXh0KFMpLGQpe2xldCBwPWQuaW5kZXgsXz1kLmluZGV4K2RbMF0ubGVuZ3RoO2lmKHA+MCl7Y29uc3QgQj1TLmNoYXJDb2RlQXQocC0xKTtfdChCKSYmcC0tfWlmKF8rMTxOKXtjb25zdCBCPVMuY2hhckNvZGVBdChfLTEpO190KEIpJiZfKyt9Y29uc3QgTD1TLnN1YnN0cmluZyhwLF8pO2xldCBBPXduKHArMSxwcixTLDApO0EmJkEuZW5kQ29sdW1uPD1wKzEmJihBPW51bGwpO2NvbnN0IHk9by5zaG91bGRIaWdobGlnaHROb25CYXNpY0FTQ0lJKEwsQT9BLndvcmQ6bnVsbCk7aWYoeSE9PTApe2lmKHk9PT0zP20rKzp5PT09Mj9nKys6eT09PTE/YisrOmthKCksZi5sZW5ndGg+PTFlMyl7aD0hMDticmVhayBlfWYucHVzaChuZXcgayh4LHArMSx4LF8rMSkpfX13aGlsZShkKX1yZXR1cm57cmFuZ2VzOmYsaGFzTW9yZTpoLGFtYmlndW91c0NoYXJhY3RlckNvdW50Om0saW52aXNpYmxlQ2hhcmFjdGVyQ291bnQ6Zyxub25CYXNpY0FzY2lpQ2hhcmFjdGVyQ291bnQ6Yn19c3RhdGljIGNvbXB1dGVVbmljb2RlSGlnaGxpZ2h0UmVhc29uKHQsbil7Y29uc3Qgcz1uZXcgTHIobik7c3dpdGNoKHMuc2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG51bGwpKXtjYXNlIDA6cmV0dXJuIG51bGw7Y2FzZSAyOnJldHVybntraW5kOjF9O2Nhc2UgMzp7Y29uc3QgaT10LmNvZGVQb2ludEF0KDApLG89cy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmdldFByaW1hcnlDb25mdXNhYmxlKGkpLGw9S2UuZ2V0TG9jYWxlcygpLmZpbHRlcih1PT4hS2UuZ2V0SW5zdGFuY2UobmV3IFNldChbLi4ubi5hbGxvd2VkTG9jYWxlcyx1XSkpLmlzQW1iaWd1b3VzKGkpKTtyZXR1cm57a2luZDowLGNvbmZ1c2FibGVXaXRoOlN0cmluZy5mcm9tQ29kZVBvaW50KG8pLG5vdEFtYmlndW91c0luTG9jYWxlczpsfX1jYXNlIDE6cmV0dXJue2tpbmQ6Mn19fX1mdW5jdGlvbiBWYShlLHQpe3JldHVybmBbJHt4aShlLm1hcChzPT5TdHJpbmcuZnJvbUNvZGVQb2ludChzKSkuam9pbigiIikpfV1gfWNsYXNzIExye2NvbnN0cnVjdG9yKHQpe3RoaXMub3B0aW9ucz10LHRoaXMuYWxsb3dlZENvZGVQb2ludHM9bmV3IFNldCh0LmFsbG93ZWRDb2RlUG9pbnRzKSx0aGlzLmFtYmlndW91c0NoYXJhY3RlcnM9S2UuZ2V0SW5zdGFuY2UobmV3IFNldCh0LmFsbG93ZWRMb2NhbGVzKSl9Z2V0Q2FuZGlkYXRlQ29kZVBvaW50cygpe2lmKHRoaXMub3B0aW9ucy5ub25CYXNpY0FTQ0lJKXJldHVybiJhbGxOb25CYXNpY0FzY2lpIjtjb25zdCB0PW5ldyBTZXQ7aWYodGhpcy5vcHRpb25zLmludmlzaWJsZUNoYXJhY3RlcnMpZm9yKGNvbnN0IG4gb2YgZXQuY29kZVBvaW50cyl2cihTdHJpbmcuZnJvbUNvZGVQb2ludChuKSl8fHQuYWRkKG4pO2lmKHRoaXMub3B0aW9ucy5hbWJpZ3VvdXNDaGFyYWN0ZXJzKWZvcihjb25zdCBuIG9mIHRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5nZXRDb25mdXNhYmxlQ29kZVBvaW50cygpKXQuYWRkKG4pO2Zvcihjb25zdCBuIG9mIHRoaXMuYWxsb3dlZENvZGVQb2ludHMpdC5kZWxldGUobik7cmV0dXJuIHR9c2hvdWxkSGlnaGxpZ2h0Tm9uQmFzaWNBU0NJSSh0LG4pe2NvbnN0IHM9dC5jb2RlUG9pbnRBdCgwKTtpZih0aGlzLmFsbG93ZWRDb2RlUG9pbnRzLmhhcyhzKSlyZXR1cm4gMDtpZih0aGlzLm9wdGlvbnMubm9uQmFzaWNBU0NJSSlyZXR1cm4gMTtsZXQgcj0hMSxpPSExO2lmKG4pZm9yKGNvbnN0IG8gb2Ygbil7Y29uc3QgbD1vLmNvZGVQb2ludEF0KDApLHU9Q2kobyk7cj1yfHx1LCF1JiYhdGhpcy5hbWJpZ3VvdXNDaGFyYWN0ZXJzLmlzQW1iaWd1b3VzKGwpJiYhZXQuaXNJbnZpc2libGVDaGFyYWN0ZXIobCkmJihpPSEwKX1yZXR1cm4hciYmaT8wOnRoaXMub3B0aW9ucy5pbnZpc2libGVDaGFyYWN0ZXJzJiYhdnIodCkmJmV0LmlzSW52aXNpYmxlQ2hhcmFjdGVyKHMpPzI6dGhpcy5vcHRpb25zLmFtYmlndW91c0NoYXJhY3RlcnMmJnRoaXMuYW1iaWd1b3VzQ2hhcmFjdGVycy5pc0FtYmlndW91cyhzKT8zOjB9fWZ1bmN0aW9uIHZyKGUpe3JldHVybiBlPT09IiAifHxlPT09YApgfHxlPT09IgkifWNsYXNzIEF0e2NvbnN0cnVjdG9yKHQsbixzKXt0aGlzLmNoYW5nZXM9dCx0aGlzLm1vdmVzPW4sdGhpcy5oaXRUaW1lb3V0PXN9fWNsYXNzIElhe2NvbnN0cnVjdG9yKHQsbil7dGhpcy5saW5lUmFuZ2VNYXBwaW5nPXQsdGhpcy5jaGFuZ2VzPW59fWNsYXNzIEl7c3RhdGljIGFkZFJhbmdlKHQsbil7bGV0IHM9MDtmb3IoO3M8bi5sZW5ndGgmJm5bc10uZW5kRXhjbHVzaXZlPHQuc3RhcnQ7KXMrKztsZXQgcj1zO2Zvcig7cjxuLmxlbmd0aCYmbltyXS5zdGFydDw9dC5lbmRFeGNsdXNpdmU7KXIrKztpZihzPT09ciluLnNwbGljZShzLDAsdCk7ZWxzZXtjb25zdCBpPU1hdGgubWluKHQuc3RhcnQsbltzXS5zdGFydCksbz1NYXRoLm1heCh0LmVuZEV4Y2x1c2l2ZSxuW3ItMV0uZW5kRXhjbHVzaXZlKTtuLnNwbGljZShzLHItcyxuZXcgSShpLG8pKX19c3RhdGljIHRyeUNyZWF0ZSh0LG4pe2lmKCEodD5uKSlyZXR1cm4gbmV3IEkodCxuKX1zdGF0aWMgb2ZMZW5ndGgodCl7cmV0dXJuIG5ldyBJKDAsdCl9c3RhdGljIG9mU3RhcnRBbmRMZW5ndGgodCxuKXtyZXR1cm4gbmV3IEkodCx0K24pfWNvbnN0cnVjdG9yKHQsbil7aWYodGhpcy5zdGFydD10LHRoaXMuZW5kRXhjbHVzaXZlPW4sdD5uKXRocm93IG5ldyByZShgSW52YWxpZCByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCl9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydD09PXRoaXMuZW5kRXhjbHVzaXZlfWRlbHRhKHQpe3JldHVybiBuZXcgSSh0aGlzLnN0YXJ0K3QsdGhpcy5lbmRFeGNsdXNpdmUrdCl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gbmV3IEkodGhpcy5zdGFydCt0LHRoaXMuZW5kRXhjbHVzaXZlKX1kZWx0YUVuZCh0KXtyZXR1cm4gbmV3IEkodGhpcy5zdGFydCx0aGlzLmVuZEV4Y2x1c2l2ZSt0KX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kRXhjbHVzaXZlLXRoaXMuc3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gWyR7dGhpcy5zdGFydH0sICR7dGhpcy5lbmRFeGNsdXNpdmV9KWB9Y29udGFpbnModCl7cmV0dXJuIHRoaXMuc3RhcnQ8PXQmJnQ8dGhpcy5lbmRFeGNsdXNpdmV9am9pbih0KXtyZXR1cm4gbmV3IEkoTWF0aC5taW4odGhpcy5zdGFydCx0LnN0YXJ0KSxNYXRoLm1heCh0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSkpfWludGVyc2VjdCh0KXtjb25zdCBuPU1hdGgubWF4KHRoaXMuc3RhcnQsdC5zdGFydCkscz1NYXRoLm1pbih0aGlzLmVuZEV4Y2x1c2l2ZSx0LmVuZEV4Y2x1c2l2ZSk7aWYobjw9cylyZXR1cm4gbmV3IEkobixzKX1pbnRlcnNlY3RzKHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydCx0LnN0YXJ0KSxzPU1hdGgubWluKHRoaXMuZW5kRXhjbHVzaXZlLHQuZW5kRXhjbHVzaXZlKTtyZXR1cm4gbjxzfWlzQmVmb3JlKHQpe3JldHVybiB0aGlzLmVuZEV4Y2x1c2l2ZTw9dC5zdGFydH1pc0FmdGVyKHQpe3JldHVybiB0aGlzLnN0YXJ0Pj10LmVuZEV4Y2x1c2l2ZX1zbGljZSh0KXtyZXR1cm4gdC5zbGljZSh0aGlzLnN0YXJ0LHRoaXMuZW5kRXhjbHVzaXZlKX1zdWJzdHJpbmcodCl7cmV0dXJuIHQuc3Vic3RyaW5nKHRoaXMuc3RhcnQsdGhpcy5lbmRFeGNsdXNpdmUpfWNsaXAodCl7aWYodGhpcy5pc0VtcHR5KXRocm93IG5ldyByZShgSW52YWxpZCBjbGlwcGluZyByYW5nZTogJHt0aGlzLnRvU3RyaW5nKCl9YCk7cmV0dXJuIE1hdGgubWF4KHRoaXMuc3RhcnQsTWF0aC5taW4odGhpcy5lbmRFeGNsdXNpdmUtMSx0KSl9Y2xpcEN5Y2xpYyh0KXtpZih0aGlzLmlzRW1wdHkpdGhyb3cgbmV3IHJlKGBJbnZhbGlkIGNsaXBwaW5nIHJhbmdlOiAke3RoaXMudG9TdHJpbmcoKX1gKTtyZXR1cm4gdDx0aGlzLnN0YXJ0P3RoaXMuZW5kRXhjbHVzaXZlLSh0aGlzLnN0YXJ0LXQpJXRoaXMubGVuZ3RoOnQ+PXRoaXMuZW5kRXhjbHVzaXZlP3RoaXMuc3RhcnQrKHQtdGhpcy5zdGFydCkldGhpcy5sZW5ndGg6dH1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0O248dGhpcy5lbmRFeGNsdXNpdmU7bisrKXQobil9fWZ1bmN0aW9uIHFlKGUsdCl7Y29uc3Qgbj1zdChlLHQpO3JldHVybiBuPT09LTE/dm9pZCAwOmVbbl19ZnVuY3Rpb24gc3QoZSx0LG49MCxzPWUubGVuZ3RoKXtsZXQgcj1uLGk9cztmb3IoO3I8aTspe2NvbnN0IG89TWF0aC5mbG9vcigocitpKS8yKTt0KGVbb10pP3I9bysxOmk9b31yZXR1cm4gci0xfWZ1bmN0aW9uIEJhKGUsdCl7Y29uc3Qgbj1MbihlLHQpO3JldHVybiBuPT09ZS5sZW5ndGg/dm9pZCAwOmVbbl19ZnVuY3Rpb24gTG4oZSx0LG49MCxzPWUubGVuZ3RoKXtsZXQgcj1uLGk9cztmb3IoO3I8aTspe2NvbnN0IG89TWF0aC5mbG9vcigocitpKS8yKTt0KGVbb10pP2k9bzpyPW8rMX1yZXR1cm4gcn1jb25zdCBJdD1jbGFzcyBJdHtjb25zdHJ1Y3Rvcih0KXt0aGlzLl9hcnJheT10LHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9MH1maW5kTGFzdE1vbm90b25vdXModCl7aWYoSXQuYXNzZXJ0SW52YXJpYW50cyl7aWYodGhpcy5fcHJldkZpbmRMYXN0UHJlZGljYXRlKXtmb3IoY29uc3QgcyBvZiB0aGlzLl9hcnJheSlpZih0aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGUocykmJiF0KHMpKXRocm93IG5ldyBFcnJvcigiTW9ub3Rvbm91c0FycmF5OiBjdXJyZW50IHByZWRpY2F0ZSBtdXN0IGJlIHdlYWtlciB0aGFuIChvciBlcXVhbCB0bykgdGhlIHByZXZpb3VzIHByZWRpY2F0ZS4iKX10aGlzLl9wcmV2RmluZExhc3RQcmVkaWNhdGU9dH1jb25zdCBuPXN0KHRoaXMuX2FycmF5LHQsdGhpcy5fZmluZExhc3RNb25vdG9ub3VzTGFzdElkeCk7cmV0dXJuIHRoaXMuX2ZpbmRMYXN0TW9ub3Rvbm91c0xhc3RJZHg9bisxLG49PT0tMT92b2lkIDA6dGhpcy5fYXJyYXlbbl19fTtJdC5hc3NlcnRJbnZhcmlhbnRzPSExO2xldCBSdD1JdDtjbGFzcyBEe3N0YXRpYyBmcm9tUmFuZ2VJbmNsdXNpdmUodCl7cmV0dXJuIG5ldyBEKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlcisxKX1zdGF0aWMgam9pbk1hbnkodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybltdO2xldCBuPW5ldyBtZSh0WzBdLnNsaWNlKCkpO2ZvcihsZXQgcz0xO3M8dC5sZW5ndGg7cysrKW49bi5nZXRVbmlvbihuZXcgbWUodFtzXS5zbGljZSgpKSk7cmV0dXJuIG4ucmFuZ2VzfXN0YXRpYyBqb2luKHQpe2lmKHQubGVuZ3RoPT09MCl0aHJvdyBuZXcgcmUoImxpbmVSYW5nZXMgY2Fubm90IGJlIGVtcHR5Iik7bGV0IG49dFswXS5zdGFydExpbmVOdW1iZXIscz10WzBdLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7Zm9yKGxldCByPTE7cjx0Lmxlbmd0aDtyKyspbj1NYXRoLm1pbihuLHRbcl0uc3RhcnRMaW5lTnVtYmVyKSxzPU1hdGgubWF4KHMsdFtyXS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gbmV3IEQobixzKX1zdGF0aWMgb2ZMZW5ndGgodCxuKXtyZXR1cm4gbmV3IEQodCx0K24pfXN0YXRpYyBkZXNlcmlhbGl6ZSh0KXtyZXR1cm4gbmV3IEQodFswXSx0WzFdKX1jb25zdHJ1Y3Rvcih0LG4pe2lmKHQ+bil0aHJvdyBuZXcgcmUoYHN0YXJ0TGluZU51bWJlciAke3R9IGNhbm5vdCBiZSBhZnRlciBlbmRMaW5lTnVtYmVyRXhjbHVzaXZlICR7bn1gKTt0aGlzLnN0YXJ0TGluZU51bWJlcj10LHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT1ufWNvbnRhaW5zKHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjw9dCYmdDx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI9PT10aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9ZGVsdGEodCl7cmV0dXJuIG5ldyBEKHRoaXMuc3RhcnRMaW5lTnVtYmVyK3QsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK3QpfWRlbHRhTGVuZ3RoKHQpe3JldHVybiBuZXcgRCh0aGlzLnN0YXJ0TGluZU51bWJlcix0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrdCl9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtdGhpcy5zdGFydExpbmVOdW1iZXJ9am9pbih0KXtyZXR1cm4gbmV3IEQoTWF0aC5taW4odGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLE1hdGgubWF4KHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKX10b1N0cmluZygpe3JldHVybmBbJHt0aGlzLnN0YXJ0TGluZU51bWJlcn0sJHt0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmV9KWB9aW50ZXJzZWN0KHQpe2NvbnN0IG49TWF0aC5tYXgodGhpcy5zdGFydExpbmVOdW1iZXIsdC5zdGFydExpbmVOdW1iZXIpLHM9TWF0aC5taW4odGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk7aWYobjw9cylyZXR1cm4gbmV3IEQobixzKX1pbnRlcnNlY3RzU3RyaWN0KHQpe3JldHVybiB0aGlzLnN0YXJ0TGluZU51bWJlcjx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnQuc3RhcnRMaW5lTnVtYmVyPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1vdmVybGFwT3JUb3VjaCh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmdC5zdGFydExpbmVOdW1iZXI8PXRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1lcXVhbHModCl7cmV0dXJuIHRoaXMuc3RhcnRMaW5lTnVtYmVyPT09dC5zdGFydExpbmVOdW1iZXImJnRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX10b0luY2x1c2l2ZVJhbmdlKCl7cmV0dXJuIHRoaXMuaXNFbXB0eT9udWxsOm5ldyBrKHRoaXMuc3RhcnRMaW5lTnVtYmVyLDEsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpfXRvRXhjbHVzaXZlUmFuZ2UoKXtyZXR1cm4gbmV3IGsodGhpcy5zdGFydExpbmVOdW1iZXIsMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSl9bWFwVG9MaW5lQXJyYXkodCl7Y29uc3Qgbj1bXTtmb3IobGV0IHM9dGhpcy5zdGFydExpbmVOdW1iZXI7czx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7cysrKW4ucHVzaCh0KHMpKTtyZXR1cm4gbn1mb3JFYWNoKHQpe2ZvcihsZXQgbj10aGlzLnN0YXJ0TGluZU51bWJlcjtuPHRoaXMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTtuKyspdChuKX1zZXJpYWxpemUoKXtyZXR1cm5bdGhpcy5zdGFydExpbmVOdW1iZXIsdGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlXX1pbmNsdWRlcyh0KXtyZXR1cm4gdGhpcy5zdGFydExpbmVOdW1iZXI8PXQmJnQ8dGhpcy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlfXRvT2Zmc2V0UmFuZ2UoKXtyZXR1cm4gbmV3IEkodGhpcy5zdGFydExpbmVOdW1iZXItMSx0aGlzLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSl9fWNsYXNzIG1le2NvbnN0cnVjdG9yKHQ9W10pe3RoaXMuX25vcm1hbGl6ZWRSYW5nZXM9dH1nZXQgcmFuZ2VzKCl7cmV0dXJuIHRoaXMuX25vcm1hbGl6ZWRSYW5nZXN9YWRkUmFuZ2UodCl7aWYodC5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBuPUxuKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscj0+ci5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPj10LnN0YXJ0TGluZU51bWJlcikscz1zdCh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLHI9PnIuc3RhcnRMaW5lTnVtYmVyPD10LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpKzE7aWYobj09PXMpdGhpcy5fbm9ybWFsaXplZFJhbmdlcy5zcGxpY2UobiwwLHQpO2Vsc2UgaWYobj09PXMtMSl7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXNbbl09ci5qb2luKHQpfWVsc2V7Y29uc3Qgcj10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW25dLmpvaW4odGhpcy5fbm9ybWFsaXplZFJhbmdlc1tzLTFdKS5qb2luKHQpO3RoaXMuX25vcm1hbGl6ZWRSYW5nZXMuc3BsaWNlKG4scy1uLHIpfX1jb250YWlucyh0KXtjb25zdCBuPXFlKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscz0+cy5zdGFydExpbmVOdW1iZXI8PXQpO3JldHVybiEhbiYmbi5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnR9aW50ZXJzZWN0cyh0KXtjb25zdCBuPXFlKHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMscz0+cy5zdGFydExpbmVOdW1iZXI8dC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4hIW4mJm4uZW5kTGluZU51bWJlckV4Y2x1c2l2ZT50LnN0YXJ0TGluZU51bWJlcn1nZXRVbmlvbih0KXtpZih0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD09PTApcmV0dXJuIHQ7aWYodC5fbm9ybWFsaXplZFJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiB0aGlzO2NvbnN0IG49W107bGV0IHM9MCxyPTAsaT1udWxsO2Zvcig7czx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aHx8cjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aDspe2xldCBvPW51bGw7aWYoczx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCYmcjx0Ll9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aCl7Y29uc3QgbD10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3NdLHU9dC5fbm9ybWFsaXplZFJhbmdlc1tyXTtsLnN0YXJ0TGluZU51bWJlcjx1LnN0YXJ0TGluZU51bWJlcj8obz1sLHMrKyk6KG89dSxyKyspfWVsc2Ugczx0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLmxlbmd0aD8obz10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3NdLHMrKyk6KG89dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxyKyspO2k9PT1udWxsP2k9bzppLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PW8uc3RhcnRMaW5lTnVtYmVyP2k9bmV3IEQoaS5zdGFydExpbmVOdW1iZXIsTWF0aC5tYXgoaS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG8uZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpOihuLnB1c2goaSksaT1vKX1yZXR1cm4gaSE9PW51bGwmJm4ucHVzaChpKSxuZXcgbWUobil9c3VidHJhY3RGcm9tKHQpe2NvbnN0IG49TG4odGhpcy5fbm9ybWFsaXplZFJhbmdlcyxvPT5vLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU+PXQuc3RhcnRMaW5lTnVtYmVyKSxzPXN0KHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMsbz0+by5zdGFydExpbmVOdW1iZXI8PXQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkrMTtpZihuPT09cylyZXR1cm4gbmV3IG1lKFt0XSk7Y29uc3Qgcj1bXTtsZXQgaT10LnN0YXJ0TGluZU51bWJlcjtmb3IobGV0IG89bjtvPHM7bysrKXtjb25zdCBsPXRoaXMuX25vcm1hbGl6ZWRSYW5nZXNbb107bC5zdGFydExpbmVOdW1iZXI+aSYmci5wdXNoKG5ldyBEKGksbC5zdGFydExpbmVOdW1iZXIpKSxpPWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1yZXR1cm4gaTx0LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUmJnIucHVzaChuZXcgRChpLHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSkpLG5ldyBtZShyKX10b1N0cmluZygpe3JldHVybiB0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcCh0PT50LnRvU3RyaW5nKCkpLmpvaW4oIiwgIil9Z2V0SW50ZXJzZWN0aW9uKHQpe2NvbnN0IG49W107bGV0IHM9MCxyPTA7Zm9yKDtzPHRoaXMuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoJiZyPHQuX25vcm1hbGl6ZWRSYW5nZXMubGVuZ3RoOyl7Y29uc3QgaT10aGlzLl9ub3JtYWxpemVkUmFuZ2VzW3NdLG89dC5fbm9ybWFsaXplZFJhbmdlc1tyXSxsPWkuaW50ZXJzZWN0KG8pO2wmJiFsLmlzRW1wdHkmJm4ucHVzaChsKSxpLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8by5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlP3MrKzpyKyt9cmV0dXJuIG5ldyBtZShuKX1nZXRXaXRoRGVsdGEodCl7cmV0dXJuIG5ldyBtZSh0aGlzLl9ub3JtYWxpemVkUmFuZ2VzLm1hcChuPT5uLmRlbHRhKHQpKSl9fWNvbnN0IEVlPWNsYXNzIEVle3N0YXRpYyBiZXR3ZWVuUG9zaXRpb25zKHQsbil7cmV0dXJuIHQubGluZU51bWJlcj09PW4ubGluZU51bWJlcj9uZXcgRWUoMCxuLmNvbHVtbi10LmNvbHVtbik6bmV3IEVlKG4ubGluZU51bWJlci10LmxpbmVOdW1iZXIsbi5jb2x1bW4tMSl9c3RhdGljIG9mUmFuZ2UodCl7cmV0dXJuIEVlLmJldHdlZW5Qb3NpdGlvbnModC5nZXRTdGFydFBvc2l0aW9uKCksdC5nZXRFbmRQb3NpdGlvbigpKX1zdGF0aWMgb2ZUZXh0KHQpe2xldCBuPTAscz0wO2Zvcihjb25zdCByIG9mIHQpcj09PWAKYD8obisrLHM9MCk6cysrO3JldHVybiBuZXcgRWUobixzKX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMubGluZUNvdW50PXQsdGhpcy5jb2x1bW5Db3VudD1ufWlzR3JlYXRlclRoYW5PckVxdWFsVG8odCl7cmV0dXJuIHRoaXMubGluZUNvdW50IT09dC5saW5lQ291bnQ/dGhpcy5saW5lQ291bnQ+dC5saW5lQ291bnQ6dGhpcy5jb2x1bW5Db3VudD49dC5jb2x1bW5Db3VudH1jcmVhdGVSYW5nZSh0KXtyZXR1cm4gdGhpcy5saW5lQ291bnQ9PT0wP25ldyBrKHQubGluZU51bWJlcix0LmNvbHVtbix0LmxpbmVOdW1iZXIsdC5jb2x1bW4rdGhpcy5jb2x1bW5Db3VudCk6bmV3IGsodC5saW5lTnVtYmVyLHQuY29sdW1uLHQubGluZU51bWJlcit0aGlzLmxpbmVDb3VudCx0aGlzLmNvbHVtbkNvdW50KzEpfWFkZFRvUG9zaXRpb24odCl7cmV0dXJuIHRoaXMubGluZUNvdW50PT09MD9uZXcgVSh0LmxpbmVOdW1iZXIsdC5jb2x1bW4rdGhpcy5jb2x1bW5Db3VudCk6bmV3IFUodC5saW5lTnVtYmVyK3RoaXMubGluZUNvdW50LHRoaXMuY29sdW1uQ291bnQrMSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLmxpbmVDb3VudH0sJHt0aGlzLmNvbHVtbkNvdW50fWB9fTtFZS56ZXJvPW5ldyBFZSgwLDApO2xldCBOcj1FZTtjbGFzcyBxYXtjb25zdHJ1Y3Rvcih0LG4pe3RoaXMucmFuZ2U9dCx0aGlzLnRleHQ9bn10b1NpbmdsZUVkaXRPcGVyYXRpb24oKXtyZXR1cm57cmFuZ2U6dGhpcy5yYW5nZSx0ZXh0OnRoaXMudGV4dH19fWNsYXNzIGxle3N0YXRpYyBpbnZlcnNlKHQsbixzKXtjb25zdCByPVtdO2xldCBpPTEsbz0xO2Zvcihjb25zdCB1IG9mIHQpe2NvbnN0IGM9bmV3IGxlKG5ldyBEKGksdS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIpLG5ldyBEKG8sdS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIpKTtjLm1vZGlmaWVkLmlzRW1wdHl8fHIucHVzaChjKSxpPXUub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxvPXUubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZX1jb25zdCBsPW5ldyBsZShuZXcgRChpLG4rMSksbmV3IEQobyxzKzEpKTtyZXR1cm4gbC5tb2RpZmllZC5pc0VtcHR5fHxyLnB1c2gobCkscn1zdGF0aWMgY2xpcCh0LG4scyl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgaSBvZiB0KXtjb25zdCBvPWkub3JpZ2luYWwuaW50ZXJzZWN0KG4pLGw9aS5tb2RpZmllZC5pbnRlcnNlY3Qocyk7byYmIW8uaXNFbXB0eSYmbCYmIWwuaXNFbXB0eSYmci5wdXNoKG5ldyBsZShvLGwpKX1yZXR1cm4gcn1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWw9dCx0aGlzLm1vZGlmaWVkPW59dG9TdHJpbmcoKXtyZXR1cm5geyR7dGhpcy5vcmlnaW5hbC50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkLnRvU3RyaW5nKCl9fWB9ZmxpcCgpe3JldHVybiBuZXcgbGUodGhpcy5tb2RpZmllZCx0aGlzLm9yaWdpbmFsKX1qb2luKHQpe3JldHVybiBuZXcgbGUodGhpcy5vcmlnaW5hbC5qb2luKHQub3JpZ2luYWwpLHRoaXMubW9kaWZpZWQuam9pbih0Lm1vZGlmaWVkKSl9dG9SYW5nZU1hcHBpbmcoKXtjb25zdCB0PXRoaXMub3JpZ2luYWwudG9JbmNsdXNpdmVSYW5nZSgpLG49dGhpcy5tb2RpZmllZC50b0luY2x1c2l2ZVJhbmdlKCk7aWYodCYmbilyZXR1cm4gbmV3IGZlKHQsbik7aWYodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXI9PT0xfHx0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj09PTEpe2lmKCEodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI9PT0xJiZ0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj09PTEpKXRocm93IG5ldyByZSgibm90IGEgdmFsaWQgZGlmZiIpO3JldHVybiBuZXcgZmUobmV3IGsodGhpcy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSksbmV3IGsodGhpcy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsMSx0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsMSkpfWVsc2UgcmV0dXJuIG5ldyBmZShuZXcgayh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxuZXcgayh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl9dG9SYW5nZU1hcHBpbmcyKHQsbil7aWYoU3IodGhpcy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLHQpJiZTcih0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbikpcmV0dXJuIG5ldyBmZShuZXcgayh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxLHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSxuZXcgayh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxLHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSwxKSk7aWYoIXRoaXMub3JpZ2luYWwuaXNFbXB0eSYmIXRoaXMubW9kaWZpZWQuaXNFbXB0eSlyZXR1cm4gbmV3IGZlKGsuZnJvbVBvc2l0aW9ucyhuZXcgVSh0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciwxKSxVZShuZXcgVSh0aGlzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksdCkpLGsuZnJvbVBvc2l0aW9ucyhuZXcgVSh0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciwxKSxVZShuZXcgVSh0aGlzLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtMSxOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiksbikpKTtpZih0aGlzLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcj4xJiZ0aGlzLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcj4xKXJldHVybiBuZXcgZmUoay5mcm9tUG9zaXRpb25zKFVlKG5ldyBVKHRoaXMub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLHQpLFVlKG5ldyBVKHRoaXMub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSx0KSksay5mcm9tUG9zaXRpb25zKFVlKG5ldyBVKHRoaXMubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLTEsTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLG4pLFVlKG5ldyBVKHRoaXMubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xLE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxuKSkpO3Rocm93IG5ldyByZX19ZnVuY3Rpb24gVWUoZSx0KXtpZihlLmxpbmVOdW1iZXI8MSlyZXR1cm4gbmV3IFUoMSwxKTtpZihlLmxpbmVOdW1iZXI+dC5sZW5ndGgpcmV0dXJuIG5ldyBVKHQubGVuZ3RoLHRbdC5sZW5ndGgtMV0ubGVuZ3RoKzEpO2NvbnN0IG49dFtlLmxpbmVOdW1iZXItMV07cmV0dXJuIGUuY29sdW1uPm4ubGVuZ3RoKzE/bmV3IFUoZS5saW5lTnVtYmVyLG4ubGVuZ3RoKzEpOmV9ZnVuY3Rpb24gU3IoZSx0KXtyZXR1cm4gZT49MSYmZTw9dC5sZW5ndGh9Y2xhc3MgeGUgZXh0ZW5kcyBsZXtzdGF0aWMgZnJvbVJhbmdlTWFwcGluZ3ModCl7Y29uc3Qgbj1ELmpvaW4odC5tYXAocj0+RC5mcm9tUmFuZ2VJbmNsdXNpdmUoci5vcmlnaW5hbFJhbmdlKSkpLHM9RC5qb2luKHQubWFwKHI9PkQuZnJvbVJhbmdlSW5jbHVzaXZlKHIubW9kaWZpZWRSYW5nZSkpKTtyZXR1cm4gbmV3IHhlKG4scyx0KX1jb25zdHJ1Y3Rvcih0LG4scyl7c3VwZXIodCxuKSx0aGlzLmlubmVyQ2hhbmdlcz1zfWZsaXAoKXtyZXR1cm4gbmV3IHhlKHRoaXMubW9kaWZpZWQsdGhpcy5vcmlnaW5hbCx0aGlzLmlubmVyQ2hhbmdlcz8ubWFwKHQ9PnQuZmxpcCgpKSl9d2l0aElubmVyQ2hhbmdlc0Zyb21MaW5lUmFuZ2VzKCl7cmV0dXJuIG5ldyB4ZSh0aGlzLm9yaWdpbmFsLHRoaXMubW9kaWZpZWQsW3RoaXMudG9SYW5nZU1hcHBpbmcoKV0pfX1jbGFzcyBmZXtzdGF0aWMgYXNzZXJ0U29ydGVkKHQpe2ZvcihsZXQgbj0xO248dC5sZW5ndGg7bisrKXtjb25zdCBzPXRbbi0xXSxyPXRbbl07aWYoIShzLm9yaWdpbmFsUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKS5pc0JlZm9yZU9yRXF1YWwoci5vcmlnaW5hbFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSkmJnMubW9kaWZpZWRSYW5nZS5nZXRFbmRQb3NpdGlvbigpLmlzQmVmb3JlT3JFcXVhbChyLm1vZGlmaWVkUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpKSkpdGhyb3cgbmV3IHJlKCJSYW5nZSBtYXBwaW5ncyBtdXN0IGJlIHNvcnRlZCIpfX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMub3JpZ2luYWxSYW5nZT10LHRoaXMubW9kaWZpZWRSYW5nZT1ufXRvU3RyaW5nKCl7cmV0dXJuYHske3RoaXMub3JpZ2luYWxSYW5nZS50b1N0cmluZygpfS0+JHt0aGlzLm1vZGlmaWVkUmFuZ2UudG9TdHJpbmcoKX19YH1mbGlwKCl7cmV0dXJuIG5ldyBmZSh0aGlzLm1vZGlmaWVkUmFuZ2UsdGhpcy5vcmlnaW5hbFJhbmdlKX10b1RleHRFZGl0KHQpe2NvbnN0IG49dC5nZXRWYWx1ZU9mUmFuZ2UodGhpcy5tb2RpZmllZFJhbmdlKTtyZXR1cm4gbmV3IHFhKHRoaXMub3JpZ2luYWxSYW5nZSxuKX19Y29uc3QgVWE9MztjbGFzcyBIYXtjb21wdXRlRGlmZih0LG4scyl7Y29uc3QgaT1uZXcgemEodCxuLHttYXhDb21wdXRhdGlvblRpbWU6cy5tYXhDb21wdXRhdGlvblRpbWVNcyxzaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZTpzLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLHNob3VsZENvbXB1dGVDaGFyQ2hhbmdlczohMCxzaG91bGRNYWtlUHJldHR5RGlmZjohMCxzaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzOiEwfSkuY29tcHV0ZURpZmYoKSxvPVtdO2xldCBsPW51bGw7Zm9yKGNvbnN0IHUgb2YgaS5jaGFuZ2VzKXtsZXQgYzt1Lm9yaWdpbmFsRW5kTGluZU51bWJlcj09PTA/Yz1uZXcgRCh1Lm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyKzEsdS5vcmlnaW5hbFN0YXJ0TGluZU51bWJlcisxKTpjPW5ldyBEKHUub3JpZ2luYWxTdGFydExpbmVOdW1iZXIsdS5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMSk7bGV0IGY7dS5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT0wP2Y9bmV3IEQodS5tb2RpZmllZFN0YXJ0TGluZU51bWJlcisxLHUubW9kaWZpZWRTdGFydExpbmVOdW1iZXIrMSk6Zj1uZXcgRCh1Lm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLHUubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzEpO2xldCBoPW5ldyB4ZShjLGYsdS5jaGFyQ2hhbmdlcz8ubWFwKGQ9Pm5ldyBmZShuZXcgayhkLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyLGQub3JpZ2luYWxTdGFydENvbHVtbixkLm9yaWdpbmFsRW5kTGluZU51bWJlcixkLm9yaWdpbmFsRW5kQ29sdW1uKSxuZXcgayhkLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyLGQubW9kaWZpZWRTdGFydENvbHVtbixkLm1vZGlmaWVkRW5kTGluZU51bWJlcixkLm1vZGlmaWVkRW5kQ29sdW1uKSkpKTtsJiYobC5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09aC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXJ8fGwub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZT09PWgub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyKSYmKGg9bmV3IHhlKGwub3JpZ2luYWwuam9pbihoLm9yaWdpbmFsKSxsLm1vZGlmaWVkLmpvaW4oaC5tb2RpZmllZCksbC5pbm5lckNoYW5nZXMmJmguaW5uZXJDaGFuZ2VzP2wuaW5uZXJDaGFuZ2VzLmNvbmNhdChoLmlubmVyQ2hhbmdlcyk6dm9pZCAwKSxvLnBvcCgpKSxvLnB1c2goaCksbD1ofXJldHVybiBDdCgoKT0+X3IobywodSxjKT0+Yy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItdS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09Yy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItdS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZ1Lm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8Yy5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXImJnUubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxjLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpLG5ldyBBdChvLFtdLGkucXVpdEVhcmx5KX19ZnVuY3Rpb24gQ3IoZSx0LG4scyl7cmV0dXJuIG5ldyBSZShlLHQsbikuQ29tcHV0ZURpZmYocyl9bGV0IEFyPWNsYXNze2NvbnN0cnVjdG9yKHQpe2NvbnN0IG49W10scz1bXTtmb3IobGV0IHI9MCxpPXQubGVuZ3RoO3I8aTtyKyspbltyXT12bih0W3JdLDEpLHNbcl09Tm4odFtyXSwxKTt0aGlzLmxpbmVzPXQsdGhpcy5fc3RhcnRDb2x1bW5zPW4sdGhpcy5fZW5kQ29sdW1ucz1zfWdldEVsZW1lbnRzKCl7Y29uc3QgdD1bXTtmb3IobGV0IG49MCxzPXRoaXMubGluZXMubGVuZ3RoO248cztuKyspdFtuXT10aGlzLmxpbmVzW25dLnN1YnN0cmluZyh0aGlzLl9zdGFydENvbHVtbnNbbl0tMSx0aGlzLl9lbmRDb2x1bW5zW25dLTEpO3JldHVybiB0fWdldFN0cmljdEVsZW1lbnQodCl7cmV0dXJuIHRoaXMubGluZXNbdF19Z2V0U3RhcnRMaW5lTnVtYmVyKHQpe3JldHVybiB0KzF9Z2V0RW5kTGluZU51bWJlcih0KXtyZXR1cm4gdCsxfWNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4scyl7Y29uc3Qgcj1bXSxpPVtdLG89W107bGV0IGw9MDtmb3IobGV0IHU9bjt1PD1zO3UrKyl7Y29uc3QgYz10aGlzLmxpbmVzW3VdLGY9dD90aGlzLl9zdGFydENvbHVtbnNbdV06MSxoPXQ/dGhpcy5fZW5kQ29sdW1uc1t1XTpjLmxlbmd0aCsxO2ZvcihsZXQgZD1mO2Q8aDtkKyspcltsXT1jLmNoYXJDb2RlQXQoZC0xKSxpW2xdPXUrMSxvW2xdPWQsbCsrOyF0JiZ1PHMmJihyW2xdPTEwLGlbbF09dSsxLG9bbF09Yy5sZW5ndGgrMSxsKyspfXJldHVybiBuZXcgJGEocixpLG8pfX07Y2xhc3MgJGF7Y29uc3RydWN0b3IodCxuLHMpe3RoaXMuX2NoYXJDb2Rlcz10LHRoaXMuX2xpbmVOdW1iZXJzPW4sdGhpcy5fY29sdW1ucz1zfXRvU3RyaW5nKCl7cmV0dXJuIlsiK3RoaXMuX2NoYXJDb2Rlcy5tYXAoKHQsbik9Pih0PT09MTA/IlxcbiI6U3RyaW5nLmZyb21DaGFyQ29kZSh0KSkrYC0oJHt0aGlzLl9saW5lTnVtYmVyc1tuXX0sJHt0aGlzLl9jb2x1bW5zW25dfSlgKS5qb2luKCIsICIpKyJdIn1fYXNzZXJ0SW5kZXgodCxuKXtpZih0PDB8fHQ+PW4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiSWxsZWdhbCBpbmRleCIpfWdldEVsZW1lbnRzKCl7cmV0dXJuIHRoaXMuX2NoYXJDb2Rlc31nZXRTdGFydExpbmVOdW1iZXIodCl7cmV0dXJuIHQ+MCYmdD09PXRoaXMuX2xpbmVOdW1iZXJzLmxlbmd0aD90aGlzLmdldEVuZExpbmVOdW1iZXIodC0xKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9saW5lTnVtYmVycyksdGhpcy5fbGluZU51bWJlcnNbdF0pfWdldEVuZExpbmVOdW1iZXIodCl7cmV0dXJuIHQ9PT0tMT90aGlzLmdldFN0YXJ0TGluZU51bWJlcih0KzEpOih0aGlzLl9hc3NlcnRJbmRleCh0LHRoaXMuX2xpbmVOdW1iZXJzKSx0aGlzLl9jaGFyQ29kZXNbdF09PT0xMD90aGlzLl9saW5lTnVtYmVyc1t0XSsxOnRoaXMuX2xpbmVOdW1iZXJzW3RdKX1nZXRTdGFydENvbHVtbih0KXtyZXR1cm4gdD4wJiZ0PT09dGhpcy5fY29sdW1ucy5sZW5ndGg/dGhpcy5nZXRFbmRDb2x1bW4odC0xKToodGhpcy5fYXNzZXJ0SW5kZXgodCx0aGlzLl9jb2x1bW5zKSx0aGlzLl9jb2x1bW5zW3RdKX1nZXRFbmRDb2x1bW4odCl7cmV0dXJuIHQ9PT0tMT90aGlzLmdldFN0YXJ0Q29sdW1uKHQrMSk6KHRoaXMuX2Fzc2VydEluZGV4KHQsdGhpcy5fY29sdW1ucyksdGhpcy5fY2hhckNvZGVzW3RdPT09MTA/MTp0aGlzLl9jb2x1bW5zW3RdKzEpfX1jbGFzcyBIZXtjb25zdHJ1Y3Rvcih0LG4scyxyLGksbyxsLHUpe3RoaXMub3JpZ2luYWxTdGFydExpbmVOdW1iZXI9dCx0aGlzLm9yaWdpbmFsU3RhcnRDb2x1bW49bix0aGlzLm9yaWdpbmFsRW5kTGluZU51bWJlcj1zLHRoaXMub3JpZ2luYWxFbmRDb2x1bW49cix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPWksdGhpcy5tb2RpZmllZFN0YXJ0Q29sdW1uPW8sdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9bCx0aGlzLm1vZGlmaWVkRW5kQ29sdW1uPXV9c3RhdGljIGNyZWF0ZUZyb21EaWZmQ2hhbmdlKHQsbixzKXtjb25zdCByPW4uZ2V0U3RhcnRMaW5lTnVtYmVyKHQub3JpZ2luYWxTdGFydCksaT1uLmdldFN0YXJ0Q29sdW1uKHQub3JpZ2luYWxTdGFydCksbz1uLmdldEVuZExpbmVOdW1iZXIodC5vcmlnaW5hbFN0YXJ0K3Qub3JpZ2luYWxMZW5ndGgtMSksbD1uLmdldEVuZENvbHVtbih0Lm9yaWdpbmFsU3RhcnQrdC5vcmlnaW5hbExlbmd0aC0xKSx1PXMuZ2V0U3RhcnRMaW5lTnVtYmVyKHQubW9kaWZpZWRTdGFydCksYz1zLmdldFN0YXJ0Q29sdW1uKHQubW9kaWZpZWRTdGFydCksZj1zLmdldEVuZExpbmVOdW1iZXIodC5tb2RpZmllZFN0YXJ0K3QubW9kaWZpZWRMZW5ndGgtMSksaD1zLmdldEVuZENvbHVtbih0Lm1vZGlmaWVkU3RhcnQrdC5tb2RpZmllZExlbmd0aC0xKTtyZXR1cm4gbmV3IEhlKHIsaSxvLGwsdSxjLGYsaCl9fWZ1bmN0aW9uIFdhKGUpe2lmKGUubGVuZ3RoPD0xKXJldHVybiBlO2NvbnN0IHQ9W2VbMF1dO2xldCBuPXRbMF07Zm9yKGxldCBzPTEscj1lLmxlbmd0aDtzPHI7cysrKXtjb25zdCBpPWVbc10sbz1pLm9yaWdpbmFsU3RhcnQtKG4ub3JpZ2luYWxTdGFydCtuLm9yaWdpbmFsTGVuZ3RoKSxsPWkubW9kaWZpZWRTdGFydC0obi5tb2RpZmllZFN0YXJ0K24ubW9kaWZpZWRMZW5ndGgpO01hdGgubWluKG8sbCk8VWE/KG4ub3JpZ2luYWxMZW5ndGg9aS5vcmlnaW5hbFN0YXJ0K2kub3JpZ2luYWxMZW5ndGgtbi5vcmlnaW5hbFN0YXJ0LG4ubW9kaWZpZWRMZW5ndGg9aS5tb2RpZmllZFN0YXJ0K2kubW9kaWZpZWRMZW5ndGgtbi5tb2RpZmllZFN0YXJ0KToodC5wdXNoKGkpLG49aSl9cmV0dXJuIHR9Y2xhc3MgcnR7Y29uc3RydWN0b3IodCxuLHMscixpKXt0aGlzLm9yaWdpbmFsU3RhcnRMaW5lTnVtYmVyPXQsdGhpcy5vcmlnaW5hbEVuZExpbmVOdW1iZXI9bix0aGlzLm1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyPXMsdGhpcy5tb2RpZmllZEVuZExpbmVOdW1iZXI9cix0aGlzLmNoYXJDaGFuZ2VzPWl9c3RhdGljIGNyZWF0ZUZyb21EaWZmUmVzdWx0KHQsbixzLHIsaSxvLGwpe2xldCB1LGMsZixoLGQ7aWYobi5vcmlnaW5hbExlbmd0aD09PTA/KHU9cy5nZXRTdGFydExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0KS0xLGM9MCk6KHU9cy5nZXRTdGFydExpbmVOdW1iZXIobi5vcmlnaW5hbFN0YXJ0KSxjPXMuZ2V0RW5kTGluZU51bWJlcihuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC0xKSksbi5tb2RpZmllZExlbmd0aD09PTA/KGY9ci5nZXRTdGFydExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0KS0xLGg9MCk6KGY9ci5nZXRTdGFydExpbmVOdW1iZXIobi5tb2RpZmllZFN0YXJ0KSxoPXIuZ2V0RW5kTGluZU51bWJlcihuLm1vZGlmaWVkU3RhcnQrbi5tb2RpZmllZExlbmd0aC0xKSksbyYmbi5vcmlnaW5hbExlbmd0aD4wJiZuLm9yaWdpbmFsTGVuZ3RoPDIwJiZuLm1vZGlmaWVkTGVuZ3RoPjAmJm4ubW9kaWZpZWRMZW5ndGg8MjAmJmkoKSl7Y29uc3QgbT1zLmNyZWF0ZUNoYXJTZXF1ZW5jZSh0LG4ub3JpZ2luYWxTdGFydCxuLm9yaWdpbmFsU3RhcnQrbi5vcmlnaW5hbExlbmd0aC0xKSxnPXIuY3JlYXRlQ2hhclNlcXVlbmNlKHQsbi5tb2RpZmllZFN0YXJ0LG4ubW9kaWZpZWRTdGFydCtuLm1vZGlmaWVkTGVuZ3RoLTEpO2lmKG0uZ2V0RWxlbWVudHMoKS5sZW5ndGg+MCYmZy5nZXRFbGVtZW50cygpLmxlbmd0aD4wKXtsZXQgYj1DcihtLGcsaSwhMCkuY2hhbmdlcztsJiYoYj1XYShiKSksZD1bXTtmb3IobGV0IHg9MCx2PWIubGVuZ3RoO3g8djt4KyspZC5wdXNoKEhlLmNyZWF0ZUZyb21EaWZmQ2hhbmdlKGJbeF0sbSxnKSl9fXJldHVybiBuZXcgcnQodSxjLGYsaCxkKX19Y2xhc3MgemF7Y29uc3RydWN0b3IodCxuLHMpe3RoaXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzPXMuc2hvdWxkQ29tcHV0ZUNoYXJDaGFuZ2VzLHRoaXMuc2hvdWxkUG9zdFByb2Nlc3NDaGFyQ2hhbmdlcz1zLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZT1zLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLHRoaXMuc2hvdWxkTWFrZVByZXR0eURpZmY9cy5zaG91bGRNYWtlUHJldHR5RGlmZix0aGlzLm9yaWdpbmFsTGluZXM9dCx0aGlzLm1vZGlmaWVkTGluZXM9bix0aGlzLm9yaWdpbmFsPW5ldyBBcih0KSx0aGlzLm1vZGlmaWVkPW5ldyBBcihuKSx0aGlzLmNvbnRpbnVlTGluZURpZmY9UnIocy5tYXhDb21wdXRhdGlvblRpbWUpLHRoaXMuY29udGludWVDaGFyRGlmZj1ScihzLm1heENvbXB1dGF0aW9uVGltZT09PTA/MDpNYXRoLm1pbihzLm1heENvbXB1dGF0aW9uVGltZSw1ZTMpKX1jb21wdXRlRGlmZigpe2lmKHRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoPT09MSYmdGhpcy5vcmlnaW5hbC5saW5lc1swXS5sZW5ndGg9PT0wKXJldHVybiB0aGlzLm1vZGlmaWVkLmxpbmVzLmxlbmd0aD09PTEmJnRoaXMubW9kaWZpZWQubGluZXNbMF0ubGVuZ3RoPT09MD97cXVpdEVhcmx5OiExLGNoYW5nZXM6W119OntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOjEsbW9kaWZpZWRTdGFydExpbmVOdW1iZXI6MSxtb2RpZmllZEVuZExpbmVOdW1iZXI6dGhpcy5tb2RpZmllZC5saW5lcy5sZW5ndGgsY2hhckNoYW5nZXM6dm9pZCAwfV19O2lmKHRoaXMubW9kaWZpZWQubGluZXMubGVuZ3RoPT09MSYmdGhpcy5tb2RpZmllZC5saW5lc1swXS5sZW5ndGg9PT0wKXJldHVybntxdWl0RWFybHk6ITEsY2hhbmdlczpbe29yaWdpbmFsU3RhcnRMaW5lTnVtYmVyOjEsb3JpZ2luYWxFbmRMaW5lTnVtYmVyOnRoaXMub3JpZ2luYWwubGluZXMubGVuZ3RoLG1vZGlmaWVkU3RhcnRMaW5lTnVtYmVyOjEsbW9kaWZpZWRFbmRMaW5lTnVtYmVyOjEsY2hhckNoYW5nZXM6dm9pZCAwfV19O2NvbnN0IHQ9Q3IodGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVMaW5lRGlmZix0aGlzLnNob3VsZE1ha2VQcmV0dHlEaWZmKSxuPXQuY2hhbmdlcyxzPXQucXVpdEVhcmx5O2lmKHRoaXMuc2hvdWxkSWdub3JlVHJpbVdoaXRlc3BhY2Upe2NvbnN0IGw9W107Zm9yKGxldCB1PTAsYz1uLmxlbmd0aDt1PGM7dSsrKWwucHVzaChydC5jcmVhdGVGcm9tRGlmZlJlc3VsdCh0aGlzLnNob3VsZElnbm9yZVRyaW1XaGl0ZXNwYWNlLG5bdV0sdGhpcy5vcmlnaW5hbCx0aGlzLm1vZGlmaWVkLHRoaXMuY29udGludWVDaGFyRGlmZix0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyx0aGlzLnNob3VsZFBvc3RQcm9jZXNzQ2hhckNoYW5nZXMpKTtyZXR1cm57cXVpdEVhcmx5OnMsY2hhbmdlczpsfX1jb25zdCByPVtdO2xldCBpPTAsbz0wO2ZvcihsZXQgbD0tMSx1PW4ubGVuZ3RoO2w8dTtsKyspe2NvbnN0IGM9bCsxPHU/bltsKzFdOm51bGwsZj1jP2Mub3JpZ2luYWxTdGFydDp0aGlzLm9yaWdpbmFsTGluZXMubGVuZ3RoLGg9Yz9jLm1vZGlmaWVkU3RhcnQ6dGhpcy5tb2RpZmllZExpbmVzLmxlbmd0aDtmb3IoO2k8ZiYmbzxoOyl7Y29uc3QgZD10aGlzLm9yaWdpbmFsTGluZXNbaV0sbT10aGlzLm1vZGlmaWVkTGluZXNbb107aWYoZCE9PW0pe3tsZXQgZz12bihkLDEpLGI9dm4obSwxKTtmb3IoO2c+MSYmYj4xOyl7Y29uc3QgeD1kLmNoYXJDb2RlQXQoZy0yKSx2PW0uY2hhckNvZGVBdChiLTIpO2lmKHghPT12KWJyZWFrO2ctLSxiLS19KGc+MXx8Yj4xKSYmdGhpcy5fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZShyLGkrMSwxLGcsbysxLDEsYil9e2xldCBnPU5uKGQsMSksYj1ObihtLDEpO2NvbnN0IHg9ZC5sZW5ndGgrMSx2PW0ubGVuZ3RoKzE7Zm9yKDtnPHgmJmI8djspe2NvbnN0IFM9ZC5jaGFyQ29kZUF0KGctMSksTj1kLmNoYXJDb2RlQXQoYi0xKTtpZihTIT09TilicmVhaztnKyssYisrfShnPHh8fGI8dikmJnRoaXMuX3B1c2hUcmltV2hpdGVzcGFjZUNoYXJDaGFuZ2UocixpKzEsZyx4LG8rMSxiLHYpfX1pKyssbysrfWMmJihyLnB1c2gocnQuY3JlYXRlRnJvbURpZmZSZXN1bHQodGhpcy5zaG91bGRJZ25vcmVUcmltV2hpdGVzcGFjZSxjLHRoaXMub3JpZ2luYWwsdGhpcy5tb2RpZmllZCx0aGlzLmNvbnRpbnVlQ2hhckRpZmYsdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMsdGhpcy5zaG91bGRQb3N0UHJvY2Vzc0NoYXJDaGFuZ2VzKSksaSs9Yy5vcmlnaW5hbExlbmd0aCxvKz1jLm1vZGlmaWVkTGVuZ3RoKX1yZXR1cm57cXVpdEVhcmx5OnMsY2hhbmdlczpyfX1fcHVzaFRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4scyxyLGksbyxsKXtpZih0aGlzLl9tZXJnZVRyaW1XaGl0ZXNwYWNlQ2hhckNoYW5nZSh0LG4scyxyLGksbyxsKSlyZXR1cm47bGV0IHU7dGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJih1PVtuZXcgSGUobixzLG4scixpLG8saSxsKV0pLHQucHVzaChuZXcgcnQobixuLGksaSx1KSl9X21lcmdlVHJpbVdoaXRlc3BhY2VDaGFyQ2hhbmdlKHQsbixzLHIsaSxvLGwpe2NvbnN0IHU9dC5sZW5ndGg7aWYodT09PTApcmV0dXJuITE7Y29uc3QgYz10W3UtMV07cmV0dXJuIGMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09MHx8Yy5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT0wPyExOmMub3JpZ2luYWxFbmRMaW5lTnVtYmVyPT09biYmYy5tb2RpZmllZEVuZExpbmVOdW1iZXI9PT1pPyh0aGlzLnNob3VsZENvbXB1dGVDaGFyQ2hhbmdlcyYmYy5jaGFyQ2hhbmdlcyYmYy5jaGFyQ2hhbmdlcy5wdXNoKG5ldyBIZShuLHMsbixyLGksbyxpLGwpKSwhMCk6Yy5vcmlnaW5hbEVuZExpbmVOdW1iZXIrMT09PW4mJmMubW9kaWZpZWRFbmRMaW5lTnVtYmVyKzE9PT1pPyhjLm9yaWdpbmFsRW5kTGluZU51bWJlcj1uLGMubW9kaWZpZWRFbmRMaW5lTnVtYmVyPWksdGhpcy5zaG91bGRDb21wdXRlQ2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMmJmMuY2hhckNoYW5nZXMucHVzaChuZXcgSGUobixzLG4scixpLG8saSxsKSksITApOiExfX1mdW5jdGlvbiB2bihlLHQpe2NvbnN0IG49TGkoZSk7cmV0dXJuIG49PT0tMT90Om4rMX1mdW5jdGlvbiBObihlLHQpe2NvbnN0IG49dmkoZSk7cmV0dXJuIG49PT0tMT90Om4rMn1mdW5jdGlvbiBScihlKXtpZihlPT09MClyZXR1cm4oKT0+ITA7Y29uc3QgdD1EYXRlLm5vdygpO3JldHVybigpPT5EYXRlLm5vdygpLXQ8ZX1mdW5jdGlvbiBPYShlLHQsbj0ocyxyKT0+cz09PXIpe2lmKGU9PT10KXJldHVybiEwO2lmKCFlfHwhdHx8ZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IobGV0IHM9MCxyPWUubGVuZ3RoO3M8cjtzKyspaWYoIW4oZVtzXSx0W3NdKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbipqYShlLHQpe2xldCBuLHM7Zm9yKGNvbnN0IHIgb2YgZSlzIT09dm9pZCAwJiZ0KHMscik/bi5wdXNoKHIpOihuJiYoeWllbGQgbiksbj1bcl0pLHM9cjtuJiYoeWllbGQgbil9ZnVuY3Rpb24gR2EoZSx0KXtmb3IobGV0IG49MDtuPD1lLmxlbmd0aDtuKyspdChuPT09MD92b2lkIDA6ZVtuLTFdLG49PT1lLmxlbmd0aD92b2lkIDA6ZVtuXSl9ZnVuY3Rpb24gWGEoZSx0KXtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0KG49PT0wP3ZvaWQgMDplW24tMV0sZVtuXSxuKzE9PT1lLmxlbmd0aD92b2lkIDA6ZVtuKzFdKX1mdW5jdGlvbiBRYShlLHQpe2Zvcihjb25zdCBuIG9mIHQpZS5wdXNoKG4pfXZhciBTbjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChpKXtyZXR1cm4gaTwwfWUuaXNMZXNzVGhhbj10O2Z1bmN0aW9uIG4oaSl7cmV0dXJuIGk8PTB9ZS5pc0xlc3NUaGFuT3JFcXVhbD1uO2Z1bmN0aW9uIHMoaSl7cmV0dXJuIGk+MH1lLmlzR3JlYXRlclRoYW49cztmdW5jdGlvbiByKGkpe3JldHVybiBpPT09MH1lLmlzTmVpdGhlckxlc3NPckdyZWF0ZXJUaGFuPXIsZS5ncmVhdGVyVGhhbj0xLGUubGVzc1RoYW49LTEsZS5uZWl0aGVyTGVzc09yR3JlYXRlclRoYW49MH0pKFNufHwoU249e30pKTtmdW5jdGlvbiB5dChlLHQpe3JldHVybihuLHMpPT50KGUobiksZShzKSl9Y29uc3QgRXQ9KGUsdCk9PmUtdDtmdW5jdGlvbiBZYShlKXtyZXR1cm4odCxuKT0+LWUodCxuKX1jb25zdCBYZT1jbGFzcyBYZXtjb25zdHJ1Y3Rvcih0KXt0aGlzLml0ZXJhdGU9dH10b0FycmF5KCl7Y29uc3QgdD1bXTtyZXR1cm4gdGhpcy5pdGVyYXRlKG49Pih0LnB1c2gobiksITApKSx0fWZpbHRlcih0KXtyZXR1cm4gbmV3IFhlKG49PnRoaXMuaXRlcmF0ZShzPT50KHMpP24ocyk6ITApKX1tYXAodCl7cmV0dXJuIG5ldyBYZShuPT50aGlzLml0ZXJhdGUocz0+bih0KHMpKSkpfWZpbmRMYXN0KHQpe2xldCBuO3JldHVybiB0aGlzLml0ZXJhdGUocz0+KHQocykmJihuPXMpLCEwKSksbn1maW5kTGFzdE1heEJ5KHQpe2xldCBuLHM9ITA7cmV0dXJuIHRoaXMuaXRlcmF0ZShyPT4oKHN8fFNuLmlzR3JlYXRlclRoYW4odChyLG4pKSkmJihzPSExLG49ciksITApKSxufX07WGUuZW1wdHk9bmV3IFhlKHQ9Pnt9KTtsZXQgeXI9WGU7Y2xhc3Mgd2V7c3RhdGljIHRyaXZpYWwodCxuKXtyZXR1cm4gbmV3IHdlKFtuZXcgaihJLm9mTGVuZ3RoKHQubGVuZ3RoKSxJLm9mTGVuZ3RoKG4ubGVuZ3RoKSldLCExKX1zdGF0aWMgdHJpdmlhbFRpbWVkT3V0KHQsbil7cmV0dXJuIG5ldyB3ZShbbmV3IGooSS5vZkxlbmd0aCh0Lmxlbmd0aCksSS5vZkxlbmd0aChuLmxlbmd0aCkpXSwhMCl9Y29uc3RydWN0b3IodCxuKXt0aGlzLmRpZmZzPXQsdGhpcy5oaXRUaW1lb3V0PW59fWNsYXNzIGp7c3RhdGljIGludmVydCh0LG4pe2NvbnN0IHM9W107cmV0dXJuIEdhKHQsKHIsaSk9PntzLnB1c2goai5mcm9tT2Zmc2V0UGFpcnMocj9yLmdldEVuZEV4Y2x1c2l2ZXMoKTpMZS56ZXJvLGk/aS5nZXRTdGFydHMoKTpuZXcgTGUobiwocj9yLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtci5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlOjApK24pKSl9KSxzfXN0YXRpYyBmcm9tT2Zmc2V0UGFpcnModCxuKXtyZXR1cm4gbmV3IGoobmV3IEkodC5vZmZzZXQxLG4ub2Zmc2V0MSksbmV3IEkodC5vZmZzZXQyLG4ub2Zmc2V0MikpfXN0YXRpYyBhc3NlcnRTb3J0ZWQodCl7bGV0IG47Zm9yKGNvbnN0IHMgb2YgdCl7aWYobiYmIShuLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU8PXMuc2VxMVJhbmdlLnN0YXJ0JiZuLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmU8PXMuc2VxMlJhbmdlLnN0YXJ0KSl0aHJvdyBuZXcgcmUoIlNlcXVlbmNlIGRpZmZzIG11c3QgYmUgc29ydGVkIik7bj1zfX1jb25zdHJ1Y3Rvcih0LG4pe3RoaXMuc2VxMVJhbmdlPXQsdGhpcy5zZXEyUmFuZ2U9bn1zd2FwKCl7cmV0dXJuIG5ldyBqKHRoaXMuc2VxMlJhbmdlLHRoaXMuc2VxMVJhbmdlKX10b1N0cmluZygpe3JldHVybmAke3RoaXMuc2VxMVJhbmdlfSA8LT4gJHt0aGlzLnNlcTJSYW5nZX1gfWpvaW4odCl7cmV0dXJuIG5ldyBqKHRoaXMuc2VxMVJhbmdlLmpvaW4odC5zZXExUmFuZ2UpLHRoaXMuc2VxMlJhbmdlLmpvaW4odC5zZXEyUmFuZ2UpKX1kZWx0YSh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgaih0aGlzLnNlcTFSYW5nZS5kZWx0YSh0KSx0aGlzLnNlcTJSYW5nZS5kZWx0YSh0KSl9ZGVsdGFTdGFydCh0KXtyZXR1cm4gdD09PTA/dGhpczpuZXcgaih0aGlzLnNlcTFSYW5nZS5kZWx0YVN0YXJ0KHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhU3RhcnQodCkpfWRlbHRhRW5kKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBqKHRoaXMuc2VxMVJhbmdlLmRlbHRhRW5kKHQpLHRoaXMuc2VxMlJhbmdlLmRlbHRhRW5kKHQpKX1pbnRlcnNlY3QodCl7Y29uc3Qgbj10aGlzLnNlcTFSYW5nZS5pbnRlcnNlY3QodC5zZXExUmFuZ2UpLHM9dGhpcy5zZXEyUmFuZ2UuaW50ZXJzZWN0KHQuc2VxMlJhbmdlKTtpZighKCFufHwhcykpcmV0dXJuIG5ldyBqKG4scyl9Z2V0U3RhcnRzKCl7cmV0dXJuIG5ldyBMZSh0aGlzLnNlcTFSYW5nZS5zdGFydCx0aGlzLnNlcTJSYW5nZS5zdGFydCl9Z2V0RW5kRXhjbHVzaXZlcygpe3JldHVybiBuZXcgTGUodGhpcy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLHRoaXMuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSl9fWNvbnN0IE1lPWNsYXNzIE1le2NvbnN0cnVjdG9yKHQsbil7dGhpcy5vZmZzZXQxPXQsdGhpcy5vZmZzZXQyPW59dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm9mZnNldDF9IDwtPiAke3RoaXMub2Zmc2V0Mn1gfWRlbHRhKHQpe3JldHVybiB0PT09MD90aGlzOm5ldyBNZSh0aGlzLm9mZnNldDErdCx0aGlzLm9mZnNldDIrdCl9ZXF1YWxzKHQpe3JldHVybiB0aGlzLm9mZnNldDE9PT10Lm9mZnNldDEmJnRoaXMub2Zmc2V0Mj09PXQub2Zmc2V0Mn19O01lLnplcm89bmV3IE1lKDAsMCksTWUubWF4PW5ldyBNZShOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7bGV0IExlPU1lO2NvbnN0IEJ0PWNsYXNzIEJ0e2lzVmFsaWQoKXtyZXR1cm4hMH19O0J0Lmluc3RhbmNlPW5ldyBCdDtsZXQgaXQ9QnQ7Y2xhc3MgSmF7Y29uc3RydWN0b3IodCl7aWYodGhpcy50aW1lb3V0PXQsdGhpcy5zdGFydFRpbWU9RGF0ZS5ub3coKSx0aGlzLnZhbGlkPSEwLHQ8PTApdGhyb3cgbmV3IHJlKCJ0aW1lb3V0IG11c3QgYmUgcG9zaXRpdmUiKX1pc1ZhbGlkKCl7aWYoIShEYXRlLm5vdygpLXRoaXMuc3RhcnRUaW1lPHRoaXMudGltZW91dCkmJnRoaXMudmFsaWQpe3RoaXMudmFsaWQ9ITE7ZGVidWdnZXJ9cmV0dXJuIHRoaXMudmFsaWR9fWNsYXNzIENue2NvbnN0cnVjdG9yKHQsbil7dGhpcy53aWR0aD10LHRoaXMuaGVpZ2h0PW4sdGhpcy5hcnJheT1bXSx0aGlzLmFycmF5PW5ldyBBcnJheSh0Km4pfWdldCh0LG4pe3JldHVybiB0aGlzLmFycmF5W3Qrbip0aGlzLndpZHRoXX1zZXQodCxuLHMpe3RoaXMuYXJyYXlbdCtuKnRoaXMud2lkdGhdPXN9fWZ1bmN0aW9uIEFuKGUpe3JldHVybiBlPT09MzJ8fGU9PT05fWNvbnN0IGN0PWNsYXNzIGN0e3N0YXRpYyBnZXRLZXkodCl7bGV0IG49dGhpcy5jaHJLZXlzLmdldCh0KTtyZXR1cm4gbj09PXZvaWQgMCYmKG49dGhpcy5jaHJLZXlzLnNpemUsdGhpcy5jaHJLZXlzLnNldCh0LG4pKSxufWNvbnN0cnVjdG9yKHQsbixzKXt0aGlzLnJhbmdlPXQsdGhpcy5saW5lcz1uLHRoaXMuc291cmNlPXMsdGhpcy5oaXN0b2dyYW09W107bGV0IHI9MDtmb3IobGV0IGk9dC5zdGFydExpbmVOdW1iZXItMTtpPHQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0xO2krKyl7Y29uc3Qgbz1uW2ldO2ZvcihsZXQgdT0wO3U8by5sZW5ndGg7dSsrKXtyKys7Y29uc3QgYz1vW3VdLGY9Y3QuZ2V0S2V5KGMpO3RoaXMuaGlzdG9ncmFtW2ZdPSh0aGlzLmhpc3RvZ3JhbVtmXXx8MCkrMX1yKys7Y29uc3QgbD1jdC5nZXRLZXkoYApgKTt0aGlzLmhpc3RvZ3JhbVtsXT0odGhpcy5oaXN0b2dyYW1bbF18fDApKzF9dGhpcy50b3RhbENvdW50PXJ9Y29tcHV0ZVNpbWlsYXJpdHkodCl7bGV0IG49MDtjb25zdCBzPU1hdGgubWF4KHRoaXMuaGlzdG9ncmFtLmxlbmd0aCx0Lmhpc3RvZ3JhbS5sZW5ndGgpO2ZvcihsZXQgcj0wO3I8cztyKyspbis9TWF0aC5hYnMoKHRoaXMuaGlzdG9ncmFtW3JdPz8wKS0odC5oaXN0b2dyYW1bcl0/PzApKTtyZXR1cm4gMS1uLyh0aGlzLnRvdGFsQ291bnQrdC50b3RhbENvdW50KX19O2N0LmNocktleXM9bmV3IE1hcDtsZXQgTXQ9Y3Q7Y2xhc3MgWmF7Y29tcHV0ZSh0LG4scz1pdC5pbnN0YW5jZSxyKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gd2UudHJpdmlhbCh0LG4pO2NvbnN0IGk9bmV3IENuKHQubGVuZ3RoLG4ubGVuZ3RoKSxvPW5ldyBDbih0Lmxlbmd0aCxuLmxlbmd0aCksbD1uZXcgQ24odC5sZW5ndGgsbi5sZW5ndGgpO2ZvcihsZXQgZz0wO2c8dC5sZW5ndGg7ZysrKWZvcihsZXQgYj0wO2I8bi5sZW5ndGg7YisrKXtpZighcy5pc1ZhbGlkKCkpcmV0dXJuIHdlLnRyaXZpYWxUaW1lZE91dCh0LG4pO2NvbnN0IHg9Zz09PTA/MDppLmdldChnLTEsYiksdj1iPT09MD8wOmkuZ2V0KGcsYi0xKTtsZXQgUzt0LmdldEVsZW1lbnQoZyk9PT1uLmdldEVsZW1lbnQoYik/KGc9PT0wfHxiPT09MD9TPTA6Uz1pLmdldChnLTEsYi0xKSxnPjAmJmI+MCYmby5nZXQoZy0xLGItMSk9PT0zJiYoUys9bC5nZXQoZy0xLGItMSkpLFMrPXI/cihnLGIpOjEpOlM9LTE7Y29uc3QgTj1NYXRoLm1heCh4LHYsUyk7aWYoTj09PVMpe2NvbnN0IHA9Zz4wJiZiPjA/bC5nZXQoZy0xLGItMSk6MDtsLnNldChnLGIscCsxKSxvLnNldChnLGIsMyl9ZWxzZSBOPT09eD8obC5zZXQoZyxiLDApLG8uc2V0KGcsYiwxKSk6Tj09PXYmJihsLnNldChnLGIsMCksby5zZXQoZyxiLDIpKTtpLnNldChnLGIsTil9Y29uc3QgdT1bXTtsZXQgYz10Lmxlbmd0aCxmPW4ubGVuZ3RoO2Z1bmN0aW9uIGgoZyxiKXsoZysxIT09Y3x8YisxIT09ZikmJnUucHVzaChuZXcgaihuZXcgSShnKzEsYyksbmV3IEkoYisxLGYpKSksYz1nLGY9Yn1sZXQgZD10Lmxlbmd0aC0xLG09bi5sZW5ndGgtMTtmb3IoO2Q+PTAmJm0+PTA7KW8uZ2V0KGQsbSk9PT0zPyhoKGQsbSksZC0tLG0tLSk6by5nZXQoZCxtKT09PTE/ZC0tOm0tLTtyZXR1cm4gaCgtMSwtMSksdS5yZXZlcnNlKCksbmV3IHdlKHUsITEpfX1jbGFzcyBFcntjb21wdXRlKHQsbixzPWl0Lmluc3RhbmNlKXtpZih0Lmxlbmd0aD09PTB8fG4ubGVuZ3RoPT09MClyZXR1cm4gd2UudHJpdmlhbCh0LG4pO2NvbnN0IHI9dCxpPW47ZnVuY3Rpb24gbyhiLHgpe2Zvcig7YjxyLmxlbmd0aCYmeDxpLmxlbmd0aCYmci5nZXRFbGVtZW50KGIpPT09aS5nZXRFbGVtZW50KHgpOyliKysseCsrO3JldHVybiBifWxldCBsPTA7Y29uc3QgdT1uZXcgS2E7dS5zZXQoMCxvKDAsMCkpO2NvbnN0IGM9bmV3IGUxO2Muc2V0KDAsdS5nZXQoMCk9PT0wP251bGw6bmV3IE1yKG51bGwsMCwwLHUuZ2V0KDApKSk7bGV0IGY9MDtlOmZvcig7Oyl7aWYobCsrLCFzLmlzVmFsaWQoKSlyZXR1cm4gd2UudHJpdmlhbFRpbWVkT3V0KHIsaSk7Y29uc3QgYj0tTWF0aC5taW4obCxpLmxlbmd0aCtsJTIpLHg9TWF0aC5taW4obCxyLmxlbmd0aCtsJTIpO2ZvcihmPWI7Zjw9eDtmKz0yKXtjb25zdCB2PWY9PT14Py0xOnUuZ2V0KGYrMSksUz1mPT09Yj8tMTp1LmdldChmLTEpKzEsTj1NYXRoLm1pbihNYXRoLm1heCh2LFMpLHIubGVuZ3RoKSxwPU4tZjtpZihOPnIubGVuZ3RofHxwPmkubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IF89byhOLHApO3Uuc2V0KGYsXyk7Y29uc3QgTD1OPT09dj9jLmdldChmKzEpOmMuZ2V0KGYtMSk7aWYoYy5zZXQoZixfIT09Tj9uZXcgTXIoTCxOLHAsXy1OKTpMKSx1LmdldChmKT09PXIubGVuZ3RoJiZ1LmdldChmKS1mPT09aS5sZW5ndGgpYnJlYWsgZX19bGV0IGg9Yy5nZXQoZik7Y29uc3QgZD1bXTtsZXQgbT1yLmxlbmd0aCxnPWkubGVuZ3RoO2Zvcig7Oyl7Y29uc3QgYj1oP2gueCtoLmxlbmd0aDowLHg9aD9oLnkraC5sZW5ndGg6MDtpZigoYiE9PW18fHghPT1nKSYmZC5wdXNoKG5ldyBqKG5ldyBJKGIsbSksbmV3IEkoeCxnKSkpLCFoKWJyZWFrO209aC54LGc9aC55LGg9aC5wcmV2fXJldHVybiBkLnJldmVyc2UoKSxuZXcgd2UoZCwhMSl9fWNsYXNzIE1ye2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMucHJldj10LHRoaXMueD1uLHRoaXMueT1zLHRoaXMubGVuZ3RoPXJ9fWNsYXNzIEthe2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCksdGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheSgxMCl9Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe2lmKHQ8MCl7aWYodD0tdC0xLHQ+PXRoaXMubmVnYXRpdmVBcnIubGVuZ3RoKXtjb25zdCBzPXRoaXMubmVnYXRpdmVBcnI7dGhpcy5uZWdhdGl2ZUFycj1uZXcgSW50MzJBcnJheShzLmxlbmd0aCoyKSx0aGlzLm5lZ2F0aXZlQXJyLnNldChzKX10aGlzLm5lZ2F0aXZlQXJyW3RdPW59ZWxzZXtpZih0Pj10aGlzLnBvc2l0aXZlQXJyLmxlbmd0aCl7Y29uc3Qgcz10aGlzLnBvc2l0aXZlQXJyO3RoaXMucG9zaXRpdmVBcnI9bmV3IEludDMyQXJyYXkocy5sZW5ndGgqMiksdGhpcy5wb3NpdGl2ZUFyci5zZXQocyl9dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX19Y2xhc3MgZTF7Y29uc3RydWN0b3IoKXt0aGlzLnBvc2l0aXZlQXJyPVtdLHRoaXMubmVnYXRpdmVBcnI9W119Z2V0KHQpe3JldHVybiB0PDA/KHQ9LXQtMSx0aGlzLm5lZ2F0aXZlQXJyW3RdKTp0aGlzLnBvc2l0aXZlQXJyW3RdfXNldCh0LG4pe3Q8MD8odD0tdC0xLHRoaXMubmVnYXRpdmVBcnJbdF09bik6dGhpcy5wb3NpdGl2ZUFyclt0XT1ufX1jbGFzcyBrdHtjb25zdHJ1Y3Rvcih0LG4scyl7dGhpcy5saW5lcz10LHRoaXMucmFuZ2U9bix0aGlzLmNvbnNpZGVyV2hpdGVzcGFjZUNoYW5nZXM9cyx0aGlzLmVsZW1lbnRzPVtdLHRoaXMuZmlyc3RFbGVtZW50T2Zmc2V0QnlMaW5lSWR4PVtdLHRoaXMubGluZVN0YXJ0T2Zmc2V0cz1bXSx0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHg9W10sdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgucHVzaCgwKTtmb3IobGV0IHI9dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXI7cjw9dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyO3IrKyl7bGV0IGk9dFtyLTFdLG89MDtyPT09dGhpcy5yYW5nZS5zdGFydExpbmVOdW1iZXImJnRoaXMucmFuZ2Uuc3RhcnRDb2x1bW4+MSYmKG89dGhpcy5yYW5nZS5zdGFydENvbHVtbi0xLGk9aS5zdWJzdHJpbmcobykpLHRoaXMubGluZVN0YXJ0T2Zmc2V0cy5wdXNoKG8pO2xldCBsPTA7aWYoIXMpe2NvbnN0IGM9aS50cmltU3RhcnQoKTtsPWkubGVuZ3RoLWMubGVuZ3RoLGk9Yy50cmltRW5kKCl9dGhpcy50cmltbWVkV3NMZW5ndGhzQnlMaW5lSWR4LnB1c2gobCk7Y29uc3QgdT1yPT09dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyP01hdGgubWluKHRoaXMucmFuZ2UuZW5kQ29sdW1uLTEtby1sLGkubGVuZ3RoKTppLmxlbmd0aDtmb3IobGV0IGM9MDtjPHU7YysrKXRoaXMuZWxlbWVudHMucHVzaChpLmNoYXJDb2RlQXQoYykpO3I8dGhpcy5yYW5nZS5lbmRMaW5lTnVtYmVyJiYodGhpcy5lbGVtZW50cy5wdXNoKDEwKSx0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeC5wdXNoKHRoaXMuZWxlbWVudHMubGVuZ3RoKSl9fXRvU3RyaW5nKCl7cmV0dXJuYFNsaWNlOiAiJHt0aGlzLnRleHR9ImB9Z2V0IHRleHQoKXtyZXR1cm4gdGhpcy5nZXRUZXh0KG5ldyBJKDAsdGhpcy5sZW5ndGgpKX1nZXRUZXh0KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzLnNsaWNlKHQuc3RhcnQsdC5lbmRFeGNsdXNpdmUpLm1hcChuPT5TdHJpbmcuZnJvbUNoYXJDb2RlKG4pKS5qb2luKCIiKX1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLmVsZW1lbnRzW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPVByKHQ+MD90aGlzLmVsZW1lbnRzW3QtMV06LTEpLHM9UHIodDx0aGlzLmVsZW1lbnRzLmxlbmd0aD90aGlzLmVsZW1lbnRzW3RdOi0xKTtpZihuPT09NyYmcz09PTgpcmV0dXJuIDA7aWYobj09PTgpcmV0dXJuIDE1MDtsZXQgcj0wO3JldHVybiBuIT09cyYmKHIrPTEwLG49PT0wJiZzPT09MSYmKHIrPTEpKSxyKz1rcihuKSxyKz1rcihzKSxyfXRyYW5zbGF0ZU9mZnNldCh0LG49InJpZ2h0Iil7Y29uc3Qgcz1zdCh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxpPT5pPD10KSxyPXQtdGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHhbc107cmV0dXJuIG5ldyBVKHRoaXMucmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3MsMSt0aGlzLmxpbmVTdGFydE9mZnNldHNbc10rcisocj09PTAmJm49PT0ibGVmdCI/MDp0aGlzLnRyaW1tZWRXc0xlbmd0aHNCeUxpbmVJZHhbc10pKX10cmFuc2xhdGVSYW5nZSh0KXtjb25zdCBuPXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQsInJpZ2h0Iikscz10aGlzLnRyYW5zbGF0ZU9mZnNldCh0LmVuZEV4Y2x1c2l2ZSwibGVmdCIpO3JldHVybiBzLmlzQmVmb3JlKG4pP2suZnJvbVBvc2l0aW9ucyhzLHMpOmsuZnJvbVBvc2l0aW9ucyhuLHMpfWZpbmRXb3JkQ29udGFpbmluZyh0KXtpZih0PDB8fHQ+PXRoaXMuZWxlbWVudHMubGVuZ3RofHwhUm4odGhpcy5lbGVtZW50c1t0XSkpcmV0dXJuO2xldCBuPXQ7Zm9yKDtuPjAmJlJuKHRoaXMuZWxlbWVudHNbbi0xXSk7KW4tLTtsZXQgcz10O2Zvcig7czx0aGlzLmVsZW1lbnRzLmxlbmd0aCYmUm4odGhpcy5lbGVtZW50c1tzXSk7KXMrKztyZXR1cm4gbmV3IEkobixzKX1jb3VudExpbmVzSW4odCl7cmV0dXJuIHRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuZW5kRXhjbHVzaXZlKS5saW5lTnVtYmVyLXRoaXMudHJhbnNsYXRlT2Zmc2V0KHQuc3RhcnQpLmxpbmVOdW1iZXJ9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMuZWxlbWVudHNbdF09PT10aGlzLmVsZW1lbnRzW25dfWV4dGVuZFRvRnVsbExpbmVzKHQpe2NvbnN0IG49cWUodGhpcy5maXJzdEVsZW1lbnRPZmZzZXRCeUxpbmVJZHgscj0+cjw9dC5zdGFydCk/PzAscz1CYSh0aGlzLmZpcnN0RWxlbWVudE9mZnNldEJ5TGluZUlkeCxyPT50LmVuZEV4Y2x1c2l2ZTw9cik/P3RoaXMuZWxlbWVudHMubGVuZ3RoO3JldHVybiBuZXcgSShuLHMpfX1mdW5jdGlvbiBSbihlKXtyZXR1cm4gZT49OTcmJmU8PTEyMnx8ZT49NjUmJmU8PTkwfHxlPj00OCYmZTw9NTd9Y29uc3QgdDE9ezA6MCwxOjAsMjowLDM6MTAsNDoyLDU6MzAsNjozLDc6MTAsODoxMH07ZnVuY3Rpb24ga3IoZSl7cmV0dXJuIHQxW2VdfWZ1bmN0aW9uIFByKGUpe3JldHVybiBlPT09MTA/ODplPT09MTM/NzpBbihlKT82OmU+PTk3JiZlPD0xMjI/MDplPj02NSYmZTw9OTA/MTplPj00OCYmZTw9NTc/MjplPT09LTE/MzplPT09NDR8fGU9PT01OT81OjR9ZnVuY3Rpb24gbjEoZSx0LG4scyxyLGkpe2xldHttb3ZlczpvLGV4Y2x1ZGVkQ2hhbmdlczpsfT1yMShlLHQsbixpKTtpZighaS5pc1ZhbGlkKCkpcmV0dXJuW107Y29uc3QgdT1lLmZpbHRlcihmPT4hbC5oYXMoZikpLGM9aTEodSxzLHIsdCxuLGkpO3JldHVybiBRYShvLGMpLG89YTEobyksbz1vLmZpbHRlcihmPT57Y29uc3QgaD1mLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKS5zbGljZSh0KS5tYXAobT0+bS50cmltKCkpO3JldHVybiBoLmpvaW4oYApgKS5sZW5ndGg+PTE1JiZzMShoLG09Pm0ubGVuZ3RoPj0yKT49Mn0pLG89bzEoZSxvKSxvfWZ1bmN0aW9uIHMxKGUsdCl7bGV0IG49MDtmb3IoY29uc3QgcyBvZiBlKXQocykmJm4rKztyZXR1cm4gbn1mdW5jdGlvbiByMShlLHQsbixzKXtjb25zdCByPVtdLGk9ZS5maWx0ZXIodT0+dS5tb2RpZmllZC5pc0VtcHR5JiZ1Lm9yaWdpbmFsLmxlbmd0aD49MykubWFwKHU9Pm5ldyBNdCh1Lm9yaWdpbmFsLHQsdSkpLG89bmV3IFNldChlLmZpbHRlcih1PT51Lm9yaWdpbmFsLmlzRW1wdHkmJnUubW9kaWZpZWQubGVuZ3RoPj0zKS5tYXAodT0+bmV3IE10KHUubW9kaWZpZWQsbix1KSkpLGw9bmV3IFNldDtmb3IoY29uc3QgdSBvZiBpKXtsZXQgYz0tMSxmO2Zvcihjb25zdCBoIG9mIG8pe2NvbnN0IGQ9dS5jb21wdXRlU2ltaWxhcml0eShoKTtkPmMmJihjPWQsZj1oKX1pZihjPi45JiZmJiYoby5kZWxldGUoZiksci5wdXNoKG5ldyBsZSh1LnJhbmdlLGYucmFuZ2UpKSxsLmFkZCh1LnNvdXJjZSksbC5hZGQoZi5zb3VyY2UpKSwhcy5pc1ZhbGlkKCkpcmV0dXJue21vdmVzOnIsZXhjbHVkZWRDaGFuZ2VzOmx9fXJldHVybnttb3ZlczpyLGV4Y2x1ZGVkQ2hhbmdlczpsfX1mdW5jdGlvbiBpMShlLHQsbixzLHIsaSl7Y29uc3Qgbz1bXSxsPW5ldyBTYTtmb3IoY29uc3QgZCBvZiBlKWZvcihsZXQgbT1kLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjttPGQub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO20rKyl7Y29uc3QgZz1gJHt0W20tMV19OiR7dFttKzEtMV19OiR7dFttKzItMV19YDtsLmFkZChnLHtyYW5nZTpuZXcgRChtLG0rMyl9KX1jb25zdCB1PVtdO2Uuc29ydCh5dChkPT5kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcixFdCkpO2Zvcihjb25zdCBkIG9mIGUpe2xldCBtPVtdO2ZvcihsZXQgZz1kLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjtnPGQubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZS0yO2crKyl7Y29uc3QgYj1gJHtuW2ctMV19OiR7bltnKzEtMV19OiR7bltnKzItMV19YCx4PW5ldyBEKGcsZyszKSx2PVtdO2wuZm9yRWFjaChiLCh7cmFuZ2U6U30pPT57Zm9yKGNvbnN0IHAgb2YgbSlpZihwLm9yaWdpbmFsTGluZVJhbmdlLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrMT09PVMuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSYmcC5tb2RpZmllZExpbmVSYW5nZS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKzE9PT14LmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpe3Aub3JpZ2luYWxMaW5lUmFuZ2U9bmV3IEQocC5vcmlnaW5hbExpbmVSYW5nZS5zdGFydExpbmVOdW1iZXIsUy5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKSxwLm1vZGlmaWVkTGluZVJhbmdlPW5ldyBEKHAubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLHguZW5kTGluZU51bWJlckV4Y2x1c2l2ZSksdi5wdXNoKHApO3JldHVybn1jb25zdCBOPXttb2RpZmllZExpbmVSYW5nZTp4LG9yaWdpbmFsTGluZVJhbmdlOlN9O3UucHVzaChOKSx2LnB1c2goTil9KSxtPXZ9aWYoIWkuaXNWYWxpZCgpKXJldHVybltdfXUuc29ydChZYSh5dChkPT5kLm1vZGlmaWVkTGluZVJhbmdlLmxlbmd0aCxFdCkpKTtjb25zdCBjPW5ldyBtZSxmPW5ldyBtZTtmb3IoY29uc3QgZCBvZiB1KXtjb25zdCBtPWQubW9kaWZpZWRMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLWQub3JpZ2luYWxMaW5lUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLGc9Yy5zdWJ0cmFjdEZyb20oZC5tb2RpZmllZExpbmVSYW5nZSksYj1mLnN1YnRyYWN0RnJvbShkLm9yaWdpbmFsTGluZVJhbmdlKS5nZXRXaXRoRGVsdGEobSkseD1nLmdldEludGVyc2VjdGlvbihiKTtmb3IoY29uc3QgdiBvZiB4LnJhbmdlcyl7aWYodi5sZW5ndGg8Myljb250aW51ZTtjb25zdCBTPXYsTj12LmRlbHRhKC1tKTtvLnB1c2gobmV3IGxlKE4sUykpLGMuYWRkUmFuZ2UoUyksZi5hZGRSYW5nZShOKX19by5zb3J0KHl0KGQ9PmQub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLEV0KSk7Y29uc3QgaD1uZXcgUnQoZSk7Zm9yKGxldCBkPTA7ZDxvLmxlbmd0aDtkKyspe2NvbnN0IG09b1tkXSxnPWguZmluZExhc3RNb25vdG9ub3VzKEw9Pkwub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyPD1tLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlciksYj1xZShlLEw9PkwubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyPD1tLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikseD1NYXRoLm1heChtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1nLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcixtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1iLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlciksdj1oLmZpbmRMYXN0TW9ub3Rvbm91cyhMPT5MLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLFM9cWUoZSxMPT5MLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcjxtLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpLE49TWF0aC5tYXgodi5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLW0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxTLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUtbS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtsZXQgcDtmb3IocD0wO3A8eDtwKyspe2NvbnN0IEw9bS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItcC0xLEE9bS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItcC0xO2lmKEw+cy5sZW5ndGh8fEE+ci5sZW5ndGh8fGMuY29udGFpbnMoQSl8fGYuY29udGFpbnMoTCl8fCFGcihzW0wtMV0scltBLTFdLGkpKWJyZWFrfXA+MCYmKGYuYWRkUmFuZ2UobmV3IEQobS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItcCxtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcikpLGMuYWRkUmFuZ2UobmV3IEQobS5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItcCxtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpKTtsZXQgXztmb3IoXz0wO188TjtfKyspe2NvbnN0IEw9bS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlK18sQT1tLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrXztpZihMPnMubGVuZ3RofHxBPnIubGVuZ3RofHxjLmNvbnRhaW5zKEEpfHxmLmNvbnRhaW5zKEwpfHwhRnIoc1tMLTFdLHJbQS0xXSxpKSlicmVha31fPjAmJihmLmFkZFJhbmdlKG5ldyBEKG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxtLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUrXykpLGMuYWRkUmFuZ2UobmV3IEQobS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStfKSkpLChwPjB8fF8+MCkmJihvW2RdPW5ldyBsZShuZXcgRChtLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1wLG0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStfKSxuZXcgRChtLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1wLG0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZStfKSkpfXJldHVybiBvfWZ1bmN0aW9uIEZyKGUsdCxuKXtpZihlLnRyaW0oKT09PXQudHJpbSgpKXJldHVybiEwO2lmKGUubGVuZ3RoPjMwMCYmdC5sZW5ndGg+MzAwKXJldHVybiExO2NvbnN0IHI9bmV3IEVyKCkuY29tcHV0ZShuZXcga3QoW2VdLG5ldyBrKDEsMSwxLGUubGVuZ3RoKSwhMSksbmV3IGt0KFt0XSxuZXcgaygxLDEsMSx0Lmxlbmd0aCksITEpLG4pO2xldCBpPTA7Y29uc3Qgbz1qLmludmVydChyLmRpZmZzLGUubGVuZ3RoKTtmb3IoY29uc3QgZiBvZiBvKWYuc2VxMVJhbmdlLmZvckVhY2goaD0+e0FuKGUuY2hhckNvZGVBdChoKSl8fGkrK30pO2Z1bmN0aW9uIGwoZil7bGV0IGg9MDtmb3IobGV0IGQ9MDtkPGUubGVuZ3RoO2QrKylBbihmLmNoYXJDb2RlQXQoZCkpfHxoKys7cmV0dXJuIGh9Y29uc3QgdT1sKGUubGVuZ3RoPnQubGVuZ3RoP2U6dCk7cmV0dXJuIGkvdT4uNiYmdT4xMH1mdW5jdGlvbiBhMShlKXtpZihlLmxlbmd0aD09PTApcmV0dXJuIGU7ZS5zb3J0KHl0KG49Pm4ub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLEV0KSk7Y29uc3QgdD1bZVswXV07Zm9yKGxldCBuPTE7bjxlLmxlbmd0aDtuKyspe2NvbnN0IHM9dFt0Lmxlbmd0aC0xXSxyPWVbbl0saT1yLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlci1zLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsbz1yLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlci1zLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU7aWYoaT49MCYmbz49MCYmaStvPD0yKXt0W3QubGVuZ3RoLTFdPXMuam9pbihyKTtjb250aW51ZX10LnB1c2gocil9cmV0dXJuIHR9ZnVuY3Rpb24gbzEoZSx0KXtjb25zdCBuPW5ldyBSdChlKTtyZXR1cm4gdD10LmZpbHRlcihzPT57Y29uc3Qgcj1uLmZpbmRMYXN0TW9ub3Rvbm91cyhsPT5sLm9yaWdpbmFsLnN0YXJ0TGluZU51bWJlcjxzLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUpfHxuZXcgbGUobmV3IEQoMSwxKSxuZXcgRCgxLDEpKSxpPXFlKGUsbD0+bC5tb2RpZmllZC5zdGFydExpbmVOdW1iZXI8cy5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlKTtyZXR1cm4gciE9PWl9KSx0fWZ1bmN0aW9uIERyKGUsdCxuKXtsZXQgcz1uO3JldHVybiBzPVRyKGUsdCxzKSxzPVRyKGUsdCxzKSxzPWwxKGUsdCxzKSxzfWZ1bmN0aW9uIFRyKGUsdCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuIG47Y29uc3Qgcz1bXTtzLnB1c2goblswXSk7Zm9yKGxldCBpPTE7aTxuLmxlbmd0aDtpKyspe2NvbnN0IG89c1tzLmxlbmd0aC0xXTtsZXQgbD1uW2ldO2lmKGwuc2VxMVJhbmdlLmlzRW1wdHl8fGwuc2VxMlJhbmdlLmlzRW1wdHkpe2NvbnN0IHU9bC5zZXExUmFuZ2Uuc3RhcnQtby5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlO2xldCBjO2ZvcihjPTE7Yzw9dSYmIShlLmdldEVsZW1lbnQobC5zZXExUmFuZ2Uuc3RhcnQtYykhPT1lLmdldEVsZW1lbnQobC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLWMpfHx0LmdldEVsZW1lbnQobC5zZXEyUmFuZ2Uuc3RhcnQtYykhPT10LmdldEVsZW1lbnQobC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLWMpKTtjKyspO2lmKGMtLSxjPT09dSl7c1tzLmxlbmd0aC0xXT1uZXcgaihuZXcgSShvLnNlcTFSYW5nZS5zdGFydCxsLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUtdSksbmV3IEkoby5zZXEyUmFuZ2Uuc3RhcnQsbC5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlLXUpKTtjb250aW51ZX1sPWwuZGVsdGEoLWMpfXMucHVzaChsKX1jb25zdCByPVtdO2ZvcihsZXQgaT0wO2k8cy5sZW5ndGgtMTtpKyspe2NvbnN0IG89c1tpKzFdO2xldCBsPXNbaV07aWYobC5zZXExUmFuZ2UuaXNFbXB0eXx8bC5zZXEyUmFuZ2UuaXNFbXB0eSl7Y29uc3QgdT1vLnNlcTFSYW5nZS5zdGFydC1sLnNlcTFSYW5nZS5lbmRFeGNsdXNpdmU7bGV0IGM7Zm9yKGM9MDtjPHUmJiEoIWUuaXNTdHJvbmdseUVxdWFsKGwuc2VxMVJhbmdlLnN0YXJ0K2MsbC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlK2MpfHwhdC5pc1N0cm9uZ2x5RXF1YWwobC5zZXEyUmFuZ2Uuc3RhcnQrYyxsLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrYykpO2MrKyk7aWYoYz09PXUpe3NbaSsxXT1uZXcgaihuZXcgSShsLnNlcTFSYW5nZS5zdGFydCt1LG8uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSksbmV3IEkobC5zZXEyUmFuZ2Uuc3RhcnQrdSxvLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUpKTtjb250aW51ZX1jPjAmJihsPWwuZGVsdGEoYykpfXIucHVzaChsKX1yZXR1cm4gcy5sZW5ndGg+MCYmci5wdXNoKHNbcy5sZW5ndGgtMV0pLHJ9ZnVuY3Rpb24gbDEoZSx0LG4pe2lmKCFlLmdldEJvdW5kYXJ5U2NvcmV8fCF0LmdldEJvdW5kYXJ5U2NvcmUpcmV0dXJuIG47Zm9yKGxldCBzPTA7czxuLmxlbmd0aDtzKyspe2NvbnN0IHI9cz4wP25bcy0xXTp2b2lkIDAsaT1uW3NdLG89cysxPG4ubGVuZ3RoP25bcysxXTp2b2lkIDAsbD1uZXcgSShyP3Iuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxOjAsbz9vLnNlcTFSYW5nZS5zdGFydC0xOmUubGVuZ3RoKSx1PW5ldyBJKHI/ci5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlKzE6MCxvP28uc2VxMlJhbmdlLnN0YXJ0LTE6dC5sZW5ndGgpO2kuc2VxMVJhbmdlLmlzRW1wdHk/bltzXT1WcihpLGUsdCxsLHUpOmkuc2VxMlJhbmdlLmlzRW1wdHkmJihuW3NdPVZyKGkuc3dhcCgpLHQsZSx1LGwpLnN3YXAoKSl9cmV0dXJuIG59ZnVuY3Rpb24gVnIoZSx0LG4scyxyKXtsZXQgbz0xO2Zvcig7ZS5zZXExUmFuZ2Uuc3RhcnQtbz49cy5zdGFydCYmZS5zZXEyUmFuZ2Uuc3RhcnQtbz49ci5zdGFydCYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQtbyxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUtbykmJm88MTAwOylvKys7by0tO2xldCBsPTA7Zm9yKDtlLnNlcTFSYW5nZS5zdGFydCtsPHMuZW5kRXhjbHVzaXZlJiZlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbDxyLmVuZEV4Y2x1c2l2ZSYmbi5pc1N0cm9uZ2x5RXF1YWwoZS5zZXEyUmFuZ2Uuc3RhcnQrbCxlLnNlcTJSYW5nZS5lbmRFeGNsdXNpdmUrbCkmJmw8MTAwOylsKys7aWYobz09PTAmJmw9PT0wKXJldHVybiBlO2xldCB1PTAsYz0tMTtmb3IobGV0IGY9LW87Zjw9bDtmKyspe2NvbnN0IGg9ZS5zZXEyUmFuZ2Uuc3RhcnQrZixkPWUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZStmLG09ZS5zZXExUmFuZ2Uuc3RhcnQrZixnPXQuZ2V0Qm91bmRhcnlTY29yZShtKStuLmdldEJvdW5kYXJ5U2NvcmUoaCkrbi5nZXRCb3VuZGFyeVNjb3JlKGQpO2c+YyYmKGM9Zyx1PWYpfXJldHVybiBlLmRlbHRhKHUpfWZ1bmN0aW9uIHUxKGUsdCxuKXtjb25zdCBzPVtdO2Zvcihjb25zdCByIG9mIG4pe2NvbnN0IGk9c1tzLmxlbmd0aC0xXTtpZighaSl7cy5wdXNoKHIpO2NvbnRpbnVlfXIuc2VxMVJhbmdlLnN0YXJ0LWkuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZTw9Mnx8ci5zZXEyUmFuZ2Uuc3RhcnQtaS5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlPD0yP3Nbcy5sZW5ndGgtMV09bmV3IGooaS5zZXExUmFuZ2Uuam9pbihyLnNlcTFSYW5nZSksaS5zZXEyUmFuZ2Uuam9pbihyLnNlcTJSYW5nZSkpOnMucHVzaChyKX1yZXR1cm4gc31mdW5jdGlvbiBjMShlLHQsbil7Y29uc3Qgcz1qLmludmVydChuLGUubGVuZ3RoKSxyPVtdO2xldCBpPW5ldyBMZSgwLDApO2Z1bmN0aW9uIG8odSxjKXtpZih1Lm9mZnNldDE8aS5vZmZzZXQxfHx1Lm9mZnNldDI8aS5vZmZzZXQyKXJldHVybjtjb25zdCBmPWUuZmluZFdvcmRDb250YWluaW5nKHUub2Zmc2V0MSksaD10LmZpbmRXb3JkQ29udGFpbmluZyh1Lm9mZnNldDIpO2lmKCFmfHwhaClyZXR1cm47bGV0IGQ9bmV3IGooZixoKTtjb25zdCBtPWQuaW50ZXJzZWN0KGMpO2xldCBnPW0uc2VxMVJhbmdlLmxlbmd0aCxiPW0uc2VxMlJhbmdlLmxlbmd0aDtmb3IoO3MubGVuZ3RoPjA7KXtjb25zdCB4PXNbMF07aWYoISh4LnNlcTFSYW5nZS5pbnRlcnNlY3RzKGQuc2VxMVJhbmdlKXx8eC5zZXEyUmFuZ2UuaW50ZXJzZWN0cyhkLnNlcTJSYW5nZSkpKWJyZWFrO2NvbnN0IFM9ZS5maW5kV29yZENvbnRhaW5pbmcoeC5zZXExUmFuZ2Uuc3RhcnQpLE49dC5maW5kV29yZENvbnRhaW5pbmcoeC5zZXEyUmFuZ2Uuc3RhcnQpLHA9bmV3IGooUyxOKSxfPXAuaW50ZXJzZWN0KHgpO2lmKGcrPV8uc2VxMVJhbmdlLmxlbmd0aCxiKz1fLnNlcTJSYW5nZS5sZW5ndGgsZD1kLmpvaW4ocCksZC5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlPj14LnNlcTFSYW5nZS5lbmRFeGNsdXNpdmUpcy5zaGlmdCgpO2Vsc2UgYnJlYWt9ZytiPChkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoKSoyLzMmJnIucHVzaChkKSxpPWQuZ2V0RW5kRXhjbHVzaXZlcygpfWZvcig7cy5sZW5ndGg+MDspe2NvbnN0IHU9cy5zaGlmdCgpO3Uuc2VxMVJhbmdlLmlzRW1wdHl8fChvKHUuZ2V0U3RhcnRzKCksdSksbyh1LmdldEVuZEV4Y2x1c2l2ZXMoKS5kZWx0YSgtMSksdSkpfXJldHVybiBoMShuLHIpfWZ1bmN0aW9uIGgxKGUsdCl7Y29uc3Qgbj1bXTtmb3IoO2UubGVuZ3RoPjB8fHQubGVuZ3RoPjA7KXtjb25zdCBzPWVbMF0scj10WzBdO2xldCBpO3MmJighcnx8cy5zZXExUmFuZ2Uuc3RhcnQ8ci5zZXExUmFuZ2Uuc3RhcnQpP2k9ZS5zaGlmdCgpOmk9dC5zaGlmdCgpLG4ubGVuZ3RoPjAmJm5bbi5sZW5ndGgtMV0uc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZT49aS5zZXExUmFuZ2Uuc3RhcnQ/bltuLmxlbmd0aC0xXT1uW24ubGVuZ3RoLTFdLmpvaW4oaSk6bi5wdXNoKGkpfXJldHVybiBufWZ1bmN0aW9uIGYxKGUsdCxuKXtsZXQgcz1uO2lmKHMubGVuZ3RoPT09MClyZXR1cm4gcztsZXQgcj0wLGk7ZG97aT0hMTtjb25zdCBvPVtzWzBdXTtmb3IobGV0IGw9MTtsPHMubGVuZ3RoO2wrKyl7bGV0IGY9ZnVuY3Rpb24oZCxtKXtjb25zdCBnPW5ldyBJKGMuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSx1LnNlcTFSYW5nZS5zdGFydCk7cmV0dXJuIGUuZ2V0VGV4dChnKS5yZXBsYWNlKC9ccy9nLCIiKS5sZW5ndGg8PTQmJihkLnNlcTFSYW5nZS5sZW5ndGgrZC5zZXEyUmFuZ2UubGVuZ3RoPjV8fG0uc2VxMVJhbmdlLmxlbmd0aCttLnNlcTJSYW5nZS5sZW5ndGg+NSl9O2NvbnN0IHU9c1tsXSxjPW9bby5sZW5ndGgtMV07ZihjLHUpPyhpPSEwLG9bby5sZW5ndGgtMV09b1tvLmxlbmd0aC0xXS5qb2luKHUpKTpvLnB1c2godSl9cz1vfXdoaWxlKHIrKzwxMCYmaSk7cmV0dXJuIHN9ZnVuY3Rpb24gZDEoZSx0LG4pe2xldCBzPW47aWYocy5sZW5ndGg9PT0wKXJldHVybiBzO2xldCByPTAsaTtkb3tpPSExO2NvbnN0IGw9W3NbMF1dO2ZvcihsZXQgdT0xO3U8cy5sZW5ndGg7dSsrKXtsZXQgaD1mdW5jdGlvbihtLGcpe2NvbnN0IGI9bmV3IEkoZi5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLGMuc2VxMVJhbmdlLnN0YXJ0KTtpZihlLmNvdW50TGluZXNJbihiKT41fHxiLmxlbmd0aD41MDApcmV0dXJuITE7Y29uc3Qgdj1lLmdldFRleHQoYikudHJpbSgpO2lmKHYubGVuZ3RoPjIwfHx2LnNwbGl0KC9cclxufFxyfFxuLykubGVuZ3RoPjEpcmV0dXJuITE7Y29uc3QgUz1lLmNvdW50TGluZXNJbihtLnNlcTFSYW5nZSksTj1tLnNlcTFSYW5nZS5sZW5ndGgscD10LmNvdW50TGluZXNJbihtLnNlcTJSYW5nZSksXz1tLnNlcTJSYW5nZS5sZW5ndGgsTD1lLmNvdW50TGluZXNJbihnLnNlcTFSYW5nZSksQT1nLnNlcTFSYW5nZS5sZW5ndGgseT10LmNvdW50TGluZXNJbihnLnNlcTJSYW5nZSksQj1nLnNlcTJSYW5nZS5sZW5ndGgsUT0yKjQwKzUwO2Z1bmN0aW9uIHEoRil7cmV0dXJuIE1hdGgubWluKEYsUSl9cmV0dXJuIE1hdGgucG93KE1hdGgucG93KHEoUyo0MCtOKSwxLjUpK01hdGgucG93KHEocCo0MCtfKSwxLjUpLDEuNSkrTWF0aC5wb3coTWF0aC5wb3cocShMKjQwK0EpLDEuNSkrTWF0aC5wb3cocSh5KjQwK0IpLDEuNSksMS41KT4oUSoqMS41KSoqMS41KjEuM307Y29uc3QgYz1zW3VdLGY9bFtsLmxlbmd0aC0xXTtoKGYsYyk/KGk9ITAsbFtsLmxlbmd0aC0xXT1sW2wubGVuZ3RoLTFdLmpvaW4oYykpOmwucHVzaChjKX1zPWx9d2hpbGUocisrPDEwJiZpKTtjb25zdCBvPVtdO3JldHVybiBYYShzLChsLHUsYyk9PntsZXQgZj11O2Z1bmN0aW9uIGgodil7cmV0dXJuIHYubGVuZ3RoPjAmJnYudHJpbSgpLmxlbmd0aDw9MyYmdS5zZXExUmFuZ2UubGVuZ3RoK3Uuc2VxMlJhbmdlLmxlbmd0aD4xMDB9Y29uc3QgZD1lLmV4dGVuZFRvRnVsbExpbmVzKHUuc2VxMVJhbmdlKSxtPWUuZ2V0VGV4dChuZXcgSShkLnN0YXJ0LHUuc2VxMVJhbmdlLnN0YXJ0KSk7aChtKSYmKGY9Zi5kZWx0YVN0YXJ0KC1tLmxlbmd0aCkpO2NvbnN0IGc9ZS5nZXRUZXh0KG5ldyBJKHUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSxkLmVuZEV4Y2x1c2l2ZSkpO2goZykmJihmPWYuZGVsdGFFbmQoZy5sZW5ndGgpKTtjb25zdCBiPWouZnJvbU9mZnNldFBhaXJzKGw/bC5nZXRFbmRFeGNsdXNpdmVzKCk6TGUuemVybyxjP2MuZ2V0U3RhcnRzKCk6TGUubWF4KSx4PWYuaW50ZXJzZWN0KGIpO28ubGVuZ3RoPjAmJnguZ2V0U3RhcnRzKCkuZXF1YWxzKG9bby5sZW5ndGgtMV0uZ2V0RW5kRXhjbHVzaXZlcygpKT9vW28ubGVuZ3RoLTFdPW9bby5sZW5ndGgtMV0uam9pbih4KTpvLnB1c2goeCl9KSxvfWNsYXNzIElye2NvbnN0cnVjdG9yKHQsbil7dGhpcy50cmltbWVkSGFzaD10LHRoaXMubGluZXM9bn1nZXRFbGVtZW50KHQpe3JldHVybiB0aGlzLnRyaW1tZWRIYXNoW3RdfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50cmltbWVkSGFzaC5sZW5ndGh9Z2V0Qm91bmRhcnlTY29yZSh0KXtjb25zdCBuPXQ9PT0wPzA6QnIodGhpcy5saW5lc1t0LTFdKSxzPXQ9PT10aGlzLmxpbmVzLmxlbmd0aD8wOkJyKHRoaXMubGluZXNbdF0pO3JldHVybiAxZTMtKG4rcyl9Z2V0VGV4dCh0KXtyZXR1cm4gdGhpcy5saW5lcy5zbGljZSh0LnN0YXJ0LHQuZW5kRXhjbHVzaXZlKS5qb2luKGAKYCl9aXNTdHJvbmdseUVxdWFsKHQsbil7cmV0dXJuIHRoaXMubGluZXNbdF09PT10aGlzLmxpbmVzW25dfX1mdW5jdGlvbiBCcihlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aCYmKGUuY2hhckNvZGVBdCh0KT09PTMyfHxlLmNoYXJDb2RlQXQodCk9PT05KTspdCsrO3JldHVybiB0fWNsYXNzIG0xe2NvbnN0cnVjdG9yKCl7dGhpcy5keW5hbWljUHJvZ3JhbW1pbmdEaWZmaW5nPW5ldyBaYSx0aGlzLm15ZXJzRGlmZmluZ0FsZ29yaXRobT1uZXcgRXJ9Y29tcHV0ZURpZmYodCxuLHMpe2lmKHQubGVuZ3RoPD0xJiZPYSh0LG4sKF8sTCk9Pl89PT1MKSlyZXR1cm4gbmV3IEF0KFtdLFtdLCExKTtpZih0Lmxlbmd0aD09PTEmJnRbMF0ubGVuZ3RoPT09MHx8bi5sZW5ndGg9PT0xJiZuWzBdLmxlbmd0aD09PTApcmV0dXJuIG5ldyBBdChbbmV3IHhlKG5ldyBEKDEsdC5sZW5ndGgrMSksbmV3IEQoMSxuLmxlbmd0aCsxKSxbbmV3IGZlKG5ldyBrKDEsMSx0Lmxlbmd0aCx0W3QubGVuZ3RoLTFdLmxlbmd0aCsxKSxuZXcgaygxLDEsbi5sZW5ndGgsbltuLmxlbmd0aC0xXS5sZW5ndGgrMSkpXSldLFtdLCExKTtjb25zdCByPXMubWF4Q29tcHV0YXRpb25UaW1lTXM9PT0wP2l0Lmluc3RhbmNlOm5ldyBKYShzLm1heENvbXB1dGF0aW9uVGltZU1zKSxpPSFzLmlnbm9yZVRyaW1XaGl0ZXNwYWNlLG89bmV3IE1hcDtmdW5jdGlvbiBsKF8pe2xldCBMPW8uZ2V0KF8pO3JldHVybiBMPT09dm9pZCAwJiYoTD1vLnNpemUsby5zZXQoXyxMKSksTH1jb25zdCB1PXQubWFwKF89PmwoXy50cmltKCkpKSxjPW4ubWFwKF89PmwoXy50cmltKCkpKSxmPW5ldyBJcih1LHQpLGg9bmV3IElyKGMsbiksZD1mLmxlbmd0aCtoLmxlbmd0aDwxNzAwP3RoaXMuZHluYW1pY1Byb2dyYW1taW5nRGlmZmluZy5jb21wdXRlKGYsaCxyLChfLEwpPT50W19dPT09bltMXT9uW0xdLmxlbmd0aD09PTA/LjE6MStNYXRoLmxvZygxK25bTF0ubGVuZ3RoKTouOTkpOnRoaXMubXllcnNEaWZmaW5nQWxnb3JpdGhtLmNvbXB1dGUoZixoLHIpO2xldCBtPWQuZGlmZnMsZz1kLmhpdFRpbWVvdXQ7bT1EcihmLGgsbSksbT1mMShmLGgsbSk7Y29uc3QgYj1bXSx4PV89PntpZihpKWZvcihsZXQgTD0wO0w8XztMKyspe2NvbnN0IEE9ditMLHk9UytMO2lmKHRbQV0hPT1uW3ldKXtjb25zdCBCPXRoaXMucmVmaW5lRGlmZih0LG4sbmV3IGoobmV3IEkoQSxBKzEpLG5ldyBJKHkseSsxKSkscixpKTtmb3IoY29uc3QgUSBvZiBCLm1hcHBpbmdzKWIucHVzaChRKTtCLmhpdFRpbWVvdXQmJihnPSEwKX19fTtsZXQgdj0wLFM9MDtmb3IoY29uc3QgXyBvZiBtKXtDdCgoKT0+Xy5zZXExUmFuZ2Uuc3RhcnQtdj09PV8uc2VxMlJhbmdlLnN0YXJ0LVMpO2NvbnN0IEw9Xy5zZXExUmFuZ2Uuc3RhcnQtdjt4KEwpLHY9Xy5zZXExUmFuZ2UuZW5kRXhjbHVzaXZlLFM9Xy5zZXEyUmFuZ2UuZW5kRXhjbHVzaXZlO2NvbnN0IEE9dGhpcy5yZWZpbmVEaWZmKHQsbixfLHIsaSk7QS5oaXRUaW1lb3V0JiYoZz0hMCk7Zm9yKGNvbnN0IHkgb2YgQS5tYXBwaW5ncyliLnB1c2goeSl9eCh0Lmxlbmd0aC12KTtjb25zdCBOPXFyKGIsdCxuKTtsZXQgcD1bXTtyZXR1cm4gcy5jb21wdXRlTW92ZXMmJihwPXRoaXMuY29tcHV0ZU1vdmVzKE4sdCxuLHUsYyxyLGkpKSxDdCgoKT0+e2Z1bmN0aW9uIF8oQSx5KXtpZihBLmxpbmVOdW1iZXI8MXx8QS5saW5lTnVtYmVyPnkubGVuZ3RoKXJldHVybiExO2NvbnN0IEI9eVtBLmxpbmVOdW1iZXItMV07cmV0dXJuIShBLmNvbHVtbjwxfHxBLmNvbHVtbj5CLmxlbmd0aCsxKX1mdW5jdGlvbiBMKEEseSl7cmV0dXJuIShBLnN0YXJ0TGluZU51bWJlcjwxfHxBLnN0YXJ0TGluZU51bWJlcj55Lmxlbmd0aCsxfHxBLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8MXx8QS5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPnkubGVuZ3RoKzEpfWZvcihjb25zdCBBIG9mIE4pe2lmKCFBLmlubmVyQ2hhbmdlcylyZXR1cm4hMTtmb3IoY29uc3QgeSBvZiBBLmlubmVyQ2hhbmdlcylpZighKF8oeS5tb2RpZmllZFJhbmdlLmdldFN0YXJ0UG9zaXRpb24oKSxuKSYmXyh5Lm1vZGlmaWVkUmFuZ2UuZ2V0RW5kUG9zaXRpb24oKSxuKSYmXyh5Lm9yaWdpbmFsUmFuZ2UuZ2V0U3RhcnRQb3NpdGlvbigpLHQpJiZfKHkub3JpZ2luYWxSYW5nZS5nZXRFbmRQb3NpdGlvbigpLHQpKSlyZXR1cm4hMTtpZighTChBLm1vZGlmaWVkLG4pfHwhTChBLm9yaWdpbmFsLHQpKXJldHVybiExfXJldHVybiEwfSksbmV3IEF0KE4scCxnKX1jb21wdXRlTW92ZXModCxuLHMscixpLG8sbCl7cmV0dXJuIG4xKHQsbixzLHIsaSxvKS5tYXAoZj0+e2NvbnN0IGg9dGhpcy5yZWZpbmVEaWZmKG4scyxuZXcgaihmLm9yaWdpbmFsLnRvT2Zmc2V0UmFuZ2UoKSxmLm1vZGlmaWVkLnRvT2Zmc2V0UmFuZ2UoKSksbyxsKSxkPXFyKGgubWFwcGluZ3MsbixzLCEwKTtyZXR1cm4gbmV3IElhKGYsZCl9KX1yZWZpbmVEaWZmKHQsbixzLHIsaSl7Y29uc3QgbD1iMShzKS50b1JhbmdlTWFwcGluZzIodCxuKSx1PW5ldyBrdCh0LGwub3JpZ2luYWxSYW5nZSxpKSxjPW5ldyBrdChuLGwubW9kaWZpZWRSYW5nZSxpKSxmPXUubGVuZ3RoK2MubGVuZ3RoPDUwMD90aGlzLmR5bmFtaWNQcm9ncmFtbWluZ0RpZmZpbmcuY29tcHV0ZSh1LGMscik6dGhpcy5teWVyc0RpZmZpbmdBbGdvcml0aG0uY29tcHV0ZSh1LGMscik7bGV0IGg9Zi5kaWZmcztyZXR1cm4gaD1Ecih1LGMsaCksaD1jMSh1LGMsaCksaD11MSh1LGMsaCksaD1kMSh1LGMsaCkse21hcHBpbmdzOmgubWFwKG09Pm5ldyBmZSh1LnRyYW5zbGF0ZVJhbmdlKG0uc2VxMVJhbmdlKSxjLnRyYW5zbGF0ZVJhbmdlKG0uc2VxMlJhbmdlKSkpLGhpdFRpbWVvdXQ6Zi5oaXRUaW1lb3V0fX19ZnVuY3Rpb24gcXIoZSx0LG4scz0hMSl7Y29uc3Qgcj1bXTtmb3IoY29uc3QgaSBvZiBqYShlLm1hcChvPT5nMShvLHQsbikpLChvLGwpPT5vLm9yaWdpbmFsLm92ZXJsYXBPclRvdWNoKGwub3JpZ2luYWwpfHxvLm1vZGlmaWVkLm92ZXJsYXBPclRvdWNoKGwubW9kaWZpZWQpKSl7Y29uc3Qgbz1pWzBdLGw9aVtpLmxlbmd0aC0xXTtyLnB1c2gobmV3IHhlKG8ub3JpZ2luYWwuam9pbihsLm9yaWdpbmFsKSxvLm1vZGlmaWVkLmpvaW4obC5tb2RpZmllZCksaS5tYXAodT0+dS5pbm5lckNoYW5nZXNbMF0pKSl9cmV0dXJuIEN0KCgpPT4hcyYmci5sZW5ndGg+MCYmKHJbMF0ubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyIT09clswXS5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXJ8fG4ubGVuZ3RoLXJbci5sZW5ndGgtMV0ubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSE9PXQubGVuZ3RoLXJbci5sZW5ndGgtMV0ub3JpZ2luYWwuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSk/ITE6X3IociwoaSxvKT0+by5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXItaS5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlPT09by5tb2RpZmllZC5zdGFydExpbmVOdW1iZXItaS5tb2RpZmllZC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlJiZpLm9yaWdpbmFsLmVuZExpbmVOdW1iZXJFeGNsdXNpdmU8by5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXImJmkubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZTxvLm1vZGlmaWVkLnN0YXJ0TGluZU51bWJlcikpLHJ9ZnVuY3Rpb24gZzEoZSx0LG4pe2xldCBzPTAscj0wO2UubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW49PT0xJiZlLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uPT09MSYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcitzPD1lLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlciYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcitzPD1lLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlciYmKHI9LTEpLGUubW9kaWZpZWRSYW5nZS5zdGFydENvbHVtbi0xPj1uW2UubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXItMV0ubGVuZ3RoJiZlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRDb2x1bW4tMT49dFtlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLTFdLmxlbmd0aCYmZS5vcmlnaW5hbFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrciYmZS5tb2RpZmllZFJhbmdlLnN0YXJ0TGluZU51bWJlcjw9ZS5tb2RpZmllZFJhbmdlLmVuZExpbmVOdW1iZXIrciYmKHM9MSk7Y29uc3QgaT1uZXcgRChlLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyK3MsZS5vcmlnaW5hbFJhbmdlLmVuZExpbmVOdW1iZXIrMStyKSxvPW5ldyBEKGUubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIrcyxlLm1vZGlmaWVkUmFuZ2UuZW5kTGluZU51bWJlcisxK3IpO3JldHVybiBuZXcgeGUoaSxvLFtlXSl9ZnVuY3Rpb24gYjEoZSl7cmV0dXJuIG5ldyBsZShuZXcgRChlLnNlcTFSYW5nZS5zdGFydCsxLGUuc2VxMVJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSxuZXcgRChlLnNlcTJSYW5nZS5zdGFydCsxLGUuc2VxMlJhbmdlLmVuZEV4Y2x1c2l2ZSsxKSl9Y29uc3QgVXI9e2dldExlZ2FjeTooKT0+bmV3IEhhLGdldERlZmF1bHQ6KCk9Pm5ldyBtMX07ZnVuY3Rpb24geWUoZSx0KXtjb25zdCBuPU1hdGgucG93KDEwLHQpO3JldHVybiBNYXRoLnJvdW5kKGUqbikvbn1jbGFzcyBYe2NvbnN0cnVjdG9yKHQsbixzLHI9MSl7dGhpcy5fcmdiYUJyYW5kPXZvaWQgMCx0aGlzLnI9TWF0aC5taW4oMjU1LE1hdGgubWF4KDAsdCkpfDAsdGhpcy5nPU1hdGgubWluKDI1NSxNYXRoLm1heCgwLG4pKXwwLHRoaXMuYj1NYXRoLm1pbigyNTUsTWF0aC5tYXgoMCxzKSl8MCx0aGlzLmE9eWUoTWF0aC5tYXgoTWF0aC5taW4oMSxyKSwwKSwzKX1zdGF0aWMgZXF1YWxzKHQsbil7cmV0dXJuIHQucj09PW4uciYmdC5nPT09bi5nJiZ0LmI9PT1uLmImJnQuYT09PW4uYX19Y2xhc3MgdWV7Y29uc3RydWN0b3IodCxuLHMscil7dGhpcy5faHNsYUJyYW5kPXZvaWQgMCx0aGlzLmg9TWF0aC5tYXgoTWF0aC5taW4oMzYwLHQpLDApfDAsdGhpcy5zPXllKE1hdGgubWF4KE1hdGgubWluKDEsbiksMCksMyksdGhpcy5sPXllKE1hdGgubWF4KE1hdGgubWluKDEscyksMCksMyksdGhpcy5hPXllKE1hdGgubWF4KE1hdGgubWluKDEsciksMCksMyl9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiB0Lmg9PT1uLmgmJnQucz09PW4ucyYmdC5sPT09bi5sJiZ0LmE9PT1uLmF9c3RhdGljIGZyb21SR0JBKHQpe2NvbnN0IG49dC5yLzI1NSxzPXQuZy8yNTUscj10LmIvMjU1LGk9dC5hLG89TWF0aC5tYXgobixzLHIpLGw9TWF0aC5taW4obixzLHIpO2xldCB1PTAsYz0wO2NvbnN0IGY9KGwrbykvMixoPW8tbDtpZihoPjApe3N3aXRjaChjPU1hdGgubWluKGY8PS41P2gvKDIqZik6aC8oMi0yKmYpLDEpLG8pe2Nhc2Ugbjp1PShzLXIpL2grKHM8cj82OjApO2JyZWFrO2Nhc2Ugczp1PShyLW4pL2grMjticmVhaztjYXNlIHI6dT0obi1zKS9oKzQ7YnJlYWt9dSo9NjAsdT1NYXRoLnJvdW5kKHUpfXJldHVybiBuZXcgdWUodSxjLGYsaSl9c3RhdGljIF9odWUycmdiKHQsbixzKXtyZXR1cm4gczwwJiYocys9MSkscz4xJiYocy09MSksczwxLzY/dCsobi10KSo2KnM6czwxLzI/bjpzPDIvMz90KyhuLXQpKigyLzMtcykqNjp0fXN0YXRpYyB0b1JHQkEodCl7Y29uc3Qgbj10LmgvMzYwLHtzLGw6cixhOml9PXQ7bGV0IG8sbCx1O2lmKHM9PT0wKW89bD11PXI7ZWxzZXtjb25zdCBjPXI8LjU/ciooMStzKTpyK3MtcipzLGY9MipyLWM7bz11ZS5faHVlMnJnYihmLGMsbisxLzMpLGw9dWUuX2h1ZTJyZ2IoZixjLG4pLHU9dWUuX2h1ZTJyZ2IoZixjLG4tMS8zKX1yZXR1cm4gbmV3IFgoTWF0aC5yb3VuZChvKjI1NSksTWF0aC5yb3VuZChsKjI1NSksTWF0aC5yb3VuZCh1KjI1NSksaSl9fWNsYXNzICRle2NvbnN0cnVjdG9yKHQsbixzLHIpe3RoaXMuX2hzdmFCcmFuZD12b2lkIDAsdGhpcy5oPU1hdGgubWF4KE1hdGgubWluKDM2MCx0KSwwKXwwLHRoaXMucz15ZShNYXRoLm1heChNYXRoLm1pbigxLG4pLDApLDMpLHRoaXMudj15ZShNYXRoLm1heChNYXRoLm1pbigxLHMpLDApLDMpLHRoaXMuYT15ZShNYXRoLm1heChNYXRoLm1pbigxLHIpLDApLDMpfXN0YXRpYyBlcXVhbHModCxuKXtyZXR1cm4gdC5oPT09bi5oJiZ0LnM9PT1uLnMmJnQudj09PW4udiYmdC5hPT09bi5hfXN0YXRpYyBmcm9tUkdCQSh0KXtjb25zdCBuPXQuci8yNTUscz10LmcvMjU1LHI9dC5iLzI1NSxpPU1hdGgubWF4KG4scyxyKSxvPU1hdGgubWluKG4scyxyKSxsPWktbyx1PWk9PT0wPzA6bC9pO2xldCBjO3JldHVybiBsPT09MD9jPTA6aT09PW4/Yz0oKHMtcikvbCU2KzYpJTY6aT09PXM/Yz0oci1uKS9sKzI6Yz0obi1zKS9sKzQsbmV3ICRlKE1hdGgucm91bmQoYyo2MCksdSxpLHQuYSl9c3RhdGljIHRvUkdCQSh0KXtjb25zdHtoOm4scyx2OnIsYTppfT10LG89cipzLGw9byooMS1NYXRoLmFicyhuLzYwJTItMSkpLHU9ci1vO2xldFtjLGYsaF09WzAsMCwwXTtyZXR1cm4gbjw2MD8oYz1vLGY9bCk6bjwxMjA/KGM9bCxmPW8pOm48MTgwPyhmPW8saD1sKTpuPDI0MD8oZj1sLGg9byk6bjwzMDA/KGM9bCxoPW8pOm48PTM2MCYmKGM9byxoPWwpLGM9TWF0aC5yb3VuZCgoYyt1KSoyNTUpLGY9TWF0aC5yb3VuZCgoZit1KSoyNTUpLGg9TWF0aC5yb3VuZCgoaCt1KSoyNTUpLG5ldyBYKGMsZixoLGkpfX1jb25zdCBIPWNsYXNzIEh7c3RhdGljIGZyb21IZXgodCl7cmV0dXJuIEguRm9ybWF0LkNTUy5wYXJzZUhleCh0KXx8SC5yZWR9c3RhdGljIGVxdWFscyh0LG4pe3JldHVybiF0JiYhbj8hMDohdHx8IW4/ITE6dC5lcXVhbHMobil9Z2V0IGhzbGEoKXtyZXR1cm4gdGhpcy5faHNsYT90aGlzLl9oc2xhOnVlLmZyb21SR0JBKHRoaXMucmdiYSl9Z2V0IGhzdmEoKXtyZXR1cm4gdGhpcy5faHN2YT90aGlzLl9oc3ZhOiRlLmZyb21SR0JBKHRoaXMucmdiYSl9Y29uc3RydWN0b3IodCl7aWYodClpZih0IGluc3RhbmNlb2YgWCl0aGlzLnJnYmE9dDtlbHNlIGlmKHQgaW5zdGFuY2VvZiB1ZSl0aGlzLl9oc2xhPXQsdGhpcy5yZ2JhPXVlLnRvUkdCQSh0KTtlbHNlIGlmKHQgaW5zdGFuY2VvZiAkZSl0aGlzLl9oc3ZhPXQsdGhpcy5yZ2JhPSRlLnRvUkdCQSh0KTtlbHNlIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2xvciBjdG9yIGFyZ3VtZW50Iik7ZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNvbG9yIG5lZWRzIGEgdmFsdWUiKX1lcXVhbHModCl7cmV0dXJuISF0JiZYLmVxdWFscyh0aGlzLnJnYmEsdC5yZ2JhKSYmdWUuZXF1YWxzKHRoaXMuaHNsYSx0LmhzbGEpJiYkZS5lcXVhbHModGhpcy5oc3ZhLHQuaHN2YSl9Z2V0UmVsYXRpdmVMdW1pbmFuY2UoKXtjb25zdCB0PUguX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5yKSxuPUguX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5nKSxzPUguX3JlbGF0aXZlTHVtaW5hbmNlRm9yQ29tcG9uZW50KHRoaXMucmdiYS5iKSxyPS4yMTI2KnQrLjcxNTIqbisuMDcyMipzO3JldHVybiB5ZShyLDQpfXN0YXRpYyBfcmVsYXRpdmVMdW1pbmFuY2VGb3JDb21wb25lbnQodCl7Y29uc3Qgbj10LzI1NTtyZXR1cm4gbjw9LjAzOTI4P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1pc0xpZ2h0ZXIoKXtyZXR1cm4odGhpcy5yZ2JhLnIqMjk5K3RoaXMucmdiYS5nKjU4Nyt0aGlzLnJnYmEuYioxMTQpLzFlMz49MTI4fWlzTGlnaHRlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG4+c31pc0RhcmtlclRoYW4odCl7Y29uc3Qgbj10aGlzLmdldFJlbGF0aXZlTHVtaW5hbmNlKCkscz10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIG48c31saWdodGVuKHQpe3JldHVybiBuZXcgSChuZXcgdWUodGhpcy5oc2xhLmgsdGhpcy5oc2xhLnMsdGhpcy5oc2xhLmwrdGhpcy5oc2xhLmwqdCx0aGlzLmhzbGEuYSkpfWRhcmtlbih0KXtyZXR1cm4gbmV3IEgobmV3IHVlKHRoaXMuaHNsYS5oLHRoaXMuaHNsYS5zLHRoaXMuaHNsYS5sLXRoaXMuaHNsYS5sKnQsdGhpcy5oc2xhLmEpKX10cmFuc3BhcmVudCh0KXtjb25zdHtyOm4sZzpzLGI6cixhOml9PXRoaXMucmdiYTtyZXR1cm4gbmV3IEgobmV3IFgobixzLHIsaSp0KSl9aXNUcmFuc3BhcmVudCgpe3JldHVybiB0aGlzLnJnYmEuYT09PTB9aXNPcGFxdWUoKXtyZXR1cm4gdGhpcy5yZ2JhLmE9PT0xfW9wcG9zaXRlKCl7cmV0dXJuIG5ldyBIKG5ldyBYKDI1NS10aGlzLnJnYmEuciwyNTUtdGhpcy5yZ2JhLmcsMjU1LXRoaXMucmdiYS5iLHRoaXMucmdiYS5hKSl9bWFrZU9wYXF1ZSh0KXtpZih0aGlzLmlzT3BhcXVlKCl8fHQucmdiYS5hIT09MSlyZXR1cm4gdGhpcztjb25zdHtyOm4sZzpzLGI6cixhOml9PXRoaXMucmdiYTtyZXR1cm4gbmV3IEgobmV3IFgodC5yZ2JhLnItaSoodC5yZ2JhLnItbiksdC5yZ2JhLmctaSoodC5yZ2JhLmctcyksdC5yZ2JhLmItaSoodC5yZ2JhLmItciksMSkpfXRvU3RyaW5nKCl7cmV0dXJuIHRoaXMuX3RvU3RyaW5nfHwodGhpcy5fdG9TdHJpbmc9SC5Gb3JtYXQuQ1NTLmZvcm1hdCh0aGlzKSksdGhpcy5fdG9TdHJpbmd9c3RhdGljIGdldExpZ2h0ZXJDb2xvcih0LG4scyl7aWYodC5pc0xpZ2h0ZXJUaGFuKG4pKXJldHVybiB0O3M9c3x8LjU7Y29uc3Qgcj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIHM9cyooaS1yKS9pLHQubGlnaHRlbihzKX1zdGF0aWMgZ2V0RGFya2VyQ29sb3IodCxuLHMpe2lmKHQuaXNEYXJrZXJUaGFuKG4pKXJldHVybiB0O3M9c3x8LjU7Y29uc3Qgcj10LmdldFJlbGF0aXZlTHVtaW5hbmNlKCksaT1uLmdldFJlbGF0aXZlTHVtaW5hbmNlKCk7cmV0dXJuIHM9cyooci1pKS9yLHQuZGFya2VuKHMpfX07SC53aGl0ZT1uZXcgSChuZXcgWCgyNTUsMjU1LDI1NSwxKSksSC5ibGFjaz1uZXcgSChuZXcgWCgwLDAsMCwxKSksSC5yZWQ9bmV3IEgobmV3IFgoMjU1LDAsMCwxKSksSC5ibHVlPW5ldyBIKG5ldyBYKDAsMCwyNTUsMSkpLEguZ3JlZW49bmV3IEgobmV3IFgoMCwyNTUsMCwxKSksSC5jeWFuPW5ldyBIKG5ldyBYKDAsMjU1LDI1NSwxKSksSC5saWdodGdyZXk9bmV3IEgobmV3IFgoMjExLDIxMSwyMTEsMSkpLEgudHJhbnNwYXJlbnQ9bmV3IEgobmV3IFgoMCwwLDAsMCkpO2xldCBXZT1IOyhmdW5jdGlvbihlKXsoZnVuY3Rpb24odCl7KGZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHMobSl7cmV0dXJuIG0ucmdiYS5hPT09MT9gcmdiKCR7bS5yZ2JhLnJ9LCAke20ucmdiYS5nfSwgJHttLnJnYmEuYn0pYDplLkZvcm1hdC5DU1MuZm9ybWF0UkdCQShtKX1uLmZvcm1hdFJHQj1zO2Z1bmN0aW9uIHIobSl7cmV0dXJuYHJnYmEoJHttLnJnYmEucn0sICR7bS5yZ2JhLmd9LCAke20ucmdiYS5ifSwgJHsrbS5yZ2JhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdFJHQkE9cjtmdW5jdGlvbiBpKG0pe3JldHVybiBtLmhzbGEuYT09PTE/YGhzbCgke20uaHNsYS5ofSwgJHsobS5oc2xhLnMqMTAwKS50b0ZpeGVkKDIpfSUsICR7KG0uaHNsYS5sKjEwMCkudG9GaXhlZCgyKX0lKWA6ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhTTEEobSl9bi5mb3JtYXRIU0w9aTtmdW5jdGlvbiBvKG0pe3JldHVybmBoc2xhKCR7bS5oc2xhLmh9LCAkeyhtLmhzbGEucyoxMDApLnRvRml4ZWQoMil9JSwgJHsobS5oc2xhLmwqMTAwKS50b0ZpeGVkKDIpfSUsICR7bS5oc2xhLmEudG9GaXhlZCgyKX0pYH1uLmZvcm1hdEhTTEE9bztmdW5jdGlvbiBsKG0pe2NvbnN0IGc9bS50b1N0cmluZygxNik7cmV0dXJuIGcubGVuZ3RoIT09Mj8iMCIrZzpnfWZ1bmN0aW9uIHUobSl7cmV0dXJuYCMke2wobS5yZ2JhLnIpfSR7bChtLnJnYmEuZyl9JHtsKG0ucmdiYS5iKX1gfW4uZm9ybWF0SGV4PXU7ZnVuY3Rpb24gYyhtLGc9ITEpe3JldHVybiBnJiZtLnJnYmEuYT09PTE/ZS5Gb3JtYXQuQ1NTLmZvcm1hdEhleChtKTpgIyR7bChtLnJnYmEucil9JHtsKG0ucmdiYS5nKX0ke2wobS5yZ2JhLmIpfSR7bChNYXRoLnJvdW5kKG0ucmdiYS5hKjI1NSkpfWB9bi5mb3JtYXRIZXhBPWM7ZnVuY3Rpb24gZihtKXtyZXR1cm4gbS5pc09wYXF1ZSgpP2UuRm9ybWF0LkNTUy5mb3JtYXRIZXgobSk6ZS5Gb3JtYXQuQ1NTLmZvcm1hdFJHQkEobSl9bi5mb3JtYXQ9ZjtmdW5jdGlvbiBoKG0pe2NvbnN0IGc9bS5sZW5ndGg7aWYoZz09PTB8fG0uY2hhckNvZGVBdCgwKSE9PTM1KXJldHVybiBudWxsO2lmKGc9PT03KXtjb25zdCBiPTE2KmQobS5jaGFyQ29kZUF0KDEpKStkKG0uY2hhckNvZGVBdCgyKSkseD0xNipkKG0uY2hhckNvZGVBdCgzKSkrZChtLmNoYXJDb2RlQXQoNCkpLHY9MTYqZChtLmNoYXJDb2RlQXQoNSkpK2QobS5jaGFyQ29kZUF0KDYpKTtyZXR1cm4gbmV3IGUobmV3IFgoYix4LHYsMSkpfWlmKGc9PT05KXtjb25zdCBiPTE2KmQobS5jaGFyQ29kZUF0KDEpKStkKG0uY2hhckNvZGVBdCgyKSkseD0xNipkKG0uY2hhckNvZGVBdCgzKSkrZChtLmNoYXJDb2RlQXQoNCkpLHY9MTYqZChtLmNoYXJDb2RlQXQoNSkpK2QobS5jaGFyQ29kZUF0KDYpKSxTPTE2KmQobS5jaGFyQ29kZUF0KDcpKStkKG0uY2hhckNvZGVBdCg4KSk7cmV0dXJuIG5ldyBlKG5ldyBYKGIseCx2LFMvMjU1KSl9aWYoZz09PTQpe2NvbnN0IGI9ZChtLmNoYXJDb2RlQXQoMSkpLHg9ZChtLmNoYXJDb2RlQXQoMikpLHY9ZChtLmNoYXJDb2RlQXQoMykpO3JldHVybiBuZXcgZShuZXcgWCgxNipiK2IsMTYqeCt4LDE2KnYrdikpfWlmKGc9PT01KXtjb25zdCBiPWQobS5jaGFyQ29kZUF0KDEpKSx4PWQobS5jaGFyQ29kZUF0KDIpKSx2PWQobS5jaGFyQ29kZUF0KDMpKSxTPWQobS5jaGFyQ29kZUF0KDQpKTtyZXR1cm4gbmV3IGUobmV3IFgoMTYqYitiLDE2KngreCwxNip2K3YsKDE2KlMrUykvMjU1KSl9cmV0dXJuIG51bGx9bi5wYXJzZUhleD1oO2Z1bmN0aW9uIGQobSl7c3dpdGNoKG0pe2Nhc2UgNDg6cmV0dXJuIDA7Y2FzZSA0OTpyZXR1cm4gMTtjYXNlIDUwOnJldHVybiAyO2Nhc2UgNTE6cmV0dXJuIDM7Y2FzZSA1MjpyZXR1cm4gNDtjYXNlIDUzOnJldHVybiA1O2Nhc2UgNTQ6cmV0dXJuIDY7Y2FzZSA1NTpyZXR1cm4gNztjYXNlIDU2OnJldHVybiA4O2Nhc2UgNTc6cmV0dXJuIDk7Y2FzZSA5NzpyZXR1cm4gMTA7Y2FzZSA2NTpyZXR1cm4gMTA7Y2FzZSA5ODpyZXR1cm4gMTE7Y2FzZSA2NjpyZXR1cm4gMTE7Y2FzZSA5OTpyZXR1cm4gMTI7Y2FzZSA2NzpyZXR1cm4gMTI7Y2FzZSAxMDA6cmV0dXJuIDEzO2Nhc2UgNjg6cmV0dXJuIDEzO2Nhc2UgMTAxOnJldHVybiAxNDtjYXNlIDY5OnJldHVybiAxNDtjYXNlIDEwMjpyZXR1cm4gMTU7Y2FzZSA3MDpyZXR1cm4gMTV9cmV0dXJuIDB9fSkodC5DU1N8fCh0LkNTUz17fSkpfSkoZS5Gb3JtYXR8fChlLkZvcm1hdD17fSkpfSkoV2V8fChXZT17fSkpO2Z1bmN0aW9uIEhyKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IG4gb2YgZSl7Y29uc3Qgcz1OdW1iZXIobik7KHN8fHM9PT0wJiZuLnJlcGxhY2UoL1xzL2csIiIpIT09IiIpJiZ0LnB1c2gocyl9cmV0dXJuIHR9ZnVuY3Rpb24geW4oZSx0LG4scyl7cmV0dXJue3JlZDplLzI1NSxibHVlOm4vMjU1LGdyZWVuOnQvMjU1LGFscGhhOnN9fWZ1bmN0aW9uIGF0KGUsdCl7Y29uc3Qgbj10LmluZGV4LHM9dFswXS5sZW5ndGg7aWYoIW4pcmV0dXJuO2NvbnN0IHI9ZS5wb3NpdGlvbkF0KG4pO3JldHVybntzdGFydExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLHN0YXJ0Q29sdW1uOnIuY29sdW1uLGVuZExpbmVOdW1iZXI6ci5saW5lTnVtYmVyLGVuZENvbHVtbjpyLmNvbHVtbitzfX1mdW5jdGlvbiBfMShlLHQpe2lmKCFlKXJldHVybjtjb25zdCBuPVdlLkZvcm1hdC5DU1MucGFyc2VIZXgodCk7aWYobilyZXR1cm57cmFuZ2U6ZSxjb2xvcjp5bihuLnJnYmEucixuLnJnYmEuZyxuLnJnYmEuYixuLnJnYmEuYSl9fWZ1bmN0aW9uICRyKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCByPXRbMF0udmFsdWVzKCksaT1IcihyKTtyZXR1cm57cmFuZ2U6ZSxjb2xvcjp5bihpWzBdLGlbMV0saVsyXSxuP2lbM106MSl9fWZ1bmN0aW9uIFdyKGUsdCxuKXtpZighZXx8dC5sZW5ndGghPT0xKXJldHVybjtjb25zdCByPXRbMF0udmFsdWVzKCksaT1IcihyKSxvPW5ldyBXZShuZXcgdWUoaVswXSxpWzFdLzEwMCxpWzJdLzEwMCxuP2lbM106MSkpO3JldHVybntyYW5nZTplLGNvbG9yOnluKG8ucmdiYS5yLG8ucmdiYS5nLG8ucmdiYS5iLG8ucmdiYS5hKX19ZnVuY3Rpb24gb3QoZSx0KXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciP1suLi5lLm1hdGNoQWxsKHQpXTplLmZpbmRNYXRjaGVzKHQpfWZ1bmN0aW9uIHAxKGUpe2NvbnN0IHQ9W10scz1vdChlLC9cYihyZ2J8cmdiYXxoc2x8aHNsYSkoXChbMC05XHMsLlwlXSpcKSl8KCMpKFtBLUZhLWYwLTldezN9KVxifCgjKShbQS1GYS1mMC05XXs0fSlcYnwoIykoW0EtRmEtZjAtOV17Nn0pXGJ8KCMpKFtBLUZhLWYwLTldezh9KVxiL2dtKTtpZihzLmxlbmd0aD4wKWZvcihjb25zdCByIG9mIHMpe2NvbnN0IGk9ci5maWx0ZXIoYz0+YyE9PXZvaWQgMCksbz1pWzFdLGw9aVsyXTtpZighbCljb250aW51ZTtsZXQgdTtpZihvPT09InJnYiIpe2NvbnN0IGM9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqXCkkL2dtO3U9JHIoYXQoZSxyKSxvdChsLGMpLCExKX1lbHNlIGlmKG89PT0icmdiYSIpe2NvbnN0IGM9L15cKFxzKigyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldfFswLTldKVxzKixccyooMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV17Mn18WzEtOV1bMC05XXxbMC05XSlccyosXHMqKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldWzAtOV18WzAtOV0pXHMqLFxzKigwWy5dWzAtOV0rfFsuXVswLTldK3xbMDFdWy5dfFswMV0pXHMqXCkkL2dtO3U9JHIoYXQoZSxyKSxvdChsLGMpLCEwKX1lbHNlIGlmKG89PT0iaHNsIil7Y29uc3QgYz0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccypcKSQvZ207dT1XcihhdChlLHIpLG90KGwsYyksITEpfWVsc2UgaWYobz09PSJoc2xhIil7Y29uc3QgYz0vXlwoXHMqKDM2WzBdfDNbMC01XVswLTldfFsxMl1bMC05XVswLTldfFsxLTldP1swLTldKVxzKixccyooMTAwfFxkezEsMn1bLl1cZCp8XGR7MSwyfSklXHMqLFxzKigxMDB8XGR7MSwyfVsuXVxkKnxcZHsxLDJ9KSVccyosXHMqKDBbLl1bMC05XSt8Wy5dWzAtOV0rfFswMV1bLl18WzAxXSlccypcKSQvZ207dT1XcihhdChlLHIpLG90KGwsYyksITApfWVsc2Ugbz09PSIjIiYmKHU9XzEoYXQoZSxyKSxvK2wpKTt1JiZ0LnB1c2godSl9cmV0dXJuIHR9ZnVuY3Rpb24geDEoZSl7cmV0dXJuIWV8fHR5cGVvZiBlLmdldFZhbHVlIT0iZnVuY3Rpb24ifHx0eXBlb2YgZS5wb3NpdGlvbkF0IT0iZnVuY3Rpb24iP1tdOnAxKGUpfWNvbnN0IHpyPW5ldyBSZWdFeHAoIlxcYk1BUks6XFxzKiguKikkIiwiZCIpLHcxPS9eLSt8LSskL2c7ZnVuY3Rpb24gTDEoZSx0KXtsZXQgbj1bXTtpZih0LmZpbmRSZWdpb25TZWN0aW9uSGVhZGVycyYmdC5mb2xkaW5nUnVsZXM/Lm1hcmtlcnMpe2NvbnN0IHM9djEoZSx0KTtuPW4uY29uY2F0KHMpfWlmKHQuZmluZE1hcmtTZWN0aW9uSGVhZGVycyl7Y29uc3Qgcz1OMShlKTtuPW4uY29uY2F0KHMpfXJldHVybiBufWZ1bmN0aW9uIHYxKGUsdCl7Y29uc3Qgbj1bXSxzPWUuZ2V0TGluZUNvdW50KCk7Zm9yKGxldCByPTE7cjw9cztyKyspe2NvbnN0IGk9ZS5nZXRMaW5lQ29udGVudChyKSxvPWkubWF0Y2godC5mb2xkaW5nUnVsZXMubWFya2Vycy5zdGFydCk7aWYobyl7Y29uc3QgbD17c3RhcnRMaW5lTnVtYmVyOnIsc3RhcnRDb2x1bW46b1swXS5sZW5ndGgrMSxlbmRMaW5lTnVtYmVyOnIsZW5kQ29sdW1uOmkubGVuZ3RoKzF9O2lmKGwuZW5kQ29sdW1uPmwuc3RhcnRDb2x1bW4pe2NvbnN0IHU9e3JhbmdlOmwsLi4uT3IoaS5zdWJzdHJpbmcob1swXS5sZW5ndGgpKSxzaG91bGRCZUluQ29tbWVudHM6ITF9Oyh1LnRleHR8fHUuaGFzU2VwYXJhdG9yTGluZSkmJm4ucHVzaCh1KX19fXJldHVybiBufWZ1bmN0aW9uIE4xKGUpe2NvbnN0IHQ9W10sbj1lLmdldExpbmVDb3VudCgpO2ZvcihsZXQgcz0xO3M8PW47cysrKXtjb25zdCByPWUuZ2V0TGluZUNvbnRlbnQocyk7UzEocixzLHQpfXJldHVybiB0fWZ1bmN0aW9uIFMxKGUsdCxuKXt6ci5sYXN0SW5kZXg9MDtjb25zdCBzPXpyLmV4ZWMoZSk7aWYocyl7Y29uc3Qgcj1zLmluZGljZXNbMV1bMF0rMSxpPXMuaW5kaWNlc1sxXVsxXSsxLG89e3N0YXJ0TGluZU51bWJlcjp0LHN0YXJ0Q29sdW1uOnIsZW5kTGluZU51bWJlcjp0LGVuZENvbHVtbjppfTtpZihvLmVuZENvbHVtbj5vLnN0YXJ0Q29sdW1uKXtjb25zdCBsPXtyYW5nZTpvLC4uLk9yKHNbMV0pLHNob3VsZEJlSW5Db21tZW50czohMH07KGwudGV4dHx8bC5oYXNTZXBhcmF0b3JMaW5lKSYmbi5wdXNoKGwpfX19ZnVuY3Rpb24gT3IoZSl7ZT1lLnRyaW0oKTtjb25zdCB0PWUuc3RhcnRzV2l0aCgiLSIpO3JldHVybiBlPWUucmVwbGFjZSh3MSwiIikse3RleHQ6ZSxoYXNTZXBhcmF0b3JMaW5lOnR9fXZhciBqcjsoZnVuY3Rpb24oZSl7YXN5bmMgZnVuY3Rpb24gdChzKXtsZXQgcjtjb25zdCBpPWF3YWl0IFByb21pc2UuYWxsKHMubWFwKG89Pm8udGhlbihsPT5sLGw9PntyfHwocj1sKX0pKSk7aWYodHlwZW9mIHI8InUiKXRocm93IHI7cmV0dXJuIGl9ZS5zZXR0bGVkPXQ7ZnVuY3Rpb24gbihzKXtyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMocixpKT0+e3RyeXthd2FpdCBzKHIsaSl9Y2F0Y2gobyl7aShvKX19KX1lLndpdGhBc3luY0JvZHk9bn0pKGpyfHwoanI9e30pKTtjb25zdCB0ZT1jbGFzcyB0ZXtzdGF0aWMgZnJvbUFycmF5KHQpe3JldHVybiBuZXcgdGUobj0+e24uZW1pdE1hbnkodCl9KX1zdGF0aWMgZnJvbVByb21pc2UodCl7cmV0dXJuIG5ldyB0ZShhc3luYyBuPT57bi5lbWl0TWFueShhd2FpdCB0KX0pfXN0YXRpYyBmcm9tUHJvbWlzZXModCl7cmV0dXJuIG5ldyB0ZShhc3luYyBuPT57YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoYXN5bmMgcz0+bi5lbWl0T25lKGF3YWl0IHMpKSl9KX1zdGF0aWMgbWVyZ2UodCl7cmV0dXJuIG5ldyB0ZShhc3luYyBuPT57YXdhaXQgUHJvbWlzZS5hbGwodC5tYXAoYXN5bmMgcz0+e2ZvciBhd2FpdChjb25zdCByIG9mIHMpbi5lbWl0T25lKHIpfSkpfSl9Y29uc3RydWN0b3IodCxuKXt0aGlzLl9zdGF0ZT0wLHRoaXMuX3Jlc3VsdHM9W10sdGhpcy5fZXJyb3I9bnVsbCx0aGlzLl9vblJldHVybj1uLHRoaXMuX29uU3RhdGVDaGFuZ2VkPW5ldyBvZSxxdWV1ZU1pY3JvdGFzayhhc3luYygpPT57Y29uc3Qgcz17ZW1pdE9uZTpyPT50aGlzLmVtaXRPbmUociksZW1pdE1hbnk6cj0+dGhpcy5lbWl0TWFueShyKSxyZWplY3Q6cj0+dGhpcy5yZWplY3Qocil9O3RyeXthd2FpdCBQcm9taXNlLnJlc29sdmUodChzKSksdGhpcy5yZXNvbHZlKCl9Y2F0Y2gocil7dGhpcy5yZWplY3Qocil9ZmluYWxseXtzLmVtaXRPbmU9dm9pZCAwLHMuZW1pdE1hbnk9dm9pZCAwLHMucmVqZWN0PXZvaWQgMH19KX1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7bGV0IHQ9MDtyZXR1cm57bmV4dDphc3luYygpPT57ZG97aWYodGhpcy5fc3RhdGU9PT0yKXRocm93IHRoaXMuX2Vycm9yO2lmKHQ8dGhpcy5fcmVzdWx0cy5sZW5ndGgpcmV0dXJue2RvbmU6ITEsdmFsdWU6dGhpcy5fcmVzdWx0c1t0KytdfTtpZih0aGlzLl9zdGF0ZT09PTEpcmV0dXJue2RvbmU6ITAsdmFsdWU6dm9pZCAwfTthd2FpdCBndC50b1Byb21pc2UodGhpcy5fb25TdGF0ZUNoYW5nZWQuZXZlbnQpfXdoaWxlKCEwKX0scmV0dXJuOmFzeW5jKCk9Pih0aGlzLl9vblJldHVybj8uKCkse2RvbmU6ITAsdmFsdWU6dm9pZCAwfSl9fXN0YXRpYyBtYXAodCxuKXtyZXR1cm4gbmV3IHRlKGFzeW5jIHM9Pntmb3IgYXdhaXQoY29uc3QgciBvZiB0KXMuZW1pdE9uZShuKHIpKX0pfW1hcCh0KXtyZXR1cm4gdGUubWFwKHRoaXMsdCl9c3RhdGljIGZpbHRlcih0LG4pe3JldHVybiBuZXcgdGUoYXN5bmMgcz0+e2ZvciBhd2FpdChjb25zdCByIG9mIHQpbihyKSYmcy5lbWl0T25lKHIpfSl9ZmlsdGVyKHQpe3JldHVybiB0ZS5maWx0ZXIodGhpcyx0KX1zdGF0aWMgY29hbGVzY2UodCl7cmV0dXJuIHRlLmZpbHRlcih0LG49PiEhbil9Y29hbGVzY2UoKXtyZXR1cm4gdGUuY29hbGVzY2UodGhpcyl9c3RhdGljIGFzeW5jIHRvUHJvbWlzZSh0KXtjb25zdCBuPVtdO2ZvciBhd2FpdChjb25zdCBzIG9mIHQpbi5wdXNoKHMpO3JldHVybiBufXRvUHJvbWlzZSgpe3JldHVybiB0ZS50b1Byb21pc2UodGhpcyl9ZW1pdE9uZSh0KXt0aGlzLl9zdGF0ZT09PTAmJih0aGlzLl9yZXN1bHRzLnB1c2godCksdGhpcy5fb25TdGF0ZUNoYW5nZWQuZmlyZSgpKX1lbWl0TWFueSh0KXt0aGlzLl9zdGF0ZT09PTAmJih0aGlzLl9yZXN1bHRzPXRoaXMuX3Jlc3VsdHMuY29uY2F0KHQpLHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9cmVzb2x2ZSgpe3RoaXMuX3N0YXRlPT09MCYmKHRoaXMuX3N0YXRlPTEsdGhpcy5fb25TdGF0ZUNoYW5nZWQuZmlyZSgpKX1yZWplY3QodCl7dGhpcy5fc3RhdGU9PT0wJiYodGhpcy5fc3RhdGU9Mix0aGlzLl9lcnJvcj10LHRoaXMuX29uU3RhdGVDaGFuZ2VkLmZpcmUoKSl9fTt0ZS5FTVBUWT10ZS5mcm9tQXJyYXkoW10pO2xldCBHcj10ZTtjbGFzcyBDMXtjb25zdHJ1Y3Rvcih0KXt0aGlzLnZhbHVlcz10LHRoaXMucHJlZml4U3VtPW5ldyBVaW50MzJBcnJheSh0Lmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4PW5ldyBJbnQzMkFycmF5KDEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT0tMX1pbnNlcnRWYWx1ZXModCxuKXt0PUJlKHQpO2NvbnN0IHM9dGhpcy52YWx1ZXMscj10aGlzLnByZWZpeFN1bSxpPW4ubGVuZ3RoO3JldHVybiBpPT09MD8hMToodGhpcy52YWx1ZXM9bmV3IFVpbnQzMkFycmF5KHMubGVuZ3RoK2kpLHRoaXMudmFsdWVzLnNldChzLnN1YmFycmF5KDAsdCksMCksdGhpcy52YWx1ZXMuc2V0KHMuc3ViYXJyYXkodCksdCtpKSx0aGlzLnZhbHVlcy5zZXQobix0KSx0LTE8dGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdJiYodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPXQtMSksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdPj0wJiZ0aGlzLnByZWZpeFN1bS5zZXQoci5zdWJhcnJheSgwLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxKSksITApfXNldFZhbHVlKHQsbil7cmV0dXJuIHQ9QmUodCksbj1CZShuKSx0aGlzLnZhbHVlc1t0XT09PW4/ITE6KHRoaXMudmFsdWVzW3RdPW4sdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLCEwKX1yZW1vdmVWYWx1ZXModCxuKXt0PUJlKHQpLG49QmUobik7Y29uc3Qgcz10aGlzLnZhbHVlcyxyPXRoaXMucHJlZml4U3VtO2lmKHQ+PXMubGVuZ3RoKXJldHVybiExO2NvbnN0IGk9cy5sZW5ndGgtdDtyZXR1cm4gbj49aSYmKG49aSksbj09PTA/ITE6KHRoaXMudmFsdWVzPW5ldyBVaW50MzJBcnJheShzLmxlbmd0aC1uKSx0aGlzLnZhbHVlcy5zZXQocy5zdWJhcnJheSgwLHQpLDApLHRoaXMudmFsdWVzLnNldChzLnN1YmFycmF5KHQrbiksdCksdGhpcy5wcmVmaXhTdW09bmV3IFVpbnQzMkFycmF5KHRoaXMudmFsdWVzLmxlbmd0aCksdC0xPHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSYmKHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT10LTEpLHRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXT49MCYmdGhpcy5wcmVmaXhTdW0uc2V0KHIuc3ViYXJyYXkoMCx0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0rMSkpLCEwKX1nZXRUb3RhbFN1bSgpe3JldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg9PT0wPzA6dGhpcy5fZ2V0UHJlZml4U3VtKHRoaXMudmFsdWVzLmxlbmd0aC0xKX1nZXRQcmVmaXhTdW0odCl7cmV0dXJuIHQ8MD8wOih0PUJlKHQpLHRoaXMuX2dldFByZWZpeFN1bSh0KSl9X2dldFByZWZpeFN1bSh0KXtpZih0PD10aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF0pcmV0dXJuIHRoaXMucHJlZml4U3VtW3RdO2xldCBuPXRoaXMucHJlZml4U3VtVmFsaWRJbmRleFswXSsxO249PT0wJiYodGhpcy5wcmVmaXhTdW1bMF09dGhpcy52YWx1ZXNbMF0sbisrKSx0Pj10aGlzLnZhbHVlcy5sZW5ndGgmJih0PXRoaXMudmFsdWVzLmxlbmd0aC0xKTtmb3IobGV0IHM9bjtzPD10O3MrKyl0aGlzLnByZWZpeFN1bVtzXT10aGlzLnByZWZpeFN1bVtzLTFdK3RoaXMudmFsdWVzW3NdO3JldHVybiB0aGlzLnByZWZpeFN1bVZhbGlkSW5kZXhbMF09TWF0aC5tYXgodGhpcy5wcmVmaXhTdW1WYWxpZEluZGV4WzBdLHQpLHRoaXMucHJlZml4U3VtW3RdfWdldEluZGV4T2YodCl7dD1NYXRoLmZsb29yKHQpLHRoaXMuZ2V0VG90YWxTdW0oKTtsZXQgbj0wLHM9dGhpcy52YWx1ZXMubGVuZ3RoLTEscj0wLGk9MCxvPTA7Zm9yKDtuPD1zOylpZihyPW4rKHMtbikvMnwwLGk9dGhpcy5wcmVmaXhTdW1bcl0sbz1pLXRoaXMudmFsdWVzW3JdLHQ8bylzPXItMTtlbHNlIGlmKHQ+PWkpbj1yKzE7ZWxzZSBicmVhaztyZXR1cm4gbmV3IEExKHIsdC1vKX19Y2xhc3MgQTF7Y29uc3RydWN0b3IodCxuKXt0aGlzLmluZGV4PXQsdGhpcy5yZW1haW5kZXI9bix0aGlzLl9wcmVmaXhTdW1JbmRleE9mUmVzdWx0QnJhbmQ9dm9pZCAwLHRoaXMuaW5kZXg9dCx0aGlzLnJlbWFpbmRlcj1ufX1jbGFzcyBSMXtjb25zdHJ1Y3Rvcih0LG4scyxyKXt0aGlzLl91cmk9dCx0aGlzLl9saW5lcz1uLHRoaXMuX2VvbD1zLHRoaXMuX3ZlcnNpb25JZD1yLHRoaXMuX2xpbmVTdGFydHM9bnVsbCx0aGlzLl9jYWNoZWRUZXh0VmFsdWU9bnVsbH1kaXNwb3NlKCl7dGhpcy5fbGluZXMubGVuZ3RoPTB9Z2V0IHZlcnNpb24oKXtyZXR1cm4gdGhpcy5fdmVyc2lvbklkfWdldFRleHQoKXtyZXR1cm4gdGhpcy5fY2FjaGVkVGV4dFZhbHVlPT09bnVsbCYmKHRoaXMuX2NhY2hlZFRleHRWYWx1ZT10aGlzLl9saW5lcy5qb2luKHRoaXMuX2VvbCkpLHRoaXMuX2NhY2hlZFRleHRWYWx1ZX1vbkV2ZW50cyh0KXt0LmVvbCYmdC5lb2whPT10aGlzLl9lb2wmJih0aGlzLl9lb2w9dC5lb2wsdGhpcy5fbGluZVN0YXJ0cz1udWxsKTtjb25zdCBuPXQuY2hhbmdlcztmb3IoY29uc3QgcyBvZiBuKXRoaXMuX2FjY2VwdERlbGV0ZVJhbmdlKHMucmFuZ2UpLHRoaXMuX2FjY2VwdEluc2VydFRleHQobmV3IFUocy5yYW5nZS5zdGFydExpbmVOdW1iZXIscy5yYW5nZS5zdGFydENvbHVtbikscy50ZXh0KTt0aGlzLl92ZXJzaW9uSWQ9dC52ZXJzaW9uSWQsdGhpcy5fY2FjaGVkVGV4dFZhbHVlPW51bGx9X2Vuc3VyZUxpbmVTdGFydHMoKXtpZighdGhpcy5fbGluZVN0YXJ0cyl7Y29uc3QgdD10aGlzLl9lb2wubGVuZ3RoLG49dGhpcy5fbGluZXMubGVuZ3RoLHM9bmV3IFVpbnQzMkFycmF5KG4pO2ZvcihsZXQgcj0wO3I8bjtyKyspc1tyXT10aGlzLl9saW5lc1tyXS5sZW5ndGgrdDt0aGlzLl9saW5lU3RhcnRzPW5ldyBDMShzKX19X3NldExpbmVUZXh0KHQsbil7dGhpcy5fbGluZXNbdF09bix0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLnNldFZhbHVlKHQsdGhpcy5fbGluZXNbdF0ubGVuZ3RoK3RoaXMuX2VvbC5sZW5ndGgpfV9hY2NlcHREZWxldGVSYW5nZSh0KXtpZih0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcil7aWYodC5zdGFydENvbHVtbj09PXQuZW5kQ29sdW1uKXJldHVybjt0aGlzLl9zZXRMaW5lVGV4dCh0LnN0YXJ0TGluZU51bWJlci0xLHRoaXMuX2xpbmVzW3Quc3RhcnRMaW5lTnVtYmVyLTFdLnN1YnN0cmluZygwLHQuc3RhcnRDb2x1bW4tMSkrdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuZW5kQ29sdW1uLTEpKTtyZXR1cm59dGhpcy5fc2V0TGluZVRleHQodC5zdGFydExpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LnN0YXJ0TGluZU51bWJlci0xXS5zdWJzdHJpbmcoMCx0LnN0YXJ0Q29sdW1uLTEpK3RoaXMuX2xpbmVzW3QuZW5kTGluZU51bWJlci0xXS5zdWJzdHJpbmcodC5lbmRDb2x1bW4tMSkpLHRoaXMuX2xpbmVzLnNwbGljZSh0LnN0YXJ0TGluZU51bWJlcix0LmVuZExpbmVOdW1iZXItdC5zdGFydExpbmVOdW1iZXIpLHRoaXMuX2xpbmVTdGFydHMmJnRoaXMuX2xpbmVTdGFydHMucmVtb3ZlVmFsdWVzKHQuc3RhcnRMaW5lTnVtYmVyLHQuZW5kTGluZU51bWJlci10LnN0YXJ0TGluZU51bWJlcil9X2FjY2VwdEluc2VydFRleHQodCxuKXtpZihuLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IHM9d2kobik7aWYocy5sZW5ndGg9PT0xKXt0aGlzLl9zZXRMaW5lVGV4dCh0LmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5jb2x1bW4tMSkrc1swXSt0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuY29sdW1uLTEpKTtyZXR1cm59c1tzLmxlbmd0aC0xXSs9dGhpcy5fbGluZXNbdC5saW5lTnVtYmVyLTFdLnN1YnN0cmluZyh0LmNvbHVtbi0xKSx0aGlzLl9zZXRMaW5lVGV4dCh0LmxpbmVOdW1iZXItMSx0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0uc3Vic3RyaW5nKDAsdC5jb2x1bW4tMSkrc1swXSk7Y29uc3Qgcj1uZXcgVWludDMyQXJyYXkocy5sZW5ndGgtMSk7Zm9yKGxldCBpPTE7aTxzLmxlbmd0aDtpKyspdGhpcy5fbGluZXMuc3BsaWNlKHQubGluZU51bWJlcitpLTEsMCxzW2ldKSxyW2ktMV09c1tpXS5sZW5ndGgrdGhpcy5fZW9sLmxlbmd0aDt0aGlzLl9saW5lU3RhcnRzJiZ0aGlzLl9saW5lU3RhcnRzLmluc2VydFZhbHVlcyh0LmxpbmVOdW1iZXIscil9fWNsYXNzIHkxe2NvbnN0cnVjdG9yKCl7dGhpcy5fbW9kZWxzPU9iamVjdC5jcmVhdGUobnVsbCl9Z2V0TW9kZWwodCl7cmV0dXJuIHRoaXMuX21vZGVsc1t0XX1nZXRNb2RlbHMoKXtjb25zdCB0PVtdO3JldHVybiBPYmplY3Qua2V5cyh0aGlzLl9tb2RlbHMpLmZvckVhY2gobj0+dC5wdXNoKHRoaXMuX21vZGVsc1tuXSkpLHR9JGFjY2VwdE5ld01vZGVsKHQpe3RoaXMuX21vZGVsc1t0LnVybF09bmV3IEUxKHNlLnBhcnNlKHQudXJsKSx0LmxpbmVzLHQuRU9MLHQudmVyc2lvbklkKX0kYWNjZXB0TW9kZWxDaGFuZ2VkKHQsbil7aWYoIXRoaXMuX21vZGVsc1t0XSlyZXR1cm47dGhpcy5fbW9kZWxzW3RdLm9uRXZlbnRzKG4pfSRhY2NlcHRSZW1vdmVkTW9kZWwodCl7dGhpcy5fbW9kZWxzW3RdJiZkZWxldGUgdGhpcy5fbW9kZWxzW3RdfX1jbGFzcyBFMSBleHRlbmRzIFIxe2dldCB1cmkoKXtyZXR1cm4gdGhpcy5fdXJpfWdldCBlb2woKXtyZXR1cm4gdGhpcy5fZW9sfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0VGV4dCgpfWZpbmRNYXRjaGVzKHQpe2NvbnN0IG49W107Zm9yKGxldCBzPTA7czx0aGlzLl9saW5lcy5sZW5ndGg7cysrKXtjb25zdCByPXRoaXMuX2xpbmVzW3NdLGk9dGhpcy5vZmZzZXRBdChuZXcgVShzKzEsMSkpLG89ci5tYXRjaEFsbCh0KTtmb3IoY29uc3QgbCBvZiBvKShsLmluZGV4fHxsLmluZGV4PT09MCkmJihsLmluZGV4PWwuaW5kZXgraSksbi5wdXNoKGwpfXJldHVybiBufWdldExpbmVzQ29udGVudCgpe3JldHVybiB0aGlzLl9saW5lcy5zbGljZSgwKX1nZXRMaW5lQ291bnQoKXtyZXR1cm4gdGhpcy5fbGluZXMubGVuZ3RofWdldExpbmVDb250ZW50KHQpe3JldHVybiB0aGlzLl9saW5lc1t0LTFdfWdldFdvcmRBdFBvc2l0aW9uKHQsbil7Y29uc3Qgcz13bih0LmNvbHVtbix4cihuKSx0aGlzLl9saW5lc1t0LmxpbmVOdW1iZXItMV0sMCk7cmV0dXJuIHM/bmV3IGsodC5saW5lTnVtYmVyLHMuc3RhcnRDb2x1bW4sdC5saW5lTnVtYmVyLHMuZW5kQ29sdW1uKTpudWxsfXdvcmRzKHQpe2NvbnN0IG49dGhpcy5fbGluZXMscz10aGlzLl93b3JkZW5pemUuYmluZCh0aGlzKTtsZXQgcj0wLGk9IiIsbz0wLGw9W107cmV0dXJueypbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcig7OylpZihvPGwubGVuZ3RoKXtjb25zdCB1PWkuc3Vic3RyaW5nKGxbb10uc3RhcnQsbFtvXS5lbmQpO28rPTEseWllbGQgdX1lbHNlIGlmKHI8bi5sZW5ndGgpaT1uW3JdLGw9cyhpLHQpLG89MCxyKz0xO2Vsc2UgYnJlYWt9fX1nZXRMaW5lV29yZHModCxuKXtjb25zdCBzPXRoaXMuX2xpbmVzW3QtMV0scj10aGlzLl93b3JkZW5pemUocyxuKSxpPVtdO2Zvcihjb25zdCBvIG9mIHIpaS5wdXNoKHt3b3JkOnMuc3Vic3RyaW5nKG8uc3RhcnQsby5lbmQpLHN0YXJ0Q29sdW1uOm8uc3RhcnQrMSxlbmRDb2x1bW46by5lbmQrMX0pO3JldHVybiBpfV93b3JkZW5pemUodCxuKXtjb25zdCBzPVtdO2xldCByO2ZvcihuLmxhc3RJbmRleD0wOyhyPW4uZXhlYyh0KSkmJnJbMF0ubGVuZ3RoIT09MDspcy5wdXNoKHtzdGFydDpyLmluZGV4LGVuZDpyLmluZGV4K3JbMF0ubGVuZ3RofSk7cmV0dXJuIHN9Z2V0VmFsdWVJblJhbmdlKHQpe2lmKHQ9dGhpcy5fdmFsaWRhdGVSYW5nZSh0KSx0LnN0YXJ0TGluZU51bWJlcj09PXQuZW5kTGluZU51bWJlcilyZXR1cm4gdGhpcy5fbGluZXNbdC5zdGFydExpbmVOdW1iZXItMV0uc3Vic3RyaW5nKHQuc3RhcnRDb2x1bW4tMSx0LmVuZENvbHVtbi0xKTtjb25zdCBuPXRoaXMuX2VvbCxzPXQuc3RhcnRMaW5lTnVtYmVyLTEscj10LmVuZExpbmVOdW1iZXItMSxpPVtdO2kucHVzaCh0aGlzLl9saW5lc1tzXS5zdWJzdHJpbmcodC5zdGFydENvbHVtbi0xKSk7Zm9yKGxldCBvPXMrMTtvPHI7bysrKWkucHVzaCh0aGlzLl9saW5lc1tvXSk7cmV0dXJuIGkucHVzaCh0aGlzLl9saW5lc1tyXS5zdWJzdHJpbmcoMCx0LmVuZENvbHVtbi0xKSksaS5qb2luKG4pfW9mZnNldEF0KHQpe3JldHVybiB0PXRoaXMuX3ZhbGlkYXRlUG9zaXRpb24odCksdGhpcy5fZW5zdXJlTGluZVN0YXJ0cygpLHRoaXMuX2xpbmVTdGFydHMuZ2V0UHJlZml4U3VtKHQubGluZU51bWJlci0yKSsodC5jb2x1bW4tMSl9cG9zaXRpb25BdCh0KXt0PU1hdGguZmxvb3IodCksdD1NYXRoLm1heCgwLHQpLHRoaXMuX2Vuc3VyZUxpbmVTdGFydHMoKTtjb25zdCBuPXRoaXMuX2xpbmVTdGFydHMuZ2V0SW5kZXhPZih0KSxzPXRoaXMuX2xpbmVzW24uaW5kZXhdLmxlbmd0aDtyZXR1cm57bGluZU51bWJlcjoxK24uaW5kZXgsY29sdW1uOjErTWF0aC5taW4obi5yZW1haW5kZXIscyl9fV92YWxpZGF0ZVJhbmdlKHQpe2NvbnN0IG49dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjp0LnN0YXJ0TGluZU51bWJlcixjb2x1bW46dC5zdGFydENvbHVtbn0pLHM9dGhpcy5fdmFsaWRhdGVQb3NpdGlvbih7bGluZU51bWJlcjp0LmVuZExpbmVOdW1iZXIsY29sdW1uOnQuZW5kQ29sdW1ufSk7cmV0dXJuIG4ubGluZU51bWJlciE9PXQuc3RhcnRMaW5lTnVtYmVyfHxuLmNvbHVtbiE9PXQuc3RhcnRDb2x1bW58fHMubGluZU51bWJlciE9PXQuZW5kTGluZU51bWJlcnx8cy5jb2x1bW4hPT10LmVuZENvbHVtbj97c3RhcnRMaW5lTnVtYmVyOm4ubGluZU51bWJlcixzdGFydENvbHVtbjpuLmNvbHVtbixlbmRMaW5lTnVtYmVyOnMubGluZU51bWJlcixlbmRDb2x1bW46cy5jb2x1bW59OnR9X3ZhbGlkYXRlUG9zaXRpb24odCl7aWYoIVUuaXNJUG9zaXRpb24odCkpdGhyb3cgbmV3IEVycm9yKCJiYWQgcG9zaXRpb24iKTtsZXR7bGluZU51bWJlcjpuLGNvbHVtbjpzfT10LHI9ITE7aWYobjwxKW49MSxzPTEscj0hMDtlbHNlIGlmKG4+dGhpcy5fbGluZXMubGVuZ3RoKW49dGhpcy5fbGluZXMubGVuZ3RoLHM9dGhpcy5fbGluZXNbbi0xXS5sZW5ndGgrMSxyPSEwO2Vsc2V7Y29uc3QgaT10aGlzLl9saW5lc1tuLTFdLmxlbmd0aCsxO3M8MT8ocz0xLHI9ITApOnM+aSYmKHM9aSxyPSEwKX1yZXR1cm4gcj97bGluZU51bWJlcjpuLGNvbHVtbjpzfTp0fX1jb25zdCBxdD1jbGFzcyBxdHtjb25zdHJ1Y3Rvcigpe3RoaXMuX3dvcmtlclRleHRNb2RlbFN5bmNTZXJ2ZXI9bmV3IHkxfWRpc3Bvc2UoKXt9X2dldE1vZGVsKHQpe3JldHVybiB0aGlzLl93b3JrZXJUZXh0TW9kZWxTeW5jU2VydmVyLmdldE1vZGVsKHQpfV9nZXRNb2RlbHMoKXtyZXR1cm4gdGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci5nZXRNb2RlbHMoKX0kYWNjZXB0TmV3TW9kZWwodCl7dGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci4kYWNjZXB0TmV3TW9kZWwodCl9JGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pe3RoaXMuX3dvcmtlclRleHRNb2RlbFN5bmNTZXJ2ZXIuJGFjY2VwdE1vZGVsQ2hhbmdlZCh0LG4pfSRhY2NlcHRSZW1vdmVkTW9kZWwodCl7dGhpcy5fd29ya2VyVGV4dE1vZGVsU3luY1NlcnZlci4kYWNjZXB0UmVtb3ZlZE1vZGVsKHQpfWFzeW5jICRjb21wdXRlVW5pY29kZUhpZ2hsaWdodHModCxuLHMpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7cmV0dXJuIHI/VGEuY29tcHV0ZVVuaWNvZGVIaWdobGlnaHRzKHIsbixzKTp7cmFuZ2VzOltdLGhhc01vcmU6ITEsYW1iaWd1b3VzQ2hhcmFjdGVyQ291bnQ6MCxpbnZpc2libGVDaGFyYWN0ZXJDb3VudDowLG5vbkJhc2ljQXNjaWlDaGFyYWN0ZXJDb3VudDowfX1hc3luYyAkZmluZFNlY3Rpb25IZWFkZXJzKHQsbil7Y29uc3Qgcz10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gcz9MMShzLG4pOltdfWFzeW5jICRjb21wdXRlRGlmZih0LG4scyxyKXtjb25zdCBpPXRoaXMuX2dldE1vZGVsKHQpLG89dGhpcy5fZ2V0TW9kZWwobik7cmV0dXJuIWl8fCFvP251bGw6UHQuY29tcHV0ZURpZmYoaSxvLHMscil9c3RhdGljIGNvbXB1dGVEaWZmKHQsbixzLHIpe2NvbnN0IGk9cj09PSJhZHZhbmNlZCI/VXIuZ2V0RGVmYXVsdCgpOlVyLmdldExlZ2FjeSgpLG89dC5nZXRMaW5lc0NvbnRlbnQoKSxsPW4uZ2V0TGluZXNDb250ZW50KCksdT1pLmNvbXB1dGVEaWZmKG8sbCxzKSxjPXUuY2hhbmdlcy5sZW5ndGg+MD8hMTp0aGlzLl9tb2RlbHNBcmVJZGVudGljYWwodCxuKTtmdW5jdGlvbiBmKGgpe3JldHVybiBoLm1hcChkPT5bZC5vcmlnaW5hbC5zdGFydExpbmVOdW1iZXIsZC5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGQubW9kaWZpZWQuc3RhcnRMaW5lTnVtYmVyLGQubW9kaWZpZWQuZW5kTGluZU51bWJlckV4Y2x1c2l2ZSxkLmlubmVyQ2hhbmdlcz8ubWFwKG09PlttLm9yaWdpbmFsUmFuZ2Uuc3RhcnRMaW5lTnVtYmVyLG0ub3JpZ2luYWxSYW5nZS5zdGFydENvbHVtbixtLm9yaWdpbmFsUmFuZ2UuZW5kTGluZU51bWJlcixtLm9yaWdpbmFsUmFuZ2UuZW5kQ29sdW1uLG0ubW9kaWZpZWRSYW5nZS5zdGFydExpbmVOdW1iZXIsbS5tb2RpZmllZFJhbmdlLnN0YXJ0Q29sdW1uLG0ubW9kaWZpZWRSYW5nZS5lbmRMaW5lTnVtYmVyLG0ubW9kaWZpZWRSYW5nZS5lbmRDb2x1bW5dKV0pfXJldHVybntpZGVudGljYWw6YyxxdWl0RWFybHk6dS5oaXRUaW1lb3V0LGNoYW5nZXM6Zih1LmNoYW5nZXMpLG1vdmVzOnUubW92ZXMubWFwKGg9PltoLmxpbmVSYW5nZU1hcHBpbmcub3JpZ2luYWwuc3RhcnRMaW5lTnVtYmVyLGgubGluZVJhbmdlTWFwcGluZy5vcmlnaW5hbC5lbmRMaW5lTnVtYmVyRXhjbHVzaXZlLGgubGluZVJhbmdlTWFwcGluZy5tb2RpZmllZC5zdGFydExpbmVOdW1iZXIsaC5saW5lUmFuZ2VNYXBwaW5nLm1vZGlmaWVkLmVuZExpbmVOdW1iZXJFeGNsdXNpdmUsZihoLmNoYW5nZXMpXSl9fXN0YXRpYyBfbW9kZWxzQXJlSWRlbnRpY2FsKHQsbil7Y29uc3Qgcz10LmdldExpbmVDb3VudCgpLHI9bi5nZXRMaW5lQ291bnQoKTtpZihzIT09cilyZXR1cm4hMTtmb3IobGV0IGk9MTtpPD1zO2krKyl7Y29uc3Qgbz10LmdldExpbmVDb250ZW50KGkpLGw9bi5nZXRMaW5lQ29udGVudChpKTtpZihvIT09bClyZXR1cm4hMX1yZXR1cm4hMH1hc3luYyAkY29tcHV0ZU1vcmVNaW5pbWFsRWRpdHModCxuLHMpe2NvbnN0IHI9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIXIpcmV0dXJuIG47Y29uc3QgaT1bXTtsZXQgbztuPW4uc2xpY2UoMCkuc29ydCgodSxjKT0+e2lmKHUucmFuZ2UmJmMucmFuZ2UpcmV0dXJuIGsuY29tcGFyZVJhbmdlc1VzaW5nU3RhcnRzKHUucmFuZ2UsYy5yYW5nZSk7Y29uc3QgZj11LnJhbmdlPzA6MSxoPWMucmFuZ2U/MDoxO3JldHVybiBmLWh9KTtsZXQgbD0wO2ZvcihsZXQgdT0xO3U8bi5sZW5ndGg7dSsrKWsuZ2V0RW5kUG9zaXRpb24obltsXS5yYW5nZSkuZXF1YWxzKGsuZ2V0U3RhcnRQb3NpdGlvbihuW3VdLnJhbmdlKSk/KG5bbF0ucmFuZ2U9ay5mcm9tUG9zaXRpb25zKGsuZ2V0U3RhcnRQb3NpdGlvbihuW2xdLnJhbmdlKSxrLmdldEVuZFBvc2l0aW9uKG5bdV0ucmFuZ2UpKSxuW2xdLnRleHQrPW5bdV0udGV4dCk6KGwrKyxuW2xdPW5bdV0pO24ubGVuZ3RoPWwrMTtmb3IobGV0e3JhbmdlOnUsdGV4dDpjLGVvbDpmfW9mIG4pe2lmKHR5cGVvZiBmPT0ibnVtYmVyIiYmKG89Ziksay5pc0VtcHR5KHUpJiYhYyljb250aW51ZTtjb25zdCBoPXIuZ2V0VmFsdWVJblJhbmdlKHUpO2lmKGM9Yy5yZXBsYWNlKC9cclxufFxufFxyL2csci5lb2wpLGg9PT1jKWNvbnRpbnVlO2lmKE1hdGgubWF4KGMubGVuZ3RoLGgubGVuZ3RoKT5QdC5fZGlmZkxpbWl0KXtpLnB1c2goe3JhbmdlOnUsdGV4dDpjfSk7Y29udGludWV9Y29uc3QgZD1yYShoLGMscyksbT1yLm9mZnNldEF0KGsubGlmdCh1KS5nZXRTdGFydFBvc2l0aW9uKCkpO2Zvcihjb25zdCBnIG9mIGQpe2NvbnN0IGI9ci5wb3NpdGlvbkF0KG0rZy5vcmlnaW5hbFN0YXJ0KSx4PXIucG9zaXRpb25BdChtK2cub3JpZ2luYWxTdGFydCtnLm9yaWdpbmFsTGVuZ3RoKSx2PXt0ZXh0OmMuc3Vic3RyKGcubW9kaWZpZWRTdGFydCxnLm1vZGlmaWVkTGVuZ3RoKSxyYW5nZTp7c3RhcnRMaW5lTnVtYmVyOmIubGluZU51bWJlcixzdGFydENvbHVtbjpiLmNvbHVtbixlbmRMaW5lTnVtYmVyOngubGluZU51bWJlcixlbmRDb2x1bW46eC5jb2x1bW59fTtyLmdldFZhbHVlSW5SYW5nZSh2LnJhbmdlKSE9PXYudGV4dCYmaS5wdXNoKHYpfX1yZXR1cm4gdHlwZW9mIG89PSJudW1iZXIiJiZpLnB1c2goe2VvbDpvLHRleHQ6IiIscmFuZ2U6e3N0YXJ0TGluZU51bWJlcjowLHN0YXJ0Q29sdW1uOjAsZW5kTGluZU51bWJlcjowLGVuZENvbHVtbjowfX0pLGl9YXN5bmMgJGNvbXB1dGVMaW5rcyh0KXtjb25zdCBuPXRoaXMuX2dldE1vZGVsKHQpO3JldHVybiBuP3VhKG4pOm51bGx9YXN5bmMgJGNvbXB1dGVEZWZhdWx0RG9jdW1lbnRDb2xvcnModCl7Y29uc3Qgbj10aGlzLl9nZXRNb2RlbCh0KTtyZXR1cm4gbj94MShuKTpudWxsfWFzeW5jICR0ZXh0dWFsU3VnZ2VzdCh0LG4scyxyKXtjb25zdCBpPW5ldyBtdCxvPW5ldyBSZWdFeHAocyxyKSxsPW5ldyBTZXQ7ZTpmb3IoY29uc3QgdSBvZiB0KXtjb25zdCBjPXRoaXMuX2dldE1vZGVsKHUpO2lmKGMpe2Zvcihjb25zdCBmIG9mIGMud29yZHMobykpaWYoIShmPT09bnx8IWlzTmFOKE51bWJlcihmKSkpJiYobC5hZGQoZiksbC5zaXplPlB0Ll9zdWdnZXN0aW9uc0xpbWl0KSlicmVhayBlfX1yZXR1cm57d29yZHM6QXJyYXkuZnJvbShsKSxkdXJhdGlvbjppLmVsYXBzZWQoKX19YXN5bmMgJGNvbXB1dGVXb3JkUmFuZ2VzKHQsbixzLHIpe2NvbnN0IGk9dGhpcy5fZ2V0TW9kZWwodCk7aWYoIWkpcmV0dXJuIE9iamVjdC5jcmVhdGUobnVsbCk7Y29uc3Qgbz1uZXcgUmVnRXhwKHMsciksbD1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgdT1uLnN0YXJ0TGluZU51bWJlcjt1PG4uZW5kTGluZU51bWJlcjt1Kyspe2NvbnN0IGM9aS5nZXRMaW5lV29yZHModSxvKTtmb3IoY29uc3QgZiBvZiBjKXtpZighaXNOYU4oTnVtYmVyKGYud29yZCkpKWNvbnRpbnVlO2xldCBoPWxbZi53b3JkXTtofHwoaD1bXSxsW2Yud29yZF09aCksaC5wdXNoKHtzdGFydExpbmVOdW1iZXI6dSxzdGFydENvbHVtbjpmLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6dSxlbmRDb2x1bW46Zi5lbmRDb2x1bW59KX19cmV0dXJuIGx9YXN5bmMgJG5hdmlnYXRlVmFsdWVTZXQodCxuLHMscixpKXtjb25zdCBvPXRoaXMuX2dldE1vZGVsKHQpO2lmKCFvKXJldHVybiBudWxsO2NvbnN0IGw9bmV3IFJlZ0V4cChyLGkpO24uc3RhcnRDb2x1bW49PT1uLmVuZENvbHVtbiYmKG49e3N0YXJ0TGluZU51bWJlcjpuLnN0YXJ0TGluZU51bWJlcixzdGFydENvbHVtbjpuLnN0YXJ0Q29sdW1uLGVuZExpbmVOdW1iZXI6bi5lbmRMaW5lTnVtYmVyLGVuZENvbHVtbjpuLmVuZENvbHVtbisxfSk7Y29uc3QgdT1vLmdldFZhbHVlSW5SYW5nZShuKSxjPW8uZ2V0V29yZEF0UG9zaXRpb24oe2xpbmVOdW1iZXI6bi5zdGFydExpbmVOdW1iZXIsY29sdW1uOm4uc3RhcnRDb2x1bW59LGwpO2lmKCFjKXJldHVybiBudWxsO2NvbnN0IGY9by5nZXRWYWx1ZUluUmFuZ2UoYyk7cmV0dXJuIGNuLklOU1RBTkNFLm5hdmlnYXRlVmFsdWVTZXQobix1LGMsZixzKX19O3F0Ll9kaWZmTGltaXQ9MWU1LHF0Ll9zdWdnZXN0aW9uc0xpbWl0PTFlNDtsZXQgRW49cXQ7Y2xhc3MgUHQgZXh0ZW5kcyBFbntjb25zdHJ1Y3Rvcih0LG4pe3N1cGVyKCksdGhpcy5faG9zdD10LHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5PW4sdGhpcy5fZm9yZWlnbk1vZHVsZT1udWxsfWFzeW5jICRwaW5nKCl7cmV0dXJuInBvbmcifSRsb2FkRm9yZWlnbk1vZHVsZSh0LG4scyl7Y29uc3Qgbz17aG9zdDpBYShzLChsLHUpPT50aGlzLl9ob3N0LiRmaHIobCx1KSksZ2V0TWlycm9yTW9kZWxzOigpPT50aGlzLl9nZXRNb2RlbHMoKX07cmV0dXJuIHRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5Pyh0aGlzLl9mb3JlaWduTW9kdWxlPXRoaXMuX2ZvcmVpZ25Nb2R1bGVGYWN0b3J5KG8sbiksUHJvbWlzZS5yZXNvbHZlKGRyKHRoaXMuX2ZvcmVpZ25Nb2R1bGUpKSk6bmV3IFByb21pc2UoKGwsdSk9Pntjb25zdCBjPWY9Pnt0aGlzLl9mb3JlaWduTW9kdWxlPWYuY3JlYXRlKG8sbiksbChkcih0aGlzLl9mb3JlaWduTW9kdWxlKSl9O2ltcG9ydChgJHtZbi5hc0Jyb3dzZXJVcmkoYCR7dH0uanNgKS50b1N0cmluZyghMCl9YCkudGhlbihjKS5jYXRjaCh1KX0pfSRmbXIodCxuKXtpZighdGhpcy5fZm9yZWlnbk1vZHVsZXx8dHlwZW9mIHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0hPSJmdW5jdGlvbiIpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiTWlzc2luZyByZXF1ZXN0SGFuZGxlciBvciBtZXRob2Q6ICIrdCkpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2ZvcmVpZ25Nb2R1bGVbdF0uYXBwbHkodGhpcy5fZm9yZWlnbk1vZHVsZSxuKSl9Y2F0Y2gocyl7cmV0dXJuIFByb21pc2UucmVqZWN0KHMpfX19dHlwZW9mIGltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiImJihnbG9iYWxUaGlzLm1vbmFjbz13YSgpKTtsZXQgTW49ITE7ZnVuY3Rpb24gTTEoZSl7aWYoTW4pcmV0dXJuO01uPSEwO2NvbnN0IHQ9bmV3IHRhKG49PntnbG9iYWxUaGlzLnBvc3RNZXNzYWdlKG4pfSxuPT5uZXcgUHQoeG4uZ2V0Q2hhbm5lbChuKSxlKSk7Z2xvYmFsVGhpcy5vbm1lc3NhZ2U9bj0+e3Qub25tZXNzYWdlKG4uZGF0YSl9fWdsb2JhbFRoaXMub25tZXNzYWdlPWU9PntNbnx8TTEobnVsbCl9fSkoKTsK", m = (Z) => Uint8Array.from(atob(Z), (l) => l.charCodeAt(0)), d = typeof self < "u" && self.Blob && new Blob([m(c)], { type: "text/javascript;charset=utf-8" });
2
- function G(Z) {
3
- let l;
4
- try {
5
- if (l = d && (self.URL || self.webkitURL).createObjectURL(d), !l) throw "";
6
- const b = new Worker(l, {
7
- name: Z?.name
8
- });
9
- return b.addEventListener("error", () => {
10
- (self.URL || self.webkitURL).revokeObjectURL(l);
11
- }), b;
12
- } catch {
13
- return new Worker(
14
- "data:text/javascript;base64," + c,
15
- {
16
- name: Z?.name
17
- }
18
- );
19
- } finally {
20
- l && (self.URL || self.webkitURL).revokeObjectURL(l);
21
- }
22
- }
23
- export {
24
- G as default
25
- };