mbrr · data · 2.7c767379.chunk.js_60
{
"2.7c767379.chunk.js_60": "base64:bnMoKSl9LGUucHJvdG90eXBlLnNhZmVTdWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXNzZXQuaWQ9PT1lLmFzc2V0LmlkP3RoaXMuc3ViKGUpOnRoaXN9LGUucHJvdG90eXBlLnRvTm9uTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUb2tlbnMoKS5sdCgwKT90aGlzLmNsb25lV2l0aFRva2VucygwKTp0aGlzfSxlLnByb3RvdHlwZS5jbG9uZVdpdGhDb2lucz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUobmV3IG4uQmlnTnVtYmVyKHQpLHRoaXMuYXNzZXQpfSxlLnByb3RvdHlwZS5jbG9uZVdpdGhUb2tlbnM9ZnVuY3Rpb24odCl7dmFyIHI9ZS5fdG9rZW5zVG9Db2lucyh0LHRoaXMuYXNzZXQucHJlY2lzaW9uKTtyZXR1cm4gbmV3IGUocix0aGlzLmFzc2V0KX0sZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY29udmVydCh0aGlzLHQsaS50b0JpZ051bWJlcihyKSl9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnthc3NldElkOnRoaXMuYXNzZXQuaWQsdG9rZW5zOnRoaXMudG9Ub2tlbnMoKX19LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9Ub2tlbnMoKSsiICIrdGhpcy5hc3NldC5pZH0sZS5wcm90b3R5cGUuX21hdGNoQXNzZXRzPWZ1bmN0aW9uKGUpe2lmKHRoaXMuYXNzZXQuaWQhPT1lLmFzc2V0LmlkKXRocm93IG5ldyBFcnJvcigiWW91IGNhbm5vdCBhcHBseSBhcml0aG1ldGljIG9wZXJhdGlvbnMgdG8gTW9uZXkgY3JlYXRlZCB3aXRoIGRpZmZlcmVudCBhc3NldHMiKX0sZS5tYXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ3RlKHQpP2U6dH0pfSxlLm1pbj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sdGUodCk/ZTp0fSl9LGUuaXNNb25leT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV9LGUuY29udmVydD1mdW5jdGlvbih0LHIsaSl7aWYodC5hc3NldD09PXIpcmV0dXJuIHQ7dmFyIG89dC5hc3NldC5wcmVjaXNpb24tci5wcmVjaXNpb24sYT1uZXcgbi5CaWdOdW1iZXIoMTApLnBvdyhvKSxzPXQuZ2V0Q29pbnMoKS5tdWwoaSkuZGl2KGEpLnJvdW5kVG8oMCwxKS50b0ZpeGVkKCk7cmV0dXJuIG5ldyBlKG5ldyBuLkJpZ051bWJlcihzKSxyKX0sZS5mcm9tVG9rZW5zPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKGkudG9CaWdOdW1iZXIodCkubXVsKG5ldyBuLkJpZ051bWJlcigxMCkucG93KHIucHJlY2lzaW9uKSkscil9LGUuZnJvbUNvaW5zPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKHQscil9LGUuX3Rva2Vuc1RvQ29pbnM9ZnVuY3Rpb24odCxyKXt2YXIgaT1lLl9nZXREaXZpZGVyKHIpO3JldHVybiB0PW5ldyBuLkJpZ051bWJlcih0KS50b0ZpeGVkKHIpLG5ldyBuLkJpZ051bWJlcih0KS5tdWwoaSl9LGUuX2dldERpdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuLkJpZ051bWJlcigxMCkucG93KGUpfSxlfSgpO3QuTW9uZXk9b30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cig5MSksaT1yKDE2OSksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1lLl9nZXRNYXRjaGVyRGl2aWRlcihyLnByZWNpc2lvbkRpZmZlcmVuY2UpO3RoaXMucGFpcj1yLHRoaXMuX21hdGNoZXJDb2lucz10LHRoaXMuX3Rva2Vucz10aGlzLl9tYXRjaGVyQ29pbnMuZGl2KG4pfXJldHVybiBlLnByb3RvdHlwZS5nZXRNYXRjaGVyQ29pbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0Y2hlckNvaW5zLmNsb25lKCl9LGUucHJvdG90eXBlLmdldFRva2Vucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90b2tlbnMuY2xvbmUoKX0sZS5wcm90b3R5cGUudG9NYXRjaGVyQ29pbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0Y2hlckNvaW5zLnRvRml4ZWQoMCl9LGUucHJvdG90eXBlLnRvVG9rZW5zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2Vucy50b0ZpeGVkKHRoaXMucGFpci5wcmljZUFzc2V0LnByZWNpc2lvbil9LGUucHJvdG90eXBlLnRvRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2Vucy50b0Zvcm1hdCh0aGlzLnBhaXIucHJpY2VBc3NldC5wcmVjaXNpb24pfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57YW1vdW50QXNzZXRJZDp0aGlzLnBhaXIuYW1vdW50QXNzZXQuaWQscHJpY2VBc3NldElkOnRoaXMucGFpci5wcmljZUFzc2V0LmlkLHByaWNlVG9rZW5zOnRoaXMudG9Ub2tlbnMoKX19LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9Ub2tlbnMoKSsiICIrdGhpcy5wYWlyLmFtb3VudEFzc2V0LmlkKyIvIit0aGlzLnBhaXIucHJpY2VBc3NldC5pZH0sZS5mcm9tTWF0Y2hlckNvaW5zPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUuX2NoZWNrQW1vdW50KHQpLG5ldyBlKGkudG9CaWdOdW1iZXIodCkscil9LGUuZnJvbVRva2Vucz1mdW5jdGlvbih0LHIpe2UuX2NoZWNrQW1vdW50KHQpLHQ9aS50b0JpZ051bWJlcih0KS50b0ZpeGVkKHIucHJpY2VBc3NldC5wcmVjaXNpb24pO3ZhciBvPWUuX2dldE1hdGNoZXJEaXZpZGVyKHIucHJlY2lzaW9uRGlmZmVyZW5jZSk7cmV0dXJuIG5ldyBlKG5ldyBuLkJpZ051bWJlcih0KS5tdWwobykscil9LGUuX2dldE1hdGNoZXJEaXZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbi5CaWdOdW1iZXIoMTApLnBvdyh0KS5tdWwoZS5fTUFUQ0hFUl9TQ0FMRSl9LGUuaXNPcmRlclByaWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0sZS5fY2hlY2tBbW91bnQ9ZnVuY3Rpb24oZSl7aWYoIShbInN0cmluZyIsIm51bWJlciJdLmluY2x1ZGVzKHR5cGVvZiBlKXx8ZSBpbnN0YW5jZW9mIG4uQmlnTnVtYmVyKSl0aHJvdyBuZXcgRXJyb3IoIlBsZWFzZSB1c2Ugc3RyaW5ncyB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIE9yZGVyUHJpY2UiKX0sZS5fTUFUQ0hFUl9TQ0FMRT1uZXcgbi5CaWdOdW1iZXIoMTApLnBvdyg4KSxlfSgpO3QuT3JkZXJQcmljZT1vfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmFtb3VudEFzc2V0PWUsdGhpcy5wcmljZUFzc2V0PXQsdGhpcy5wcmVjaXNpb25EaWZmZXJlbmNlPXRoaXMucHJpY2VBc3NldC5wcmVjaXNpb24tdGhpcy5hbW91bnRBc3NldC5wcmVjaXNpb259cmV0dXJuIGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnthbW91bnRBc3NldDp0aGlzLmFtb3VudEFzc2V0LmlkLHByaWNlQXNzZXQ6dGhpcy5wcmljZUFzc2V0LmlkfX0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbW91bnRBc3NldCsiLyIrdGhpcy5wcmljZUFzc2V0fSxlLmlzQXNzZXRQYWlyPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0sZX0oKTt0LkFzc2V0UGFpcj1ufSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSxvKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ciksdm9pZCAwPT09aSYmKGk9bnVsbCksdm9pZCAwPT09byYmKG89ITEpLHtuYW1lOnIsZmllbGQ6bnx8cixvcHRpb25hbDpvLHByb2Nlc3NvcjppLHR5cGU6ZSxvcHRpb25hbERhdGE6dH19fTt0LnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gbigic3RyaW5nIil9LHQuYXNzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0SWQiKX0sdC5hc3NldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0TmFtZSIpfSx0LmFzc2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0RGVzY3JpcHRpb24iKX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIG4oInByZWNpc2lvbiIpfSx0Lm51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4gbigibnVtYmVyIil9LHQuYWRkcmVzcz1mdW5jdGlvbihlKXtyZXR1cm4gbigiYWRkcmVzcyIsZSl9LHQuYWxpYXNOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJhbGlhc05hbWUiLGUpfSx0LmFsaWFzT3JBZGRyZXNzPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJhbGlhc09yQWRkcmVzcyIsZSl9LHQubW9uZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oIm1vbmV5Iil9LHQubnVtYmVyTGlrZT1mdW5jdGlvbihlKXtyZXR1cm4gbigibnVtYmVyTGlrZSIpfSx0LmF0dGFjaG1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImF0dGFjaG1lbnQiKX0sdC5odHRwc1VybD1mdW5jdGlvbihlKXtyZXR1cm4gbigiaHR0cHNVcmwiKX0sdC50aW1lc3RhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oInRpbWVzdGFtcCIpfSx0Lm9yZGVyVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gbigib3JkZXJUeXBlIil9LHQuZnJvbURhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImZyb21EYXRhIil9LHQuYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4gbigiYm9vbGVhbiIpfSx0LnRyYW5zZmVycz1mdW5jdGlvbihlKXtyZXR1cm4gbigidHJhbnNmZXJzIixlKX0sdC5kYXRhPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJkYXRhIil9LHQuc2NyaXB0PWZ1bmN0aW9uKGUpe3JldHVybiBuKCJzY3JpcHQiKX0sdC5hc3NldF9zY3JpcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0X3NjcmlwdCIpfSx0LnJlcXVpcmVkPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJyZXF1aXJlZCIpfSx0LmNhbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImNhbGwiKX0sdC5wYXltZW50PWZ1bmN0aW9uKGUpe3JldHVybiBuKCJwYXltZW50Iil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MSxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbcl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cig4MCksbz1yKDM5NSksYT1yKDE2OCk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9by5nZXRWYWxpZGF0ZVNjaGVtYSh0KVtlLnR5cGVdLHM9ZS5kYXRhLnZlcnNpb258fE9iamVjdC5rZXlzKGkuU0lHTl9UWVBFU1tlLnR5cGVdLmdldEJ5dGVzKS5zb3J0KCkucG9wKCksdT1uKHt9LGEucHJlcGFyZS5zaWduU2NoZW1hKHIpKGUuZGF0YSksZS5kYXRhLHt2ZXJzaW9uOnMsdHlwZTplLnR5cGV9KSxjPWkuU0lHTl9UWVBFU1tlLnR5cGVdLnRvTm9kZXx8bnVsbCxmPWMmJmModSx0KXx8dTtyZXR1cm4gaS5TSUdOX1RZUEVTW2UudHlwZV0uZ2V0Qnl0ZXNbTnVtYmVyKHMpXShmKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX0pKHQscil9O3JldHVybiBmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LHIpLHQucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyKXx8dGhpcztyZXR1cm4gaS5jb2RlPW4sT2JqZWN0LnNldFByb3RvdHlwZU9mKGksdC5wcm90b3R5cGUpLGl9cmV0dXJuIG4odCxlKSx0fShFcnJvcik7dC5TaWduRXJyb3I9aX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIG49dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQscj0xLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tyXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7dShuLm5leHQoZSkpfWNhdGNoKHQpe28odCl9fWZ1bmN0aW9uIHMoZSl7dHJ5e3Uobi50aHJvdyhlKSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gdShlKXtlLmRvbmU/aShlLnZhbHVlKTpuZXcgcihmdW5jdGlvbih0KXt0KGUudmFsdWUpfSkudGhlbihhLHMpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfSxvPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZpWzBdKXRocm93IGlbMV07cmV0dXJuIGlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gbz17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMobyl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihvKXtpZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2E7KXRyeXtpZihyPTEsbiYmKGk9MiZvWzBdP24ucmV0dXJuOm9bMF0/bi50aHJvd3x8KChpPW4ucmV0dXJuKSYmaS5jYWxsKG4pLDApOm4ubmV4dCkmJiEoaT1pLmNhbGwobixvWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gobj0wLGkmJihvPVsyJm9bMF0saS52YWx1ZV0pLG9bMF0pe2Nhc2UgMDpjYXNlIDE6aT1vO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpvWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKyssbj1vWzFdLG89WzBdO2NvbnRpbnVlO2Nhc2UgNzpvPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKSYmKDY9PT1vWzBdfHwyPT09b1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09b1swXSYmKCFpfHxvWzFdPmlbMF0mJm9bMV08aVszXSkpe2EubGFiZWw9b1sxXTticmVha31pZig2PT09b1swXSYmYS5sYWJlbDxpWzFdKXthLmxhYmVsPWlbMV0saT1vO2JyZWFrfWlmKGkmJmEubGFiZWw8aVsyXSl7YS5sYWJlbD1pWzJdLGEub3BzLnB1c2gobyk7YnJlYWt9aVsyXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfW89dC5jYWxsKGUsYSl9Y2F0Y2gocyl7bz1bNixzXSxuPTB9ZmluYWxseXtyPWk9MH1pZig1Jm9bMF0pdGhyb3cgb1sxXTtyZXR1cm57dmFsdWU6b1swXT9vWzFdOnZvaWQgMCxkb25lOiEwfX0oW28sc10pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyKDcxNCk7dmFyIGE9cig5MzIpLHM9cig5MzQpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3RoaXMucmVhZHk9ITEsdGhpcy5fbmV0d29ya0NvZGU9bnVsbD09ZS5uZXR3b3JrQ29kZT84NzplLm5ldHdvcmtDb2RlLHRoaXMuX3dhdmVzTGliUHJvbWlzZT1udWxsLHRoaXMuX2luaXRUcmFuc3BvcnRQcm9taXNlPW51bGwsdGhpcy5fZGVidWc9bnVsbCE9ZS5kZWJ1ZyYmZS5kZWJ1Zyx0aGlzLl9vcGVuVGltZW91dD1lLm9wZW5UaW1lb3V0LHRoaXMuX2xpc3RlblRpbWVvdXQ9ZS5saXN0ZW5UaW1lb3V0LHRoaXMuX2V4Y2hhbmdlVGltZW91dD1lLmV4Y2hhbmdlVGltZW91dCx0aGlzLl9lcnJvcj1udWxsLHRoaXMuX3RyYW5zcG9ydD1lLnRyYW5zcG9ydHx8cy5kZWZhdWx0LHRoaXMudHJ5Q29ubmVjdCgpfXJldHVybiB0LnByb3RvdHlwZS50cnlDb25uZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOnJldHVybiBlPXRoaXMuZGlzY29ubmVjdCgpLHRoaXMuX2luaXRVMkZUcmFuc3BvcnQoKSx0aGlzLl9zZXRTZXR0aW5ncygpLHRoaXMuX2luaXRXYXZlc0xpYigpLFs0LGVdO2Nhc2UgMTpyZXR1cm4gdC5zZW50KCksWzQsUHJvbWlzZS5hbGwoW3RoaXMuX2luaXRUcmFuc3BvcnRQcm9taXNlLHRoaXMuX3dhdmVzTGliUHJvbWlzZV0pXTtjYXNlIDI6cmV0dXJuIHQuc2VudCgpLFsyXX19KX0pfSx0LnByb3RvdHlwZS5kaXNjb25uZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOmlmKGU9dGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2UsdGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2U9bnVsbCx0aGlzLl93YXZlc0xpYlByb21pc2U9bnVsbCwhZSlyZXR1cm5bMyw0XTt0LmxhYmVsPTE7Y2FzZSAxOnJldHVybiB0LnRyeXMucHVzaChbMSwzLCw0XSksWzQsZV07Y2FzZSAyOnJldHVybiB0LnNlbnQoKS5jbG9zZSgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gdC5zZW50KCksWzMsNF07Y2FzZSA0OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5nZXRUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKGUpe3N3aXRjaChlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGUudHJ5cy5wdXNoKFswLDIsLDVdKSxbNCx0aGlzLl93YXZlc0xpYlByb21pc2VdO2Nhc2UgMTpyZXR1cm5bMixlLnNlbnQoKV07Y2FzZSAyOnJldHVybiBlLnNlbnQoKSxbNCx0aGlzLnRyeUNvbm5lY3QoKV07Y2FzZSAzOnJldHVybiBlLnNlbnQoKSxbNCx0aGlzLl93YXZlc0xpYlByb21pc2VdO2Nhc2UgNDpyZXR1cm5bMixlLnNlbnQoKV07Y2FzZSA1OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5nZXRVc2VyRGF0YUJ5SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHQscixpLGE7cmV0dXJuIG8odGhpcyxmdW5jdGlvbihvKXtzd2l0Y2goby5sYWJlbCl7Y2FzZSAwOnJldHVybiBvLnRyeXMucHVzaChbMCwzLCw0XSksWzQsdGhpcy5nZXRUcmFuc3BvcnQoKV07Y2FzZSAxOnJldHVybiB0PW8uc2VudCgpLHI9dGhpcy5nZXRQYXRoQnlJZChlKSxbNCx0LmdldFdhbGxldFB1YmxpY0tleShyLCExKV07Y2FzZSAyOnJldHVybiBpPW8uc2VudCgpLFsyLG4oe30saSx7aWQ6ZSxwYXRoOnJ9KV07Y2FzZSAzOnRocm93IGE9by5zZW50KCksdGhpcy50cnlDb25uZWN0KCksdGhpcy5fZXJyb3I9YSxhO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sdC5wcm90b3R5cGUuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlO3JldHVybiBvKHRoaXMsZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdC50cnlzLnB1c2goWzAsMywsNF0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMTpyZXR1cm5bNCx0LnNlbnQoKS5nZXRWZXJzaW9uKCldO2Nhc2UgMjpyZXR1cm5bMix0LnNlbnQoKV07Y2FzZSAzOnRocm93IGU9dC5zZW50KCksdGhpcy50cnlDb25uZWN0KCksdGhpcy5fZXJyb3I9ZSxlO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sdC5wcm90b3R5cGUuZ2V0UGFnaW5hdGlvblVzZXJzRGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciByLG4saSxhO3JldHVybiBvKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpyPVtdLG8ubGFiZWw9MTtjYXNlIDE6by50cnlzLnB1c2goWzEsNiwsN10pLG49ZSxvLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBuPD1lK3Q/WzQsdGhpcy5nZXRVc2VyRGF0YUJ5SWQobildOlszLDVdO2Nhc2UgMzppPW8uc2VudCgpLHIucHVzaChpKSxvLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBuKyssWzMsMl07Y2FzZSA1OnJldHVyblszLDddO2Nhc2UgNjp0aHJvdyBhPW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPWEsYTtjYXNlIDc6cmV0dXJuWzIscl19fSl9KX0sdC5wcm90b3R5cGUuc2lnblRyYW5zYWN0aW9uPWZ1bmN0aW9uKHQscixuLGEpe3JldHVybiB2b2lkIDA9PT1hJiYoYT0yKSxpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBpLHMsdTtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6aT10aGlzLmdldFBhdGhCeUlkKHQpLHM9bmV3IGUobiksby5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gby50cnlzLnB1c2goWzEsNCwsNV0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMjpyZXR1cm5bNCxvLnNlbnQoKS5zaWduVHJhbnNhY3Rpb24oaSxyLnByZWNpc2lvbixzLGEpXTtjYXNlIDM6cmV0dXJuWzIsby5zZW50KCldO2Nhc2UgNDp0aHJvdyB1PW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPXUsdTtjYXNlIDU6cmV0dXJuWzJdfX0pfSl9LHQucHJvdG90eXBlLnNpZ25PcmRlcj1mdW5jdGlvbih0LHIsbil7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGksYSxzO3JldHVybiBvKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDppPXRoaXMuZ2V0UGF0aEJ5SWQodCksYT1uZXcgZShuKSxvLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBvLnRyeXMucHVzaChbMSw0LCw1XSksWzQsdGhpcy5nZXRUcmFuc3BvcnQoKV07Y2FzZSAyOnJldHVybls0LG8uc2VudCgpLnNpZ25PcmRlcihpLHIucHJlY2lzaW9uLGEpXTtjYXNlIDM6cmV0dXJuWzIsby5zZW50KCldO2Nhc2UgNDp0aHJvdyBzPW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPXMscztjYXNlIDU6cmV0dXJuWzJdfX0pfSl9LHQucHJvdG90eXBlLnNpZ25Tb21lRGF0YT1mdW5jdGlvbih0LHIpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuLGksYTtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6bj10aGlzLmdldFBhdGhCeUlkKHQpLGk9bmV3IGUociksby5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gby50cnlzLnB1c2goWzEsNCwsNV0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMjpyZXR1cm5bNCxvLnNlbnQoKS5zaWduU29tZURhdGEobixpKV07Y2FzZSAzOnJldHVyblsyLG8uc2VudCgpXTtjYXNlIDQ6dGhyb3cgYT1vLnNlbnQoKSx0aGlzLnRyeUNvbm5lY3QoKSx0aGlzLl9lcnJvcj1hLGE7Y2FzZSA1OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5zaWduUmVxdWVzdD1mdW5jdGlvbih0LHIpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuLGksYTtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6bj10aGlzLmdldFBhdGhCeUlkKHQpLGk9bmV3IGUociksby5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gby50cnlzLnB1c2goWzEsNCwsNV0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMjpyZXR1cm5bNCxvLnNlbnQoKS5zaWduUmVxdWVzdChuLGkpXTtjYXNlIDM6cmV0dXJuWzIsby5zZW50KCldO2Nhc2UgNDp0aHJvdyBhPW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPWEsYTtjYXNlIDU6cmV0dXJuWzJdfX0pfSl9LHQucHJvdG90eXBlLnNpZ25NZXNzYWdlPWZ1bmN0aW9uKHQscil7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG4saSxhO3JldHVybiBvKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpuPXRoaXMuZ2V0UGF0aEJ5SWQodCksaT1uZXcgZShyLCJhc2NpaSIpLG8ubGFiZWw9MTtjYXNlIDE6cmV0dXJuIG8udHJ5cy5wdXNoKFsxLDQsLDVdKSxbNCx0aGlzLmdldFRyYW5zcG9ydCgpXTtjYXNlIDI6cmV0dXJuWzQsby5zZW50KCkuc2lnbk1lc3NhZ2UobixpKV07Y2FzZSAzOnJldHVyblsyLG8uc2VudCgpXTtjYXNlIDQ6dGhyb3cgYT1vLnNlbnQoKSx0aGlzLnRyeUNvbm5lY3QoKSx0aGlzLl9lcnJvcj1hLGE7Y2FzZSA1OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5nZXRMYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXJyb3J9LHQucHJvdG90eXBlLnByb2JlRGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnJlYWR5P1szLDJdOls0LHRoaXMudHJ5Q29ubmVjdCgpXTtjYXNlIDE6dC5zZW50KCksdC5sYWJlbD0yO2Nhc2UgMjp0aGlzLl9lcnJvcj1udWxsLHQubGFiZWw9MztjYXNlIDM6cmV0dXJuIHQudHJ5cy5wdXNoKFszLDUsLDZdKSxbNCx0aGlzLmdldFVzZXJEYXRhQnlJZCgxKV07Y2FzZSA0OnJldHVybiB0LnNlbnQoKSxbMyw2XTtjYXNlIDU6cmV0dXJuIGU9dC5zZW50KCksdGhpcy5fZXJyb3I9ZSxbMiwhMV07Y2FzZSA2OnJldHVyblsyLCEwXX19KX0pfSx0LnByb3RvdHlwZS5nZXRQYXRoQnlJZD1mdW5jdGlvbihlKXtyZXR1cm4iNDQnLzU3NDE1NjQnLzAnLzAnLyIrZSsiJyJ9LHQucHJvdG90eXBlLl9zZXRTZXR0aW5ncz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2UudGhlbihmdW5jdGlvbih0KXt0LnNldERlYnVnTW9kZShlLl9kZWJ1ZyksdC5zZXRFeGNoYW5nZVRpbWVvdXQoZS5fZXhjaGFuZ2VUaW1lb3V0KX0pfSx0LnByb3RvdHlwZS5faW5pdFUyRlRyYW5zcG9ydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWR5PSExLHRoaXMuX2luaXRUcmFuc3BvcnRQcm9taXNlPXRoaXMuX3RyYW5zcG9ydC5jcmVhdGUodGhpcy5fb3BlblRpbWVvdXQsdGhpcy5fbGlzdGVuVGltZW91dCksdGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2V9LHQucHJvdG90eXBlLl9pbml0V2F2ZXNMaWI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl93YXZlc0xpYlByb21pc2U9dGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2UudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5yZWFkeT0hMCxuZXcgYS5XYXZlcyh0LGUuX25ldHdvcmtDb2RlKX0pLHRoaXMuX3dhdmVzTGliUHJvbWlzZX0sdH0oKTt0LldhdmVzTGVkZ2VyPXUsdC5kZWZhdWx0PXV9KS5jYWxsKHRoaXMscigxOCkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDcxNSk7dmFyIG4saT0obj1yKDkxOSkpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTtpLmRlZmF1bHQuX2JhYmVsUG9seWZpbGwmJiJ1bmRlZmluZWQiIT09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJAYmFiZWwvcG9seWZpbGwgaXMgbG9hZGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoaXMgcGFnZS4gVGhpcyBpcyBwcm9iYWJseSBub3QgZGVzaXJhYmxlL2ludGVuZGVkIGFuZCBtYXkgaGF2ZSBjb25zZXF1ZW5jZXMgaWYgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBwb2x5ZmlsbHMgYXJlIGFwcGxpZWQgc2VxdWVudGlhbGx5LiBJZiB5b3UgZG8gbmVlZCB0byBsb2FkIHRoZSBwb2x5ZmlsbCBtb3JlIHRoYW4gb25jZSwgdXNlIEBiYWJlbC9wb2x5ZmlsbC9ub0NvbmZsaWN0IGluc3RlYWQgdG8gYnlwYXNzIHRoZSB3YXJuaW5nLiIpLGkuZGVmYXVsdC5fYmFiZWxQb2x5ZmlsbD0hMH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDcxNikscig3MjQpLHIoNzM2KSxyKDczOCkscig3NDIpLHIoNzUzKSxyKDQyMSkscig3NTQpLHIoODk2KSxyKDg5OCkscig5MDEpLHIoOTAzKSxyKDkwNSkscig5MDcpLHIoOTA5KSxyKDkxMSkscig5MTMpLHIoOTE1KSxyKDkxNykscigzOTEpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig0MDApLGk9cig3MTcpLG89cig2OSksYT1yKDMzKTtmb3IodmFyIHMgaW4gbil7dmFyIHU9YVtzXSxjPXUmJnUucHJvdG90eXBlO2lmKGMmJmMuZm9yRWFjaCE9PWkpdHJ5e28oYywiZm9yRWFjaCIsaSl9Y2F0Y2goZil7Yy5mb3JFYWNoPWl9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1bXS5mb3JFYWNoLGk9cig3MTgpKDApLG89cig3MjMpKCJmb3JFYWNoIik7ZS5leHBvcnRzPW8/ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcyxlLGFyZ3VtZW50c1sxXSl9Om59LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDE3MSksaT1yKDIzOCksbz1yKDE3MiksYT1yKDI0MCkscz1yKDcyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MT09ZSx1PTI9PWUsYz0zPT1lLGY9ND09ZSxsPTY9PWUsaD01PT1lfHxsLHA9dHx8cztyZXR1cm4gZnVuY3Rpb24odCxzLGQpe2Zvcih2YXIgeSxnLHY9byh0KSxtPWkodiksYj1uKHMsZCwzKSxfPWEobS5sZW5ndGgpLFM9MCxFPXI/cCh0LF8pOnU/cCh0LDApOnZvaWQgMDtfPlM7UysrKWlmKChofHxTIGluIG0pJiYoZz1iKHk9bVtTXSxTLHYpLGUpKWlmKHIpRVtTXT1nO2Vsc2UgaWYoZylzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4geTtjYXNlIDY6cmV0dXJuIFM7Y2FzZSAyOkUucHVzaCh5KX1lbHNlIGlmKGYpcmV0dXJuITE7cmV0dXJuIGw/LTE6Y3x8Zj9mOkV9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKFN0cmluZyhlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig5MiksaT1yKDcyMSksbz1yKDUzKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBpKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHI9ZS5jb25zdHJ1Y3Rvcil8fHIhPT1BcnJheSYmIWkoci5wcm90b3R5cGUpP24ocikmJm51bGw9PT0ocj1yW29dKSYmKHI9dm9pZCAwKTpyPXZvaWQgMCksbmV3KHZvaWQgMD09PXI/QXJyYXk6cikoMD09PXQ/MDp0KX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDEwNyk7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJBcnJheSI9PW4oZSl9fSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPSFyKDY4KShmdW5jdGlvbigpe3JldHVybiFTdHJpbmcoU3ltYm9sKCkpfSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig2OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9W11bZV07cmV0dXJuIXJ8fCFuKGZ1bmN0aW9uKCl7ci5jYWxsKG51bGwsdHx8ZnVuY3Rpb24oKXt0aHJvdyAxfSwxKX0pfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNDAwKSxpPXIoNDAzKSxvPXIoMzMpLGE9cig2OSkscz1yKDUzKSx1PXMoIml0ZXJhdG9yIiksYz1zKCJ0b1N0cmluZ1RhZyIpLGY9aS52YWx1ZXM7Zm9yKHZhciBsIGluIG4pe3ZhciBoPW9bbF0scD1oJiZoLnByb3RvdHlwZTtpZihwKXtpZihwW3VdIT09Zil0cnl7YShwLHUsZil9Y2F0Y2goeSl7cFt1XT1mfWlmKHBbY118fGEocCxjLGwpLG5bbF0pZm9yKHZhciBkIGluIGkpaWYocFtkXSE9PWlbZF0pdHJ5e2EocCxkLGlbZF0pfWNhdGNoKHkpe3BbZF09aVtkXX19fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNTMpKCJ1bnNjb3BhYmxlcyIpLGk9cig0MDQpLG89cig2OSksYT1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT1hW25dJiZvKGEsbixpKG51bGwpKSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7YVtuXVtlXT0hMH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDE3NiksaT1yKDI0MCksbz1yKDcyNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsYSl7dmFyIHMsdT1uKHQpLGM9aSh1Lmxlbmd0aCksZj1vKGEsYyk7aWYoZSYmciE9cil7Zm9yKDtjPmY7KWlmKChzPXVbZisrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO2M+ZjtmKyspaWYoKGV8fGYgaW4gdSkmJnVbZl09PT1yKXJldHVybiBlfHxmfHwwO3JldHVybiFlJiYtMX19fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigyNDEpLGk9TWF0aC5tYXgsbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/aShyK3QsMCk6byhyLHQpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNDA5KSxpPXIoMzMpLldlYWtNYXA7ZS5leHBvcnRzPSJmdW5jdGlvbiI9PT10eXBlb2YgaSYmL25hdGl2ZSBjb2RlLy50ZXN0KG4uY2FsbChpKSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDU3KSxpPXIoNzMwKSxvPXIoMjQ4KSxhPXIoMTQwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9aSh0KSxzPWEuZix1PW8uZixjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBmPXJbY107bihlLGYpfHxzKGUsZix1KHQsZikpfX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczMSksaT1yKDQxMiksbz1yKDgxKSxhPXIoMzMpLlJlZmxlY3Q7ZS5leHBvcnRzPWEmJmEub3duS2V5c3x8ZnVuY3Rpb24oZSl7dmFyIHQ9bi5mKG8oZSkpLHI9aS5mO3JldHVybiByP3QuY29uY2F0KHIoZSkpOnR9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig0MDcpLGk9cigyNDYpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gbihlLGkpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNjgpLGk9LyN8XC5wcm90b3R5cGVcLi8sbz1mdW5jdGlvbihlLHQpe3ZhciByPXNbYShlKV07cmV0dXJuIHI9PWN8fHIhPXUmJigiZnVuY3Rpb24iPT10eXBlb2YgdD9uKHQpOiEhdCl9LGE9by5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKGksIi4iKS50b0xvd2VyQ2FzZSgpfSxzPW8uZGF0YT17fSx1PW8uTkFUSVZFPSJOIixjPW8uUE9MWUZJTEw9IlAiO2UuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPSFyKDY4KShmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBlKSE9PWUucHJvdG90eXBlfSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczNSk7ZS5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciBlLHQ9ITEscj17fTt0cnl7KGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpLmNhbGwocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goaSl7fXJldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBuKHIsaSksdD9lLmNhbGwocixpKTpyLl9fcHJvdG9fXz1pLHJ9fSgpOnZvaWQgMCl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDkyKSxpPXIoODEpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGkoZSksIW4odCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3Qgc2V0ICIrU3RyaW5nKHQpKyIgYXMgYSBwcm90b3R5cGUiKX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDIpLGk9cigyNTApO24obi5HK24uQix7c2V0SW1tZWRpYXRlOmkuc2V0LGNsZWFySW1tZWRpYXRlOmkuY2xlYXJ9KX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDE3OCkoIm5hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmciLEZ1bmN0aW9uLnRvU3RyaW5nKX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNzM5KSxpPXIoMzMpLnByb2Nlc3Msbz0icHJvY2VzcyI9PXIoMTA3KShpKTtyKDE0Mykoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLG5vVGFyZ2V0R2V0OiEwfSx7cXVldWVNaWNyb3Rhc2s6ZnVuY3Rpb24oZSl7dmFyIHQ9byYmaS5kb21haW47bih0P3QuYmluZChlKTplKX19KX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGksbyxhLHMsdSxjLGY9cigzMyksbD1yKDI0OCkuZixoPXIoMTA3KSxwPXIoNzQwKS5zZXQsZD1yKDc0MSkseT1mLk11dGF0aW9uT2JzZXJ2ZXJ8fGYuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixnPWYucHJvY2Vzcyx2PWYuUHJvbWlzZSxtPSJwcm9jZXNzIj09aChnKSxiPWwoZiwicXVldWVNaWNyb3Rhc2siKSxfPWImJmIudmFsdWU7X3x8KG49ZnVuY3Rpb24oKXt2YXIgZSx0O2ZvcihtJiYoZT1nLmRvbWFpbikmJmUuZXhpdCgpO2k7KXt0PWkuZm4saT1pLm5leHQ7dHJ5e3QoKX1jYXRjaChyKXt0aHJvdyBpP2EoKTpvPXZvaWQgMCxyfX1vPXZvaWQgMCxlJiZlLmVudGVyKCl9LG0/YT1mdW5jdGlvbigpe2cubmV4dFRpY2sobil9OnkmJiEvKGlQaG9uZXxpUG9kfGlQYWQpLipBcHBsZVdlYktpdC9pLnRlc3QoZCk/KHM9ITAsdT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksbmV3IHkobikub2JzZXJ2ZSh1LHtjaGFyYWN0ZXJEYXRhOiEwfSksYT1mdW5jdGlvbigpe3UuZGF0YT1zPSFzfSk6diYmdi5yZXNvbHZlPyhjPXYucmVzb2x2ZSh2b2lkIDApLGE9ZnVuY3Rpb24oKXtjLnRoZW4obil9KTphPWZ1bmN0aW9uKCl7cC5jYWxsKGYsbil9KSxlLmV4cG9ydHM9X3x8ZnVuY3Rpb24oZSl7dmFyIHQ9e2ZuOmUsbmV4dDp2b2lkIDB9O28mJihvLm5leHQ9dCksaXx8KGk9dCxhKCkpLG89dH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG8sYT1yKDMzKSxzPXIoMTA3KSx1PXIoMTcxKSxjPXIoNDA4KSxmPXIoMjQzKSxsPWEuc2V0SW1tZWRpYXRlLGg9YS5jbGVhckltbWVkaWF0ZSxwPWEucHJvY2VzcyxkPWEuTWVzc2FnZUNoYW5uZWwseT1hLkRpc3BhdGNoLGc9MCx2PXt9LG09ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KGUpKXt2YXIgdD12W2VdO2RlbGV0ZSB2W2VdLHQoKX19LGI9ZnVuY3Rpb24oZSl7bS5jYWxsKGUuZGF0YSl9O2wmJmh8fChsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyl0LnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrZ109ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkuYXBwbHkodm9pZCAwLHQpfSxuKGcpLGd9LGg9ZnVuY3Rpb24oZSl7ZGVsZXRlIHZbZV19LCJwcm9jZXNzIj09cyhwKT9uPWZ1bmN0aW9uKGUpe3AubmV4dFRpY2sodShtLGUsMSkpfTp5JiZ5Lm5vdz9uPWZ1bmN0aW9uKGUpe3kubm93KHUobSxlLDEpKX06ZD8obz0oaT1uZXcgZCkucG9ydDIsaS5wb3J0MS5vbm1lc3NhZ2U9YixuPXUoby5wb3N0TWVzc2FnZSxvLDEpKTphLmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWEuaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sYS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiLCExKSk6bj0ib25yZWFkeXN0YXRlY2hhbmdlImluIGYoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2MuYXBwZW5kQ2hpbGQoZigic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVtb3ZlQ2hpbGQodGhpcyksbS5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dCh1KG0sZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0OmwsY2xlYXI6aH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDMzKS5uYXZpZ2F0b3I7ZS5leHBvcnRzPW4mJm4udXNlckFnZW50fHwiIn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDc0Myk7dmFyIG4saT1yKDEwOCksbz1yKDQxOSksYT1yKDMzKS5VUkwscz1yKDQwNSksdT1yKDE0NCksYz1yKDQyMCksZj1yKDU3KSxsPXIoNzQ0KSxoPXIoNzQ1KSxwPXIoNDE4KSxkPXIoNzUwKSx5PXIoNDIxKSxnPXkuVVJMU2VhcmNoUGFyYW1zLHY9eS5nZXRTdGF0ZSxtPXIoMTQyKSxiPW0uc2V0LF89bS5nZXR0ZXJGb3IoIlVSTCIpLFM9TWF0aC5wb3csRT0vW2EtekEtWl0vLHc9L1thLXpBLVowLTkrXC0uXS8sVD0vXGQvLEE9L14oMHh8MFgpLyxDPS9eWzAtN10rJC8seD0vXlxkKyQvLEk9L15bMC05QS1GYS1mXSskLyxrPS9cdTAwMDB8XHUwMDA5fFx1MDAwQXxcdTAwMER8XHUwMDIwfCN8JXxcL3w6fFw/fEB8XFt8XFx8XF0vLE89L1x1MDAwMHxcdTAwMDl8XHUwMDBBfFx1MDAwRHxcdTAwMjB8I3xcL3w6fFw/fEB8XFt8XFx8XF0vLE49L15bXHUwMDAwLVx1MDAxRlx1MDAyMF0rfFtcdTAwMDAtXHUwMDFGXHUwMDIwXSskL2csUD0vXHUwMDA5fFx1MDAwQXxcdTAwMEQvZyxSPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKCJbIj09dC5jaGFyQXQoMCkpe2lmKCJdIiE9dC5jaGFyQXQodC5sZW5ndGgtMSkpcmV0dXJuIkludmFsaWQgaG9zdCI7aWYoIShyPU0odC5zbGljZSgxLC0xKSkpKXJldHVybiJJbnZhbGlkIGhvc3QiO2UuaG9zdD1yfWVsc2UgaWYoSyhlKSl7aWYodD1kKHQpLGsudGVzdCh0KSlyZXR1cm4iSW52YWxpZCBob3N0IjtpZihudWxsPT09KHI9Qih0KSkpcmV0dXJuIkludmFsaWQgaG9zdCI7ZS5ob3N0PXJ9ZWxzZXtpZihPLnRlc3QodCkpcmV0dXJuIkludmFsaWQgaG9zdCI7Zm9yKHI9IiIsbj1oKHQpLGk9MDtpPG4ubGVuZ3RoO2krKylyKz1WKG5baV0sRCk7ZS5ob3N0PXJ9fSxCPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8sYSxzLHU9ZS5zcGxpdCgiLiIpO2lmKCIiPT11W3UubGVuZ3RoLTFdJiZ1Lmxlbmd0aCYmdS5wb3AoKSwodD11Lmxlbmd0aCk+NClyZXR1cm4gZTtmb3Iocj1bXSxuPTA7bjx0O24rKyl7aWYoIiI9PShpPXVbbl0pKXJldHVybiBlO2lmKG89MTAsaS5sZW5ndGg+MSYmIjAiPT1pLmNoYXJBdCgwKSYmKG89QS50ZXN0KGkpPzE2OjgsaT1pLnNsaWNlKDg9PW8/MToyKSksIiI9PT1pKWE9MDtlbHNle2lmKCEoMTA9PW8/eDo4PT1vP0M6SSkudGVzdChpKSlyZXR1cm4gZTthPXBhcnNlSW50KGksbyl9ci5wdXNoKGEpfWZvcihuPTA7bjx0O24rKylpZihhPXJbbl0sbj09dC0xKXtpZihhPj1TKDI1Niw1LXQpKXJldHVybiBudWxsfWVsc2UgaWYoYT4yNTUpcmV0dXJuIG51bGw7Zm9yKHM9ci5wb3AoKSxuPTA7bjxyLmxlbmd0aDtuKyspcys9cltuXSpTKDI1NiwzLW4pO3JldHVybiBzfSxNPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8sYSxzLHU9WzAsMCwwLDAsMCwwLDAsMF0sYz0wLGY9bnVsbCxsPTAsaD1mdW5jdGlvbigpe3JldHVybiBlLmNoYXJBdChsKX07aWYoIjoiPT1oKCkpe2lmKCI6IiE9ZS5jaGFyQXQoMSkpcmV0dXJuO2wrPTIsZj0rK2N9Zm9yKDtoKCk7KXtpZig4PT1jKXJldHVybjtpZigiOiIhPWgoKSl7Zm9yKHQ9cj0wO3I8NCYmSS50ZXN0KGgoKSk7KXQ9MTYqdCtwYXJzZUludChoKCksMTYpLGwrKyxyKys7aWYoIi4iPT1oKCkpe2lmKDA9PXIpcmV0dXJuO2lmKGwtPXIsYz42KXJldHVybjtmb3Iobj0wO2goKTspe2lmKGk9bnVsbCxuPjApe2lmKCEoIi4iPT1oKCkmJm48NCkpcmV0dXJuO2wrK31pZighVC50ZXN0KGgoKSkpcmV0dXJuO2Zvcig7VC50ZXN0KGgoKSk7KXtpZihvPXBhcnNlSW50KGgoKSwxMCksbnVsbD09PWkpaT1vO2Vsc2V7aWYoMD09aSlyZXR1cm47aT0xMCppK299aWYoaT4yNTUpcmV0dXJuO2wrK311W2NdPTI1Nip1W2NdK2ksMiE9KytuJiY0IT1ufHxjKyt9aWYoNCE9bilyZXR1cm47YnJlYWt9aWYoIjoiPT1oKCkpe2lmKGwrKywhaCgpKXJldHVybn1lbHNlIGlmKGgoKSlyZXR1cm47dVtjKytdPXR9ZWxzZXtpZihudWxsIT09ZilyZXR1cm47bCsrLGY9KytjfX1pZihudWxsIT09Zilmb3IoYT1jLWYsYz03OzAhPWMmJmE+MDspcz11W2NdLHVbYy0tXT11W2Y="
}
Changelog:
{
"2020.04.17 15:43": "base64:bnMoKSl9LGUucHJvdG90eXBlLnNhZmVTdWI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXNzZXQuaWQ9PT1lLmFzc2V0LmlkP3RoaXMuc3ViKGUpOnRoaXN9LGUucHJvdG90eXBlLnRvTm9uTmVnYXRpdmU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRUb2tlbnMoKS5sdCgwKT90aGlzLmNsb25lV2l0aFRva2VucygwKTp0aGlzfSxlLnByb3RvdHlwZS5jbG9uZVdpdGhDb2lucz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUobmV3IG4uQmlnTnVtYmVyKHQpLHRoaXMuYXNzZXQpfSxlLnByb3RvdHlwZS5jbG9uZVdpdGhUb2tlbnM9ZnVuY3Rpb24odCl7dmFyIHI9ZS5fdG9rZW5zVG9Db2lucyh0LHRoaXMuYXNzZXQucHJlY2lzaW9uKTtyZXR1cm4gbmV3IGUocix0aGlzLmFzc2V0KX0sZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY29udmVydCh0aGlzLHQsaS50b0JpZ051bWJlcihyKSl9LGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnthc3NldElkOnRoaXMuYXNzZXQuaWQsdG9rZW5zOnRoaXMudG9Ub2tlbnMoKX19LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9Ub2tlbnMoKSsiICIrdGhpcy5hc3NldC5pZH0sZS5wcm90b3R5cGUuX21hdGNoQXNzZXRzPWZ1bmN0aW9uKGUpe2lmKHRoaXMuYXNzZXQuaWQhPT1lLmFzc2V0LmlkKXRocm93IG5ldyBFcnJvcigiWW91IGNhbm5vdCBhcHBseSBhcml0aG1ldGljIG9wZXJhdGlvbnMgdG8gTW9uZXkgY3JlYXRlZCB3aXRoIGRpZmZlcmVudCBhc3NldHMiKX0sZS5tYXg9ZnVuY3Rpb24oKXtmb3IodmFyIGU9W10sdD0wO3Q8YXJndW1lbnRzLmxlbmd0aDt0KyspZVt0XT1hcmd1bWVudHNbdF07cmV0dXJuIGUucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuZ3RlKHQpP2U6dH0pfSxlLm1pbj1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSx0PTA7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyllW3RdPWFyZ3VtZW50c1t0XTtyZXR1cm4gZS5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5sdGUodCk/ZTp0fSl9LGUuaXNNb25leT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGV9LGUuY29udmVydD1mdW5jdGlvbih0LHIsaSl7aWYodC5hc3NldD09PXIpcmV0dXJuIHQ7dmFyIG89dC5hc3NldC5wcmVjaXNpb24tci5wcmVjaXNpb24sYT1uZXcgbi5CaWdOdW1iZXIoMTApLnBvdyhvKSxzPXQuZ2V0Q29pbnMoKS5tdWwoaSkuZGl2KGEpLnJvdW5kVG8oMCwxKS50b0ZpeGVkKCk7cmV0dXJuIG5ldyBlKG5ldyBuLkJpZ051bWJlcihzKSxyKX0sZS5mcm9tVG9rZW5zPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKGkudG9CaWdOdW1iZXIodCkubXVsKG5ldyBuLkJpZ051bWJlcigxMCkucG93KHIucHJlY2lzaW9uKSkscil9LGUuZnJvbUNvaW5zPWZ1bmN0aW9uKHQscil7cmV0dXJuIG5ldyBlKHQscil9LGUuX3Rva2Vuc1RvQ29pbnM9ZnVuY3Rpb24odCxyKXt2YXIgaT1lLl9nZXREaXZpZGVyKHIpO3JldHVybiB0PW5ldyBuLkJpZ051bWJlcih0KS50b0ZpeGVkKHIpLG5ldyBuLkJpZ051bWJlcih0KS5tdWwoaSl9LGUuX2dldERpdmlkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBuLkJpZ051bWJlcigxMCkucG93KGUpfSxlfSgpO3QuTW9uZXk9b30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIG49cig5MSksaT1yKDE2OSksbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt2YXIgbj1lLl9nZXRNYXRjaGVyRGl2aWRlcihyLnByZWNpc2lvbkRpZmZlcmVuY2UpO3RoaXMucGFpcj1yLHRoaXMuX21hdGNoZXJDb2lucz10LHRoaXMuX3Rva2Vucz10aGlzLl9tYXRjaGVyQ29pbnMuZGl2KG4pfXJldHVybiBlLnByb3RvdHlwZS5nZXRNYXRjaGVyQ29pbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0Y2hlckNvaW5zLmNsb25lKCl9LGUucHJvdG90eXBlLmdldFRva2Vucz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl90b2tlbnMuY2xvbmUoKX0sZS5wcm90b3R5cGUudG9NYXRjaGVyQ29pbnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWF0Y2hlckNvaW5zLnRvRml4ZWQoMCl9LGUucHJvdG90eXBlLnRvVG9rZW5zPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2Vucy50b0ZpeGVkKHRoaXMucGFpci5wcmljZUFzc2V0LnByZWNpc2lvbil9LGUucHJvdG90eXBlLnRvRm9ybWF0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Rva2Vucy50b0Zvcm1hdCh0aGlzLnBhaXIucHJpY2VBc3NldC5wcmVjaXNpb24pfSxlLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57YW1vdW50QXNzZXRJZDp0aGlzLnBhaXIuYW1vdW50QXNzZXQuaWQscHJpY2VBc3NldElkOnRoaXMucGFpci5wcmljZUFzc2V0LmlkLHByaWNlVG9rZW5zOnRoaXMudG9Ub2tlbnMoKX19LGUucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9Ub2tlbnMoKSsiICIrdGhpcy5wYWlyLmFtb3VudEFzc2V0LmlkKyIvIit0aGlzLnBhaXIucHJpY2VBc3NldC5pZH0sZS5mcm9tTWF0Y2hlckNvaW5zPWZ1bmN0aW9uKHQscil7cmV0dXJuIGUuX2NoZWNrQW1vdW50KHQpLG5ldyBlKGkudG9CaWdOdW1iZXIodCkscil9LGUuZnJvbVRva2Vucz1mdW5jdGlvbih0LHIpe2UuX2NoZWNrQW1vdW50KHQpLHQ9aS50b0JpZ051bWJlcih0KS50b0ZpeGVkKHIucHJpY2VBc3NldC5wcmVjaXNpb24pO3ZhciBvPWUuX2dldE1hdGNoZXJEaXZpZGVyKHIucHJlY2lzaW9uRGlmZmVyZW5jZSk7cmV0dXJuIG5ldyBlKG5ldyBuLkJpZ051bWJlcih0KS5tdWwobykscil9LGUuX2dldE1hdGNoZXJEaXZpZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbi5CaWdOdW1iZXIoMTApLnBvdyh0KS5tdWwoZS5fTUFUQ0hFUl9TQ0FMRSl9LGUuaXNPcmRlclByaWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0sZS5fY2hlY2tBbW91bnQ9ZnVuY3Rpb24oZSl7aWYoIShbInN0cmluZyIsIm51bWJlciJdLmluY2x1ZGVzKHR5cGVvZiBlKXx8ZSBpbnN0YW5jZW9mIG4uQmlnTnVtYmVyKSl0aHJvdyBuZXcgRXJyb3IoIlBsZWFzZSB1c2Ugc3RyaW5ncyB0byBjcmVhdGUgaW5zdGFuY2VzIG9mIE9yZGVyUHJpY2UiKX0sZS5fTUFUQ0hFUl9TQ0FMRT1uZXcgbi5CaWdOdW1iZXIoMTApLnBvdyg4KSxlfSgpO3QuT3JkZXJQcmljZT1vfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmFtb3VudEFzc2V0PWUsdGhpcy5wcmljZUFzc2V0PXQsdGhpcy5wcmVjaXNpb25EaWZmZXJlbmNlPXRoaXMucHJpY2VBc3NldC5wcmVjaXNpb24tdGhpcy5hbW91bnRBc3NldC5wcmVjaXNpb259cmV0dXJuIGUucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnthbW91bnRBc3NldDp0aGlzLmFtb3VudEFzc2V0LmlkLHByaWNlQXNzZXQ6dGhpcy5wcmljZUFzc2V0LmlkfX0sZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbW91bnRBc3NldCsiLyIrdGhpcy5wcmljZUFzc2V0fSxlLmlzQXNzZXRQYWlyPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZX0sZX0oKTt0LkFzc2V0UGFpcj1ufSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj1mdW5jdGlvbihlLHQpe3JldHVybiBmdW5jdGlvbihyLG4saSxvKXtyZXR1cm4gdm9pZCAwPT09biYmKG49ciksdm9pZCAwPT09aSYmKGk9bnVsbCksdm9pZCAwPT09byYmKG89ITEpLHtuYW1lOnIsZmllbGQ6bnx8cixvcHRpb25hbDpvLHByb2Nlc3NvcjppLHR5cGU6ZSxvcHRpb25hbERhdGE6dH19fTt0LnN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gbigic3RyaW5nIil9LHQuYXNzZXQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0SWQiKX0sdC5hc3NldE5hbWU9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0TmFtZSIpfSx0LmFzc2V0RGVzY3JpcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0RGVzY3JpcHRpb24iKX0sdC5wcmVjaXNpb249ZnVuY3Rpb24oZSl7cmV0dXJuIG4oInByZWNpc2lvbiIpfSx0Lm51bWJlcj1mdW5jdGlvbihlKXtyZXR1cm4gbigibnVtYmVyIil9LHQuYWRkcmVzcz1mdW5jdGlvbihlKXtyZXR1cm4gbigiYWRkcmVzcyIsZSl9LHQuYWxpYXNOYW1lPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJhbGlhc05hbWUiLGUpfSx0LmFsaWFzT3JBZGRyZXNzPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJhbGlhc09yQWRkcmVzcyIsZSl9LHQubW9uZXk9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oIm1vbmV5Iil9LHQubnVtYmVyTGlrZT1mdW5jdGlvbihlKXtyZXR1cm4gbigibnVtYmVyTGlrZSIpfSx0LmF0dGFjaG1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImF0dGFjaG1lbnQiKX0sdC5odHRwc1VybD1mdW5jdGlvbihlKXtyZXR1cm4gbigiaHR0cHNVcmwiKX0sdC50aW1lc3RhbXA9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oInRpbWVzdGFtcCIpfSx0Lm9yZGVyVHlwZT1mdW5jdGlvbihlKXtyZXR1cm4gbigib3JkZXJUeXBlIil9LHQuZnJvbURhdGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImZyb21EYXRhIil9LHQuYm9vbGVhbj1mdW5jdGlvbihlKXtyZXR1cm4gbigiYm9vbGVhbiIpfSx0LnRyYW5zZmVycz1mdW5jdGlvbihlKXtyZXR1cm4gbigidHJhbnNmZXJzIixlKX0sdC5kYXRhPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJkYXRhIil9LHQuc2NyaXB0PWZ1bmN0aW9uKGUpe3JldHVybiBuKCJzY3JpcHQiKX0sdC5hc3NldF9zY3JpcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImFzc2V0X3NjcmlwdCIpfSx0LnJlcXVpcmVkPWZ1bmN0aW9uKGUpe3JldHVybiBuKCJyZXF1aXJlZCIpfSx0LmNhbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oImNhbGwiKX0sdC5wYXltZW50PWZ1bmN0aW9uKGUpe3JldHVybiBuKCJwYXltZW50Iil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXRoaXMmJnRoaXMuX19hc3NpZ258fGZ1bmN0aW9uKCl7cmV0dXJuKG49T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MSxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylmb3IodmFyIGkgaW4gdD1hcmd1bWVudHNbcl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsaSkmJihlW2ldPXRbaV0pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIGk9cig4MCksbz1yKDM5NSksYT1yKDE2OCk7dC5kZWZhdWx0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9by5nZXRWYWxpZGF0ZVNjaGVtYSh0KVtlLnR5cGVdLHM9ZS5kYXRhLnZlcnNpb258fE9iamVjdC5rZXlzKGkuU0lHTl9UWVBFU1tlLnR5cGVdLmdldEJ5dGVzKS5zb3J0KCkucG9wKCksdT1uKHt9LGEucHJlcGFyZS5zaWduU2NoZW1hKHIpKGUuZGF0YSksZS5kYXRhLHt2ZXJzaW9uOnMsdHlwZTplLnR5cGV9KSxjPWkuU0lHTl9UWVBFU1tlLnR5cGVdLnRvTm9kZXx8bnVsbCxmPWMmJmModSx0KXx8dTtyZXR1cm4gaS5TSUdOX1RZUEVTW2UudHlwZV0uZ2V0Qnl0ZXNbTnVtYmVyKHMpXShmKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49dGhpcyYmdGhpcy5fX2V4dGVuZHN8fGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxyKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIgaW4gdCl0Lmhhc093blByb3BlcnR5KHIpJiYoZVtyXT10W3JdKX0pKHQscil9O3JldHVybiBmdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LHIpLHQucHJvdG90eXBlPW51bGw9PT1yP09iamVjdC5jcmVhdGUocik6KG4ucHJvdG90eXBlPXIucHJvdG90eXBlLG5ldyBuKX19KCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciBpPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocixuKXt2YXIgaT1lLmNhbGwodGhpcyxyKXx8dGhpcztyZXR1cm4gaS5jb2RlPW4sT2JqZWN0LnNldFByb3RvdHlwZU9mKGksdC5wcm90b3R5cGUpLGl9cmV0dXJuIG4odCxlKSx0fShFcnJvcik7dC5TaWduRXJyb3I9aX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7dmFyIG49dGhpcyYmdGhpcy5fX2Fzc2lnbnx8ZnVuY3Rpb24oKXtyZXR1cm4obj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQscj0xLG49YXJndW1lbnRzLmxlbmd0aDtyPG47cisrKWZvcih2YXIgaSBpbiB0PWFyZ3VtZW50c1tyXSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxpKSYmKGVbaV09dFtpXSk7cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBuZXcocnx8KHI9UHJvbWlzZSkpKGZ1bmN0aW9uKGksbyl7ZnVuY3Rpb24gYShlKXt0cnl7dShuLm5leHQoZSkpfWNhdGNoKHQpe28odCl9fWZ1bmN0aW9uIHMoZSl7dHJ5e3Uobi50aHJvdyhlKSl9Y2F0Y2godCl7byh0KX19ZnVuY3Rpb24gdShlKXtlLmRvbmU/aShlLnZhbHVlKTpuZXcgcihmdW5jdGlvbih0KXt0KGUudmFsdWUpfSkudGhlbihhLHMpfXUoKG49bi5hcHBseShlLHR8fFtdKSkubmV4dCgpKX0pfSxvPXRoaXMmJnRoaXMuX19nZW5lcmF0b3J8fGZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpLG8sYT17bGFiZWw6MCxzZW50OmZ1bmN0aW9uKCl7aWYoMSZpWzBdKXRocm93IGlbMV07cmV0dXJuIGlbMV19LHRyeXM6W10sb3BzOltdfTtyZXR1cm4gbz17bmV4dDpzKDApLHRocm93OnMoMSkscmV0dXJuOnMoMil9LCJmdW5jdGlvbiI9PT10eXBlb2YgU3ltYm9sJiYob1tTeW1ib2wuaXRlcmF0b3JdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxvO2Z1bmN0aW9uIHMobyl7cmV0dXJuIGZ1bmN0aW9uKHMpe3JldHVybiBmdW5jdGlvbihvKXtpZihyKXRocm93IG5ldyBUeXBlRXJyb3IoIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy4iKTtmb3IoO2E7KXRyeXtpZihyPTEsbiYmKGk9MiZvWzBdP24ucmV0dXJuOm9bMF0/bi50aHJvd3x8KChpPW4ucmV0dXJuKSYmaS5jYWxsKG4pLDApOm4ubmV4dCkmJiEoaT1pLmNhbGwobixvWzFdKSkuZG9uZSlyZXR1cm4gaTtzd2l0Y2gobj0wLGkmJihvPVsyJm9bMF0saS52YWx1ZV0pLG9bMF0pe2Nhc2UgMDpjYXNlIDE6aT1vO2JyZWFrO2Nhc2UgNDpyZXR1cm4gYS5sYWJlbCsrLHt2YWx1ZTpvWzFdLGRvbmU6ITF9O2Nhc2UgNTphLmxhYmVsKyssbj1vWzFdLG89WzBdO2NvbnRpbnVlO2Nhc2UgNzpvPWEub3BzLnBvcCgpLGEudHJ5cy5wb3AoKTtjb250aW51ZTtkZWZhdWx0OmlmKCEoaT0oaT1hLnRyeXMpLmxlbmd0aD4wJiZpW2kubGVuZ3RoLTFdKSYmKDY9PT1vWzBdfHwyPT09b1swXSkpe2E9MDtjb250aW51ZX1pZigzPT09b1swXSYmKCFpfHxvWzFdPmlbMF0mJm9bMV08aVszXSkpe2EubGFiZWw9b1sxXTticmVha31pZig2PT09b1swXSYmYS5sYWJlbDxpWzFdKXthLmxhYmVsPWlbMV0saT1vO2JyZWFrfWlmKGkmJmEubGFiZWw8aVsyXSl7YS5sYWJlbD1pWzJdLGEub3BzLnB1c2gobyk7YnJlYWt9aVsyXSYmYS5vcHMucG9wKCksYS50cnlzLnBvcCgpO2NvbnRpbnVlfW89dC5jYWxsKGUsYSl9Y2F0Y2gocyl7bz1bNixzXSxuPTB9ZmluYWxseXtyPWk9MH1pZig1Jm9bMF0pdGhyb3cgb1sxXTtyZXR1cm57dmFsdWU6b1swXT9vWzFdOnZvaWQgMCxkb25lOiEwfX0oW28sc10pfX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxyKDcxNCk7dmFyIGE9cig5MzIpLHM9cig5MzQpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe3RoaXMucmVhZHk9ITEsdGhpcy5fbmV0d29ya0NvZGU9bnVsbD09ZS5uZXR3b3JrQ29kZT84NzplLm5ldHdvcmtDb2RlLHRoaXMuX3dhdmVzTGliUHJvbWlzZT1udWxsLHRoaXMuX2luaXRUcmFuc3BvcnRQcm9taXNlPW51bGwsdGhpcy5fZGVidWc9bnVsbCE9ZS5kZWJ1ZyYmZS5kZWJ1Zyx0aGlzLl9vcGVuVGltZW91dD1lLm9wZW5UaW1lb3V0LHRoaXMuX2xpc3RlblRpbWVvdXQ9ZS5saXN0ZW5UaW1lb3V0LHRoaXMuX2V4Y2hhbmdlVGltZW91dD1lLmV4Y2hhbmdlVGltZW91dCx0aGlzLl9lcnJvcj1udWxsLHRoaXMuX3RyYW5zcG9ydD1lLnRyYW5zcG9ydHx8cy5kZWZhdWx0LHRoaXMudHJ5Q29ubmVjdCgpfXJldHVybiB0LnByb3RvdHlwZS50cnlDb25uZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOnJldHVybiBlPXRoaXMuZGlzY29ubmVjdCgpLHRoaXMuX2luaXRVMkZUcmFuc3BvcnQoKSx0aGlzLl9zZXRTZXR0aW5ncygpLHRoaXMuX2luaXRXYXZlc0xpYigpLFs0LGVdO2Nhc2UgMTpyZXR1cm4gdC5zZW50KCksWzQsUHJvbWlzZS5hbGwoW3RoaXMuX2luaXRUcmFuc3BvcnRQcm9taXNlLHRoaXMuX3dhdmVzTGliUHJvbWlzZV0pXTtjYXNlIDI6cmV0dXJuIHQuc2VudCgpLFsyXX19KX0pfSx0LnByb3RvdHlwZS5kaXNjb25uZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOmlmKGU9dGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2UsdGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2U9bnVsbCx0aGlzLl93YXZlc0xpYlByb21pc2U9bnVsbCwhZSlyZXR1cm5bMyw0XTt0LmxhYmVsPTE7Y2FzZSAxOnJldHVybiB0LnRyeXMucHVzaChbMSwzLCw0XSksWzQsZV07Y2FzZSAyOnJldHVybiB0LnNlbnQoKS5jbG9zZSgpLFszLDRdO2Nhc2UgMzpyZXR1cm4gdC5zZW50KCksWzMsNF07Y2FzZSA0OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5nZXRUcmFuc3BvcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gaSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24oKXtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKGUpe3N3aXRjaChlLmxhYmVsKXtjYXNlIDA6cmV0dXJuIGUudHJ5cy5wdXNoKFswLDIsLDVdKSxbNCx0aGlzLl93YXZlc0xpYlByb21pc2VdO2Nhc2UgMTpyZXR1cm5bMixlLnNlbnQoKV07Y2FzZSAyOnJldHVybiBlLnNlbnQoKSxbNCx0aGlzLnRyeUNvbm5lY3QoKV07Y2FzZSAzOnJldHVybiBlLnNlbnQoKSxbNCx0aGlzLl93YXZlc0xpYlByb21pc2VdO2Nhc2UgNDpyZXR1cm5bMixlLnNlbnQoKV07Y2FzZSA1OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5nZXRVc2VyRGF0YUJ5SWQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIHQscixpLGE7cmV0dXJuIG8odGhpcyxmdW5jdGlvbihvKXtzd2l0Y2goby5sYWJlbCl7Y2FzZSAwOnJldHVybiBvLnRyeXMucHVzaChbMCwzLCw0XSksWzQsdGhpcy5nZXRUcmFuc3BvcnQoKV07Y2FzZSAxOnJldHVybiB0PW8uc2VudCgpLHI9dGhpcy5nZXRQYXRoQnlJZChlKSxbNCx0LmdldFdhbGxldFB1YmxpY0tleShyLCExKV07Y2FzZSAyOnJldHVybiBpPW8uc2VudCgpLFsyLG4oe30saSx7aWQ6ZSxwYXRoOnJ9KV07Y2FzZSAzOnRocm93IGE9by5zZW50KCksdGhpcy50cnlDb25uZWN0KCksdGhpcy5fZXJyb3I9YSxhO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sdC5wcm90b3R5cGUuZ2V0VmVyc2lvbj1mdW5jdGlvbigpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBlO3JldHVybiBvKHRoaXMsZnVuY3Rpb24odCl7c3dpdGNoKHQubGFiZWwpe2Nhc2UgMDpyZXR1cm4gdC50cnlzLnB1c2goWzAsMywsNF0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMTpyZXR1cm5bNCx0LnNlbnQoKS5nZXRWZXJzaW9uKCldO2Nhc2UgMjpyZXR1cm5bMix0LnNlbnQoKV07Y2FzZSAzOnRocm93IGU9dC5zZW50KCksdGhpcy50cnlDb25uZWN0KCksdGhpcy5fZXJyb3I9ZSxlO2Nhc2UgNDpyZXR1cm5bMl19fSl9KX0sdC5wcm90b3R5cGUuZ2V0UGFnaW5hdGlvblVzZXJzRGF0YT1mdW5jdGlvbihlLHQpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciByLG4saSxhO3JldHVybiBvKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpyPVtdLG8ubGFiZWw9MTtjYXNlIDE6by50cnlzLnB1c2goWzEsNiwsN10pLG49ZSxvLmxhYmVsPTI7Y2FzZSAyOnJldHVybiBuPD1lK3Q/WzQsdGhpcy5nZXRVc2VyRGF0YUJ5SWQobildOlszLDVdO2Nhc2UgMzppPW8uc2VudCgpLHIucHVzaChpKSxvLmxhYmVsPTQ7Y2FzZSA0OnJldHVybiBuKyssWzMsMl07Y2FzZSA1OnJldHVyblszLDddO2Nhc2UgNjp0aHJvdyBhPW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPWEsYTtjYXNlIDc6cmV0dXJuWzIscl19fSl9KX0sdC5wcm90b3R5cGUuc2lnblRyYW5zYWN0aW9uPWZ1bmN0aW9uKHQscixuLGEpe3JldHVybiB2b2lkIDA9PT1hJiYoYT0yKSxpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBpLHMsdTtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6aT10aGlzLmdldFBhdGhCeUlkKHQpLHM9bmV3IGUobiksby5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gby50cnlzLnB1c2goWzEsNCwsNV0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMjpyZXR1cm5bNCxvLnNlbnQoKS5zaWduVHJhbnNhY3Rpb24oaSxyLnByZWNpc2lvbixzLGEpXTtjYXNlIDM6cmV0dXJuWzIsby5zZW50KCldO2Nhc2UgNDp0aHJvdyB1PW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPXUsdTtjYXNlIDU6cmV0dXJuWzJdfX0pfSl9LHQucHJvdG90eXBlLnNpZ25PcmRlcj1mdW5jdGlvbih0LHIsbil7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGksYSxzO3JldHVybiBvKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDppPXRoaXMuZ2V0UGF0aEJ5SWQodCksYT1uZXcgZShuKSxvLmxhYmVsPTE7Y2FzZSAxOnJldHVybiBvLnRyeXMucHVzaChbMSw0LCw1XSksWzQsdGhpcy5nZXRUcmFuc3BvcnQoKV07Y2FzZSAyOnJldHVybls0LG8uc2VudCgpLnNpZ25PcmRlcihpLHIucHJlY2lzaW9uLGEpXTtjYXNlIDM6cmV0dXJuWzIsby5zZW50KCldO2Nhc2UgNDp0aHJvdyBzPW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPXMscztjYXNlIDU6cmV0dXJuWzJdfX0pfSl9LHQucHJvdG90eXBlLnNpZ25Tb21lRGF0YT1mdW5jdGlvbih0LHIpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuLGksYTtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6bj10aGlzLmdldFBhdGhCeUlkKHQpLGk9bmV3IGUociksby5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gby50cnlzLnB1c2goWzEsNCwsNV0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMjpyZXR1cm5bNCxvLnNlbnQoKS5zaWduU29tZURhdGEobixpKV07Y2FzZSAzOnJldHVyblsyLG8uc2VudCgpXTtjYXNlIDQ6dGhyb3cgYT1vLnNlbnQoKSx0aGlzLnRyeUNvbm5lY3QoKSx0aGlzLl9lcnJvcj1hLGE7Y2FzZSA1OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5zaWduUmVxdWVzdD1mdW5jdGlvbih0LHIpe3JldHVybiBpKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbigpe3ZhciBuLGksYTtyZXR1cm4gbyh0aGlzLGZ1bmN0aW9uKG8pe3N3aXRjaChvLmxhYmVsKXtjYXNlIDA6bj10aGlzLmdldFBhdGhCeUlkKHQpLGk9bmV3IGUociksby5sYWJlbD0xO2Nhc2UgMTpyZXR1cm4gby50cnlzLnB1c2goWzEsNCwsNV0pLFs0LHRoaXMuZ2V0VHJhbnNwb3J0KCldO2Nhc2UgMjpyZXR1cm5bNCxvLnNlbnQoKS5zaWduUmVxdWVzdChuLGkpXTtjYXNlIDM6cmV0dXJuWzIsby5zZW50KCldO2Nhc2UgNDp0aHJvdyBhPW8uc2VudCgpLHRoaXMudHJ5Q29ubmVjdCgpLHRoaXMuX2Vycm9yPWEsYTtjYXNlIDU6cmV0dXJuWzJdfX0pfSl9LHQucHJvdG90eXBlLnNpZ25NZXNzYWdlPWZ1bmN0aW9uKHQscil7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIG4saSxhO3JldHVybiBvKHRoaXMsZnVuY3Rpb24obyl7c3dpdGNoKG8ubGFiZWwpe2Nhc2UgMDpuPXRoaXMuZ2V0UGF0aEJ5SWQodCksaT1uZXcgZShyLCJhc2NpaSIpLG8ubGFiZWw9MTtjYXNlIDE6cmV0dXJuIG8udHJ5cy5wdXNoKFsxLDQsLDVdKSxbNCx0aGlzLmdldFRyYW5zcG9ydCgpXTtjYXNlIDI6cmV0dXJuWzQsby5zZW50KCkuc2lnbk1lc3NhZ2UobixpKV07Y2FzZSAzOnJldHVyblsyLG8uc2VudCgpXTtjYXNlIDQ6dGhyb3cgYT1vLnNlbnQoKSx0aGlzLnRyeUNvbm5lY3QoKSx0aGlzLl9lcnJvcj1hLGE7Y2FzZSA1OnJldHVyblsyXX19KX0pfSx0LnByb3RvdHlwZS5nZXRMYXN0RXJyb3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXJyb3J9LHQucHJvdG90eXBlLnByb2JlRGV2aWNlPWZ1bmN0aW9uKCl7cmV0dXJuIGkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKCl7dmFyIGU7cmV0dXJuIG8odGhpcyxmdW5jdGlvbih0KXtzd2l0Y2godC5sYWJlbCl7Y2FzZSAwOnJldHVybiB0aGlzLnJlYWR5P1szLDJdOls0LHRoaXMudHJ5Q29ubmVjdCgpXTtjYXNlIDE6dC5zZW50KCksdC5sYWJlbD0yO2Nhc2UgMjp0aGlzLl9lcnJvcj1udWxsLHQubGFiZWw9MztjYXNlIDM6cmV0dXJuIHQudHJ5cy5wdXNoKFszLDUsLDZdKSxbNCx0aGlzLmdldFVzZXJEYXRhQnlJZCgxKV07Y2FzZSA0OnJldHVybiB0LnNlbnQoKSxbMyw2XTtjYXNlIDU6cmV0dXJuIGU9dC5zZW50KCksdGhpcy5fZXJyb3I9ZSxbMiwhMV07Y2FzZSA2OnJldHVyblsyLCEwXX19KX0pfSx0LnByb3RvdHlwZS5nZXRQYXRoQnlJZD1mdW5jdGlvbihlKXtyZXR1cm4iNDQnLzU3NDE1NjQnLzAnLzAnLyIrZSsiJyJ9LHQucHJvdG90eXBlLl9zZXRTZXR0aW5ncz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2UudGhlbihmdW5jdGlvbih0KXt0LnNldERlYnVnTW9kZShlLl9kZWJ1ZyksdC5zZXRFeGNoYW5nZVRpbWVvdXQoZS5fZXhjaGFuZ2VUaW1lb3V0KX0pfSx0LnByb3RvdHlwZS5faW5pdFUyRlRyYW5zcG9ydD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWR5PSExLHRoaXMuX2luaXRUcmFuc3BvcnRQcm9taXNlPXRoaXMuX3RyYW5zcG9ydC5jcmVhdGUodGhpcy5fb3BlblRpbWVvdXQsdGhpcy5fbGlzdGVuVGltZW91dCksdGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2V9LHQucHJvdG90eXBlLl9pbml0V2F2ZXNMaWI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLl93YXZlc0xpYlByb21pc2U9dGhpcy5faW5pdFRyYW5zcG9ydFByb21pc2UudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gZS5yZWFkeT0hMCxuZXcgYS5XYXZlcyh0LGUuX25ldHdvcmtDb2RlKX0pLHRoaXMuX3dhdmVzTGliUHJvbWlzZX0sdH0oKTt0LldhdmVzTGVkZ2VyPXUsdC5kZWZhdWx0PXV9KS5jYWxsKHRoaXMscigxOCkuQnVmZmVyKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDcxNSk7dmFyIG4saT0obj1yKDkxOSkpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufTtpLmRlZmF1bHQuX2JhYmVsUG9seWZpbGwmJiJ1bmRlZmluZWQiIT09dHlwZW9mIGNvbnNvbGUmJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJAYmFiZWwvcG9seWZpbGwgaXMgbG9hZGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoaXMgcGFnZS4gVGhpcyBpcyBwcm9iYWJseSBub3QgZGVzaXJhYmxlL2ludGVuZGVkIGFuZCBtYXkgaGF2ZSBjb25zZXF1ZW5jZXMgaWYgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBwb2x5ZmlsbHMgYXJlIGFwcGxpZWQgc2VxdWVudGlhbGx5LiBJZiB5b3UgZG8gbmVlZCB0byBsb2FkIHRoZSBwb2x5ZmlsbCBtb3JlIHRoYW4gb25jZSwgdXNlIEBiYWJlbC9wb2x5ZmlsbC9ub0NvbmZsaWN0IGluc3RlYWQgdG8gYnlwYXNzIHRoZSB3YXJuaW5nLiIpLGkuZGVmYXVsdC5fYmFiZWxQb2x5ZmlsbD0hMH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDcxNikscig3MjQpLHIoNzM2KSxyKDczOCkscig3NDIpLHIoNzUzKSxyKDQyMSkscig3NTQpLHIoODk2KSxyKDg5OCkscig5MDEpLHIoOTAzKSxyKDkwNSkscig5MDcpLHIoOTA5KSxyKDkxMSkscig5MTMpLHIoOTE1KSxyKDkxNykscigzOTEpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig0MDApLGk9cig3MTcpLG89cig2OSksYT1yKDMzKTtmb3IodmFyIHMgaW4gbil7dmFyIHU9YVtzXSxjPXUmJnUucHJvdG90eXBlO2lmKGMmJmMuZm9yRWFjaCE9PWkpdHJ5e28oYywiZm9yRWFjaCIsaSl9Y2F0Y2goZil7Yy5mb3JFYWNoPWl9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1bXS5mb3JFYWNoLGk9cig3MTgpKDApLG89cig3MjMpKCJmb3JFYWNoIik7ZS5leHBvcnRzPW8/ZnVuY3Rpb24oZSl7cmV0dXJuIGkodGhpcyxlLGFyZ3VtZW50c1sxXSl9Om59LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDE3MSksaT1yKDIzOCksbz1yKDE3MiksYT1yKDI0MCkscz1yKDcyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9MT09ZSx1PTI9PWUsYz0zPT1lLGY9ND09ZSxsPTY9PWUsaD01PT1lfHxsLHA9dHx8cztyZXR1cm4gZnVuY3Rpb24odCxzLGQpe2Zvcih2YXIgeSxnLHY9byh0KSxtPWkodiksYj1uKHMsZCwzKSxfPWEobS5sZW5ndGgpLFM9MCxFPXI/cCh0LF8pOnU/cCh0LDApOnZvaWQgMDtfPlM7UysrKWlmKChofHxTIGluIG0pJiYoZz1iKHk9bVtTXSxTLHYpLGUpKWlmKHIpRVtTXT1nO2Vsc2UgaWYoZylzd2l0Y2goZSl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4geTtjYXNlIDY6cmV0dXJuIFM7Y2FzZSAyOkUucHVzaCh5KX1lbHNlIGlmKGYpcmV0dXJuITE7cmV0dXJuIGw/LTE6Y3x8Zj9mOkV9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgVHlwZUVycm9yKFN0cmluZyhlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig5MiksaT1yKDcyMSksbz1yKDUzKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByO3JldHVybiBpKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHI9ZS5jb25zdHJ1Y3Rvcil8fHIhPT1BcnJheSYmIWkoci5wcm90b3R5cGUpP24ocikmJm51bGw9PT0ocj1yW29dKSYmKHI9dm9pZCAwKTpyPXZvaWQgMCksbmV3KHZvaWQgMD09PXI/QXJyYXk6cikoMD09PXQ/MDp0KX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDEwNyk7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJBcnJheSI9PW4oZSl9fSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPSFyKDY4KShmdW5jdGlvbigpe3JldHVybiFTdHJpbmcoU3ltYm9sKCkpfSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig2OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHI9W11bZV07cmV0dXJuIXJ8fCFuKGZ1bmN0aW9uKCl7ci5jYWxsKG51bGwsdHx8ZnVuY3Rpb24oKXt0aHJvdyAxfSwxKX0pfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNDAwKSxpPXIoNDAzKSxvPXIoMzMpLGE9cig2OSkscz1yKDUzKSx1PXMoIml0ZXJhdG9yIiksYz1zKCJ0b1N0cmluZ1RhZyIpLGY9aS52YWx1ZXM7Zm9yKHZhciBsIGluIG4pe3ZhciBoPW9bbF0scD1oJiZoLnByb3RvdHlwZTtpZihwKXtpZihwW3VdIT09Zil0cnl7YShwLHUsZil9Y2F0Y2goeSl7cFt1XT1mfWlmKHBbY118fGEocCxjLGwpLG5bbF0pZm9yKHZhciBkIGluIGkpaWYocFtkXSE9PWlbZF0pdHJ5e2EocCxkLGlbZF0pfWNhdGNoKHkpe3BbZF09aVtkXX19fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNTMpKCJ1bnNjb3BhYmxlcyIpLGk9cig0MDQpLG89cig2OSksYT1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT1hW25dJiZvKGEsbixpKG51bGwpKSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7YVtuXVtlXT0hMH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDE3NiksaT1yKDI0MCksbz1yKDcyNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIsYSl7dmFyIHMsdT1uKHQpLGM9aSh1Lmxlbmd0aCksZj1vKGEsYyk7aWYoZSYmciE9cil7Zm9yKDtjPmY7KWlmKChzPXVbZisrXSkhPXMpcmV0dXJuITB9ZWxzZSBmb3IoO2M+ZjtmKyspaWYoKGV8fGYgaW4gdSkmJnVbZl09PT1yKXJldHVybiBlfHxmfHwwO3JldHVybiFlJiYtMX19fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigyNDEpLGk9TWF0aC5tYXgsbz1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1uKGUpO3JldHVybiByPDA/aShyK3QsMCk6byhyLHQpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNDA5KSxpPXIoMzMpLldlYWtNYXA7ZS5leHBvcnRzPSJmdW5jdGlvbiI9PT10eXBlb2YgaSYmL25hdGl2ZSBjb2RlLy50ZXN0KG4uY2FsbChpKSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDU3KSxpPXIoNzMwKSxvPXIoMjQ4KSxhPXIoMTQwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9aSh0KSxzPWEuZix1PW8uZixjPTA7YzxyLmxlbmd0aDtjKyspe3ZhciBmPXJbY107bihlLGYpfHxzKGUsZix1KHQsZikpfX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczMSksaT1yKDQxMiksbz1yKDgxKSxhPXIoMzMpLlJlZmxlY3Q7ZS5leHBvcnRzPWEmJmEub3duS2V5c3x8ZnVuY3Rpb24oZSl7dmFyIHQ9bi5mKG8oZSkpLHI9aS5mO3JldHVybiByP3QuY29uY2F0KHIoZSkpOnR9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig0MDcpLGk9cigyNDYpLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbihlKXtyZXR1cm4gbihlLGkpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNjgpLGk9LyN8XC5wcm90b3R5cGVcLi8sbz1mdW5jdGlvbihlLHQpe3ZhciByPXNbYShlKV07cmV0dXJuIHI9PWN8fHIhPXUmJigiZnVuY3Rpb24iPT10eXBlb2YgdD9uKHQpOiEhdCl9LGE9by5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKGksIi4iKS50b0xvd2VyQ2FzZSgpfSxzPW8uZGF0YT17fSx1PW8uTkFUSVZFPSJOIixjPW8uUE9MWUZJTEw9IlAiO2UuZXhwb3J0cz1vfSxmdW5jdGlvbihlLHQscil7ZS5leHBvcnRzPSFyKDY4KShmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yPW51bGwsT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBlKSE9PWUucHJvdG90eXBlfSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczNSk7ZS5leHBvcnRzPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciBlLHQ9ITEscj17fTt0cnl7KGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQpLmNhbGwocixbXSksdD1yIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2goaSl7fXJldHVybiBmdW5jdGlvbihyLGkpe3JldHVybiBuKHIsaSksdD9lLmNhbGwocixpKTpyLl9fcHJvdG9fXz1pLHJ9fSgpOnZvaWQgMCl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDkyKSxpPXIoODEpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGkoZSksIW4odCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcigiQ2FuJ3Qgc2V0ICIrU3RyaW5nKHQpKyIgYXMgYSBwcm90b3R5cGUiKX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDIpLGk9cigyNTApO24obi5HK24uQix7c2V0SW1tZWRpYXRlOmkuc2V0LGNsZWFySW1tZWRpYXRlOmkuY2xlYXJ9KX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDE3OCkoIm5hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmciLEZ1bmN0aW9uLnRvU3RyaW5nKX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNzM5KSxpPXIoMzMpLnByb2Nlc3Msbz0icHJvY2VzcyI9PXIoMTA3KShpKTtyKDE0Mykoe2dsb2JhbDohMCxlbnVtZXJhYmxlOiEwLG5vVGFyZ2V0R2V0OiEwfSx7cXVldWVNaWNyb3Rhc2s6ZnVuY3Rpb24oZSl7dmFyIHQ9byYmaS5kb21haW47bih0P3QuYmluZChlKTplKX19KX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGksbyxhLHMsdSxjLGY9cigzMyksbD1yKDI0OCkuZixoPXIoMTA3KSxwPXIoNzQwKS5zZXQsZD1yKDc0MSkseT1mLk11dGF0aW9uT2JzZXJ2ZXJ8fGYuV2ViS2l0TXV0YXRpb25PYnNlcnZlcixnPWYucHJvY2Vzcyx2PWYuUHJvbWlzZSxtPSJwcm9jZXNzIj09aChnKSxiPWwoZiwicXVldWVNaWNyb3Rhc2siKSxfPWImJmIudmFsdWU7X3x8KG49ZnVuY3Rpb24oKXt2YXIgZSx0O2ZvcihtJiYoZT1nLmRvbWFpbikmJmUuZXhpdCgpO2k7KXt0PWkuZm4saT1pLm5leHQ7dHJ5e3QoKX1jYXRjaChyKXt0aHJvdyBpP2EoKTpvPXZvaWQgMCxyfX1vPXZvaWQgMCxlJiZlLmVudGVyKCl9LG0/YT1mdW5jdGlvbigpe2cubmV4dFRpY2sobil9OnkmJiEvKGlQaG9uZXxpUG9kfGlQYWQpLipBcHBsZVdlYktpdC9pLnRlc3QoZCk/KHM9ITAsdT1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIiksbmV3IHkobikub2JzZXJ2ZSh1LHtjaGFyYWN0ZXJEYXRhOiEwfSksYT1mdW5jdGlvbigpe3UuZGF0YT1zPSFzfSk6diYmdi5yZXNvbHZlPyhjPXYucmVzb2x2ZSh2b2lkIDApLGE9ZnVuY3Rpb24oKXtjLnRoZW4obil9KTphPWZ1bmN0aW9uKCl7cC5jYWxsKGYsbil9KSxlLmV4cG9ydHM9X3x8ZnVuY3Rpb24oZSl7dmFyIHQ9e2ZuOmUsbmV4dDp2b2lkIDB9O28mJihvLm5leHQ9dCksaXx8KGk9dCxhKCkpLG89dH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpLG8sYT1yKDMzKSxzPXIoMTA3KSx1PXIoMTcxKSxjPXIoNDA4KSxmPXIoMjQzKSxsPWEuc2V0SW1tZWRpYXRlLGg9YS5jbGVhckltbWVkaWF0ZSxwPWEucHJvY2VzcyxkPWEuTWVzc2FnZUNoYW5uZWwseT1hLkRpc3BhdGNoLGc9MCx2PXt9LG09ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KGUpKXt2YXIgdD12W2VdO2RlbGV0ZSB2W2VdLHQoKX19LGI9ZnVuY3Rpb24oZSl7bS5jYWxsKGUuZGF0YSl9O2wmJmh8fChsPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyl0LnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrZ109ZnVuY3Rpb24oKXsoImZ1bmN0aW9uIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkuYXBwbHkodm9pZCAwLHQpfSxuKGcpLGd9LGg9ZnVuY3Rpb24oZSl7ZGVsZXRlIHZbZV19LCJwcm9jZXNzIj09cyhwKT9uPWZ1bmN0aW9uKGUpe3AubmV4dFRpY2sodShtLGUsMSkpfTp5JiZ5Lm5vdz9uPWZ1bmN0aW9uKGUpe3kubm93KHUobSxlLDEpKX06ZD8obz0oaT1uZXcgZCkucG9ydDIsaS5wb3J0MS5vbm1lc3NhZ2U9YixuPXUoby5wb3N0TWVzc2FnZSxvLDEpKTphLmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWEuaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbihlKXthLnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sYS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiLCExKSk6bj0ib25yZWFkeXN0YXRlY2hhbmdlImluIGYoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2MuYXBwZW5kQ2hpbGQoZigic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2MucmVtb3ZlQ2hpbGQodGhpcyksbS5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dCh1KG0sZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0OmwsY2xlYXI6aH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDMzKS5uYXZpZ2F0b3I7ZS5leHBvcnRzPW4mJm4udXNlckFnZW50fHwiIn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDc0Myk7dmFyIG4saT1yKDEwOCksbz1yKDQxOSksYT1yKDMzKS5VUkwscz1yKDQwNSksdT1yKDE0NCksYz1yKDQyMCksZj1yKDU3KSxsPXIoNzQ0KSxoPXIoNzQ1KSxwPXIoNDE4KSxkPXIoNzUwKSx5PXIoNDIxKSxnPXkuVVJMU2VhcmNoUGFyYW1zLHY9eS5nZXRTdGF0ZSxtPXIoMTQyKSxiPW0uc2V0LF89bS5nZXR0ZXJGb3IoIlVSTCIpLFM9TWF0aC5wb3csRT0vW2EtekEtWl0vLHc9L1thLXpBLVowLTkrXC0uXS8sVD0vXGQvLEE9L14oMHh8MFgpLyxDPS9eWzAtN10rJC8seD0vXlxkKyQvLEk9L15bMC05QS1GYS1mXSskLyxrPS9cdTAwMDB8XHUwMDA5fFx1MDAwQXxcdTAwMER8XHUwMDIwfCN8JXxcL3w6fFw/fEB8XFt8XFx8XF0vLE89L1x1MDAwMHxcdTAwMDl8XHUwMDBBfFx1MDAwRHxcdTAwMjB8I3xcL3w6fFw/fEB8XFt8XFx8XF0vLE49L15bXHUwMDAwLVx1MDAxRlx1MDAyMF0rfFtcdTAwMDAtXHUwMDFGXHUwMDIwXSskL2csUD0vXHUwMDA5fFx1MDAwQXxcdTAwMEQvZyxSPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbixpO2lmKCJbIj09dC5jaGFyQXQoMCkpe2lmKCJdIiE9dC5jaGFyQXQodC5sZW5ndGgtMSkpcmV0dXJuIkludmFsaWQgaG9zdCI7aWYoIShyPU0odC5zbGljZSgxLC0xKSkpKXJldHVybiJJbnZhbGlkIGhvc3QiO2UuaG9zdD1yfWVsc2UgaWYoSyhlKSl7aWYodD1kKHQpLGsudGVzdCh0KSlyZXR1cm4iSW52YWxpZCBob3N0IjtpZihudWxsPT09KHI9Qih0KSkpcmV0dXJuIkludmFsaWQgaG9zdCI7ZS5ob3N0PXJ9ZWxzZXtpZihPLnRlc3QodCkpcmV0dXJuIkludmFsaWQgaG9zdCI7Zm9yKHI9IiIsbj1oKHQpLGk9MDtpPG4ubGVuZ3RoO2krKylyKz1WKG5baV0sRCk7ZS5ob3N0PXJ9fSxCPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8sYSxzLHU9ZS5zcGxpdCgiLiIpO2lmKCIiPT11W3UubGVuZ3RoLTFdJiZ1Lmxlbmd0aCYmdS5wb3AoKSwodD11Lmxlbmd0aCk+NClyZXR1cm4gZTtmb3Iocj1bXSxuPTA7bjx0O24rKyl7aWYoIiI9PShpPXVbbl0pKXJldHVybiBlO2lmKG89MTAsaS5sZW5ndGg+MSYmIjAiPT1pLmNoYXJBdCgwKSYmKG89QS50ZXN0KGkpPzE2OjgsaT1pLnNsaWNlKDg9PW8/MToyKSksIiI9PT1pKWE9MDtlbHNle2lmKCEoMTA9PW8/eDo4PT1vP0M6SSkudGVzdChpKSlyZXR1cm4gZTthPXBhcnNlSW50KGksbyl9ci5wdXNoKGEpfWZvcihuPTA7bjx0O24rKylpZihhPXJbbl0sbj09dC0xKXtpZihhPj1TKDI1Niw1LXQpKXJldHVybiBudWxsfWVsc2UgaWYoYT4yNTUpcmV0dXJuIG51bGw7Zm9yKHM9ci5wb3AoKSxuPTA7bjxyLmxlbmd0aDtuKyspcys9cltuXSpTKDI1NiwzLW4pO3JldHVybiBzfSxNPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbixpLG8sYSxzLHU9WzAsMCwwLDAsMCwwLDAsMF0sYz0wLGY9bnVsbCxsPTAsaD1mdW5jdGlvbigpe3JldHVybiBlLmNoYXJBdChsKX07aWYoIjoiPT1oKCkpe2lmKCI6IiE9ZS5jaGFyQXQoMSkpcmV0dXJuO2wrPTIsZj0rK2N9Zm9yKDtoKCk7KXtpZig4PT1jKXJldHVybjtpZigiOiIhPWgoKSl7Zm9yKHQ9cj0wO3I8NCYmSS50ZXN0KGgoKSk7KXQ9MTYqdCtwYXJzZUludChoKCksMTYpLGwrKyxyKys7aWYoIi4iPT1oKCkpe2lmKDA9PXIpcmV0dXJuO2lmKGwtPXIsYz42KXJldHVybjtmb3Iobj0wO2goKTspe2lmKGk9bnVsbCxuPjApe2lmKCEoIi4iPT1oKCkmJm48NCkpcmV0dXJuO2wrK31pZighVC50ZXN0KGgoKSkpcmV0dXJuO2Zvcig7VC50ZXN0KGgoKSk7KXtpZihvPXBhcnNlSW50KGgoKSwxMCksbnVsbD09PWkpaT1vO2Vsc2V7aWYoMD09aSlyZXR1cm47aT0xMCppK299aWYoaT4yNTUpcmV0dXJuO2wrK311W2NdPTI1Nip1W2NdK2ksMiE9KytuJiY0IT1ufHxjKyt9aWYoNCE9bilyZXR1cm47YnJlYWt9aWYoIjoiPT1oKCkpe2lmKGwrKywhaCgpKXJldHVybn1lbHNlIGlmKGgoKSlyZXR1cm47dVtjKytdPXR9ZWxzZXtpZihudWxsIT09ZilyZXR1cm47bCsrLGY9KytjfX1pZihudWxsIT09Zilmb3IoYT1jLWYsYz03OzAhPWMmJmE+MDspcz11W2NdLHVbYy0tXT11W2Y="
}