3MsS3oDXxqDJ2vmzcvBQeQLkThmMmuojN74 · data · main.js_0
{
    "main.js_0": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfd2luZy5vZ2dfY291bnQiKTsNCnZhciBzb3VuZFNjb3JlID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfcG9pbnQub2dnX2NvdW50Iik7DQp2YXIgc291bmRIaXQgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9oaXQub2dnX2NvdW50Iik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9kaWUub2dnX2NvdW50Iik7DQp2YXIgc291bmRTd29vc2ggPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9zd29vc2hpbmcub2dnX2NvdW50Iik7DQpidXp6LmFsbCgpLnNldFZvbHVtZSh2b2x1bWUpOw0KDQovL2xvb3BzDQp2YXIgbG9vcEdhbWVsb29wOw0KdmFyIGxvb3BQaXBlbG9vcDsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICBpZih3aW5kb3cubG9jYXRpb24uc2VhcmNoID09ICI/ZGVidWciKQ0KICAgICAgZGVidWdtb2RlID0gdHJ1ZTsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9lYXN5IikNCiAgICAgIHBpcGVoZWlnaHQgPSAyMDA7DQogICANCiAgIC8vZ2V0IHRoZSBoaWdoc2NvcmUNCiAgIHZhciBzYXZlZHNjb3JlID0gZ2V0Q29va2llKCJoaWdoc2NvcmUiKTsNCiAgIGlmKHNhdmVkc2NvcmUgIT0gIiIpDQogICAgICBoaWdoc2NvcmUgPSBwYXJzZUludChzYXZlZHNjb3JlKTsNCiAgIA0KICAgLy9zdGFydCB3aXRoIHRoZSBzcGxhc2ggc2NyZWVuDQogICBzaG93U3BsYXNoKCk7DQp9KTsNCg0KZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKQ0Kew0KICAgdmFyIG5hbWUgPSBjbmFtZSArICI9IjsNCiAgIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOw0KICAgZm9yKHZhciBpPTA7IGk8Y2EubGVuZ3RoOyBpKyspIA0KICAgew0KICAgICAgdmFyIGMgPSBjYVtpXS50cmltKCk7DQogICAgICBpZiAoYy5pbmRleE9mKG5hbWUpPT0wKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsYy5sZW5ndGgpOw0KICAgfQ0KICAgcmV0dXJuICIiOw0KfQ0KDQpmdW5jdGlvbiBzZXRDb29raWUoY25hbWUsY3ZhbHVlLGV4ZGF5cykNCnsNCiAgIHZhciBkID0gbmV3IERhdGUoKTsNCiAgIGQuc2V0VGltZShkLmdldFRpbWUoKSsoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTsNCiAgIHZhciBleHBpcmVzID0gImV4cGlyZXM9IitkLnRvR01UU3RyaW5nKCk7DQogICBkb2N1bWVudC5jb29raWUgPSBjbmFtZSArICI9IiArIGN2YWx1ZSArICI7ICIgKyBleHBpcmVzOw0KfQ0KDQpmdW5jdGlvbiBzaG93U3BsYXNoKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TcGxhc2hTY3JlZW47DQogICANCiAgIC8vc2V0IHRoZSBkZWZhdWx0cyAoYWdhaW4pDQogICB2ZWxvY2l0eSA9IDA7DQogICBwb3NpdGlvbiA9IDE4MDsNCiAgIHJvdGF0aW9uID0gMDsNCiAgIHNjb3JlID0gMDsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIG5leHQgZ2FtZQ0KICAgJCgiI3BsYXllciIpLmNzcyh7IHk6IDAsIHg6IDB9KTsNCiAgIHVwZGF0ZVBsYXllcigkKCIjcGxheWVyIikpOw0KICAgDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vY2xlYXIgb3V0IGFsbCB0aGUgcGlwZXMgaWYgdGhlcmUgYXJlIGFueQ0KICAgJCgiLnBpcGUiKS5yZW1vdmUoKTsNCiAgIHBpcGVzID0gbmV3IEFycmF5KCk7DQogICANCiAgIC8vbWFrZSBldmVyeXRoaW5nIGFuaW1hdGVkIGFnYWluDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgICQoIi5hbmltYXRlZCIpLmNzcygnLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZScsICdydW5uaW5nJyk7DQogICANCiAgIC8vZmFkZSBpbiB0aGUgc3BsYXNoDQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDEgfSwgMjAwMCwgJ2Vhc2UnKTsNCn0NCg0KZnVuY3Rpb24gc3RhcnRHYW1lKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5HYW1lU2NyZWVuOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS5zdG9wKCk7DQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDAgfSwgNTAwLCAnZWFzZScpOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSgpOw0KICAgDQogICAvL2RlYnVnIG1vZGU/DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICAvL3Nob3cgdGhlIGJvdW5kaW5nIGJveGVzDQogICAgICAkKCIuYm91bmRpbmdib3giKS5zaG93KCk7DQogICB9DQoNCiAgIC8vc3RhcnQgdXAgb3VyIGxvb3BzDQogICB2YXIgdXBkYXRlcmF0ZSA9IDEwMDAuMCAvIDYwLjAgOyAvLzYwIHRpbWVzIGEgc2Vjb25kDQogICBsb29wR2FtZWxvb3AgPSBzZXRJbnRlcnZhbChnYW1lbG9vcCwgdXBkYXRlcmF0ZSk7DQogICBsb29wUGlwZWxvb3AgPSBzZXRJbnRlcnZhbCh1cGRhdGVQaXBlcywgMTQwMCk7DQogICANCiAgIC8vanVtcCBmcm9tIHRoZSBzdGFydCENCiAgIHBsYXllckp1bXAoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGxheWVyKHBsYXllcikNCnsNCiAgIC8vcm90YXRpb24NCiAgIHJvdGF0aW9uID0gTWF0aC5taW4oKHZlbG9jaXR5IC8gMTApICogOTAsIDkwKTsNCiAgIA0KICAgLy9hcHBseSByb3RhdGlvbiBhbmQgcG9zaXRpb24NCiAgICQocGxheWVyKS5jc3MoeyByb3RhdGU6IHJvdGF0aW9uLCB0b3A6IHBvc2l0aW9uIH0pOw0KfQ0KDQpmdW5jdGlvbiBnYW1lbG9vcCgpIHsNCiAgIHZhciBwbGF5ZXIgPSAkKCIjcGxheWVyIik7DQogICANCiAgIC8vdXBkYXRlIHRoZSBwbGF5ZXIgc3BlZWQvcG9zaXRpb24NCiAgIHZlbG9jaXR5ICs9IGdyYXZpdHk7DQogICBwb3NpdGlvbiArPSB2ZWxvY2l0eTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllcg0KICAgdXBkYXRlUGxheWVyKHBsYXllcik7DQogICANCiAgIC8vY3JlYXRlIHRoZSBib3VuZGluZyBib3gNCiAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICB2YXIgb3JpZ3dpZHRoID0gMzQuMDsNCiAgIHZhciBvcmlnaGVpZ2h0ID0gMjQuMDsNCiAgIA0KICAgdmFyIGJveHdpZHRoID0gb3JpZ3dpZHRoIC0gKE1hdGguc2luKE1hdGguYWJzKHJvdGF0aW9uKSAvIDkwKSAqIDgpOw0KICAgdmFyIGJveGhlaWdodCA9IChvcmlnaGVpZ2h0ICsgYm94LmhlaWdodCkgLyAyOw0KICAgdmFyIGJveGxlZnQgPSAoKGJveC53aWR0aCAtIGJveHdpZHRoKSAvIDIpICsgYm94LmxlZnQ7DQogICB2YXIgYm94dG9wID0gKChib3guaGVpZ2h0IC0gYm94aGVpZ2h0KSAvIDIpICsgYm94LnRvcDsNCiAgIHZhciBib3hyaWdodCA9IGJveGxlZnQgKyBib3h3aWR0aDsNCiAgIHZhciBib3hib3R0b20gPSBib3h0b3AgKyBib3hoZWlnaHQ7DQogICANCiAgIC8vaWYgd2UncmUgaW4gZGVidWcgbW9kZSwgZHJhdyB0aGUgYm91bmRpbmcgYm94DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICB2YXIgYm91bmRpbmdib3ggPSAkKCIjcGxheWVyYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBib3hsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgYm94dG9wKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnaGVpZ2h0JywgYm94aGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBib3h3aWR0aCk7DQogICB9DQogICANCiAgIC8vZGlkIHdlIGhpdCB0aGUgZ3JvdW5kPw0KICAgaWYoYm94LmJvdHRvbSA+PSAkKCIjbGFuZCIpLm9mZnNldCgpLnRvcCkNCiAgIHsNCiAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgIHJldHVybjsNCiAgIH0NCiAgIA0KICAgLy9oYXZlIHRoZXkgdHJpZWQgdG8gZXNjYXBlIHRocm91Z2ggdGhlIGNlaWxpbmc/IDpvDQogICB2YXIgY2VpbGluZyA9ICQoIiNjZWlsaW5nIik7DQogICBpZihib3h0b3AgPD0gKGNlaWxpbmcub2Zmc2V0KCkudG9wICsgY2VpbGluZy5oZWlnaHQoKSkpDQogICAgICBwb3NpdGlvbiA9IDA7DQogICANCiAgIC8vd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIgd2l0aG91dCBhIHBpcGUNCiAgIGlmKHBpcGVzWzBdID09IG51bGwpDQogICAgICByZXR1cm47DQogICANCiAgIC8vZGV0ZXJtaW5lIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG5leHQgcGlwZXMgaW5uZXIgYXJlYQ0KICAgdmFyIG5leHRwaXBlID0gcGlwZXNbMF07DQogICB2YXIgbmV4dHBpcGV1cHBlciA9IG5leHRwaXBlLmNoaWxkcmVuKCIucGlwZV91cHBlciIpOw0KICAgDQogICB2YXIgcGlwZXRvcCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkudG9wICsgbmV4dHBpcGV1cHBlci5oZWlnaHQoKTsNCiAgIHZhciBwaXBlbGVmdCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkubGVmdCAtIDI7IC8vIGZvciBzb21lIHJlYXNvbiBpdCBzdGFydHMgYXQgdGhlIGlubmVyIHBpcGVzIG9mZnNldCwgbm90IHRoZSBvdXRlciBwaXBlcy4NCiAgIHZhciBwaXBlcmlnaHQgPSBwaXBlbGVmdCArIHBpcGV3aWR0aDsNCiAgIHZhciBwaXBlYm90dG9tID0gcGlwZXRvcCArIHBpcGVoZWlnaHQ7DQogICANCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwaXBlYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBwaXBlbGVmdCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ3RvcCcsIHBpcGV0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBwaXBlaGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBwaXBld2lkdGgpOw0KICAgfQ0KICAgDQogICAvL2hhdmUgd2UgZ290dGVuIGluc2lkZSB0aGUgcGlwZSB5ZXQ/DQogICBpZihib3hyaWdodCA+IHBpcGVsZWZ0KQ0KICAgew0KICAgICAgLy93ZSdyZSB3aXRoaW4gdGhlIHBpcGUsIGhhdmUgd2UgcGFzc2VkIGJldHdlZW4gdXBwZXIgYW5kIGxvd2VyIHBpcGVzPw0KICAgICAgaWYoYm94dG9wID4gcGlwZXRvcCAmJiBib3hib3R0b20gPCBwaXBlYm90dG9tKQ0KICAgICAgew0KICAgICAgICAgLy95ZWFoISB3ZSdyZSB3aXRoaW4gYm91bmRzDQogICAgICAgICANCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgIC8vbm8hIHdlIHRvdWNoZWQgdGhlIHBpcGUNCiAgICAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgIH0NCiAgIA0KICAgDQogICAvL2hhdmUgd2UgcGFzc2VkIHRoZSBpbW1pbmVudCBkYW5nZXI/DQogICBpZihib3hsZWZ0ID4gcGlwZXJpZ2h0KQ0KICAgew0KICAgICAgLy95ZXMsIHJlbW92ZSBpdA0KICAgICAgcGlwZXMuc3BsaWNlKDAsIDEpOw0KICAgICAgDQogICAgICAvL2FuZCBzY29yZSBhIHBvaW50DQogICAgICBwbGF5ZXJTY29yZSgpOw0KICAgfQ0KfQ0KDQovL0hhbmRsZSBzcGFjZSBiYXINCiQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24oZSl7DQogICAvL3NwYWNlIGJhciENCiAgIGlmKGUua2V5Q29kZSA9PSAzMikNCiAgIHsNCiAgICAgIC8vaW4gU2NvcmVTY3JlZW4sIGhpdHRpbmcgc3BhY2Ugc2hvdWxkIGNsaWNrIHRoZSAicmVwbGF5IiBidXR0b24uIGVsc2UgaXQncyBqdXN0IGEgcmVndWxhciBzcGFjZWJhciBoaXQNCiAgICAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU2NvcmVTY3JlZW4pDQogICAgICAgICAkKCIjcmVwbGF5IikuY2xpY2soKTsNCiAgICAgIGVsc2UNCiAgICAgICAgIHNjcmVlbkNsaWNrKCk7DQogICB9DQp9KTsNCg0KLy9IYW5kbGUgbW91c2UgZG93biBPUiB0b3VjaCBzdGFydA0KaWYoIm9udG91Y2hzdGFydCIgaW4gd2luZG93KQ0KICAgJChkb2N1bWVudCkub24oInRvdWNoc3RhcnQiLCBzY3JlZW5DbGljayk7DQplbHNlDQogICAkKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgc2NyZWVuQ2xpY2spOw0KDQpmdW5jdGlvbiBzY3JlZW5DbGljaygpDQp7DQogICBpZihjdXJyZW50c3RhdGUgPT0gc3RhdGVzLkdhbWVTY3JlZW4pDQogICB7DQogICAgICBwbGF5ZXJKdW1wKCk7DQogICB9DQogICBlbHNlIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU3BsYXNoU2NyZWVuKQ0KICAgew0KICAgICAgc3RhcnRHYW1lKCk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHBsYXllckp1bXAoKQ0Kew0KICAgdmVsb2NpdHkgPSBqdW1wOw0KICAgLy9wbGF5IGp1bXAgc291bmQNCiAgIHNvdW5kSnVtcC5zdG9wKCk7DQogICBzb3VuZEp1bXAucGxheSgpOw0KfQ0KDQpmdW5jdGlvbiBzZXRCaWdTY29yZShlcmFzZSkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjYmlnc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICBpZihlcmFzZSkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9iaWdfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0U21hbGxTY29yZSgpDQp7DQogICB2YXIgZWxlbXNjb3JlID0gJCgiI2N1cnJlbnRzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIHZhciBkaWdpdHMgPSBzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0SGlnaFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjaGlnaHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IGhpZ2hzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0TWVkYWwoKQ0Kew0KICAgdmFyIGVsZW1tZWRhbCA9ICQoIiNtZWRhbCIpOw0KICAgZWxlbW1lZGFsLmVtcHR5KCk7DQogICANCiAgIGlmKHNjb3JlIDwgMTApDQogICAgICAvL3NpZ25hbCB0aGF0IG5vIG1lZGFsIGhhcyBiZWVuIHdvbg0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgDQogICBpZihzY29yZSA+PSAxMCkNCiAgICAgIG1lZGFsID0gImJyb256ZSI7DQogICBpZihzY29yZSA+PSAyMCkNCiAgICAgIG1lZGFsID0gInNpbHZlciI7DQogICBpZihzY29yZSA+PSAzMCkNCiAgICAgIG1lZGFsID0gImdvbGQiOw0KICAgaWYoc2NvcmUgPj0gNDApDQogICAgICBtZWRhbCA9ICJwbGF0aW51bSI7DQogICANCiAgIGVsZW1tZWRhbC5hcHBlbmQoJzxpbWcgc3JjPSJodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGbWVkYWxfJyArIG1lZGFsICsnLnBuZ19jb3VudCIgYWx0PSInICsgbWVkYWwgKyciPicpOw0KICAgDQogICAvL3NpZ25hbCB0aGF0IGEgbWVkYWwgaGFzIGJlZW4gd29uDQogICByZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gcGxheWVyRGVhZCgpDQp7DQogICAvL3N0b3AgYW5pbWF0aW5nIGV2ZXJ5dGhpbmchDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgDQogICAvL2Ryb3AgdGhlIGJpcmQgdG8gdGhlIGZsb29yDQogICB2YXIgcGxheWVyYm90dG9tID0gJCgiI3BsYXllciIpLnBvc2l0aW9uKCkudG9wICsgJCgiI3BsYXllciIpLndpZHRoKCk7IC8vd2UgdXNlIHdpZHRoIGJlY2F1c2UgaGUnbGwgYmUgcm90YXRlZCA5MCBkZWcNCiAgIHZhciBmbG9vciA9IGZseUFyZWE7DQogICB2YXIgbW92ZXkgPSBNYXRoLm1heCgwLCBmbG9vciAtIHBsYXllcmJvdHRvbSk7DQogICAkKCIjcGxheWVyIikudHJhbnNpdGlvbih7IHk6IG1vdmV5ICsgJ3B4Jywgcm90YXRlOiA5MH0sIDEwMDAsICdlYXNlSW5PdXRDdWJpYycpOw0KICAgDQogICAvL2l0J3MgdGltZSB0byBjaGFuZ2Ugc3RhdGVzLiBhcyBvZiBub3cgd2UncmUgY29uc2lkZXJlZCBTY29yZVNjcmVlbiB0byBkaXNhYmxlIGxlZnQgY2xpY2svZmx5aW5nDQogICBjdXJyZW50c3RhdGUgPSBzdGF0ZXMuU2NvcmVTY3JlZW47DQoNCiAgIC8vZGVzdHJveSBvdXIgZ2FtZWxvb3BzDQogICBjbGVhckludGVydmFsKGxvb3BHYW1lbG9vcCk7DQogICBjbGVhckludGVydmFsKGxvb3BQaXBlbG9vcCk7DQogICBsb29wR2FtZWxvb3AgPSBudWxsOw0KICAgbG9vcFBpcGVsb29wID0gbnVsbDsNCg0KICAgLy9tb2JpbGUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBidXp6IGJpbmRPbmNlIGV2ZW50DQogICBpZihpc0luY29tcGF0aWJsZS5hbnkoKSkNCiAgIHsNCiAgICAgIC8vc2tpcCByaWdodCB0byBzaG93aW5nIHNjb3JlDQogICAgICBzaG93U2NvcmUoKTsNCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIC8vcGxheSB0aGUgaGl0IHNvdW5kICh0aGVuIHRoZSBkZWFkIHNvdW5kKSBhbmQgdGhlbiBzaG93IHNjb3JlDQogICAgICBzb3VuZEhpdC5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICBzb3VuZERpZS5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBzaG93U2NvcmUoKTsNCiAgICAgICAgIH0pOw0KICAgICAgfSk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHNob3dTY29yZSgpDQp7DQogICAvL3VuaGlkZSB1cw0KICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKTsNCiAgIA0KICAgLy9yZW1vdmUgdGhlIGJpZyBzY29yZQ0KICAgc2V0QmlnU2NvcmUodHJ1ZSk7DQogICANCiAgIC8vaGF2ZSB0aGV5IGJlYXRlbiB0aGVpciBoaWdoIHNjb3JlPw0KICAgaWYoc2NvcmUgPiBoaWdoc2NvcmUpDQogICB7DQogICAgICAvL3llYWghDQogICAgICBoaWdoc2NvcmUgPSBzY29yZTsNCiAgICAgIC8vc2F2ZSBpdCENCiAgICAgIHNldENvb2tpZSgiaGlnaHNjb3JlIiwgaGlnaHNjb3JlLCA5OTkpOw0KICAgfQ0KICAgDQogICAvL3VwZGF0ZSB0aGUgc2NvcmVib2FyZA0KICAgc2V0U21hbGxTY29yZSgpOw0KICAgc2V0SGlnaFNjb3JlKCk7DQogICB2YXIgd29ubWVkYWwgPSBzZXRNZWRhbCgpOw0KICAgDQogICAvL1NXT09TSCENCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9zaG93IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcyh7IHk6ICc0MHB4Jywgb3BhY2l0eTogMCB9KTsgLy9tb3ZlIGl0IGRvd24gc28gd2UgY2FuIHNsaWRlIGl0IHVwDQogICAkKCIjcmVwbGF5IikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOw0KICAgJCgiI3Njb3JlYm9hcmQiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJywgZnVuY3Rpb24oKSB7DQogICAgICAvL1doZW4gdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBhbmltYXRlIGluIHRoZSByZXBsYXkgYnV0dG9uIGFuZCBTV09PU0ghDQogICAgICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICAgICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICAgICAkKCIjcmVwbGF5IikudHJhbnNpdGlvbih7IHk6ICcwcHgnLCBvcGFjaXR5OiAxfSwgNjAwLCAnZWFzZScpOw0KICAgICAgDQogICAgICAvL2Fsc28gYW5pbWF0ZSBpbiB0aGUgTUVEQUwhIFdPTyENCiAgICAgIGlmKHdvbm1lZGFsKQ0KICAgICAgew0KICAgICAgICAgJCgiI21lZGFsIikuY3NzKHsgc2NhbGU6IDIsIG9wYWNpdHk6IDAgfSk7DQogICAgICAgICAkKCIjbWVkYWwiKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSwgc2NhbGU6IDEgfSwgMTIwMCwgJ2Vhc2UnKTsNCiAgICAgIH0NCiAgIH0pOw0KICAgDQogICAvL21ha2UgdGhlIHJlcGxheSBidXR0b24gY2xpY2thYmxlDQogICByZXBsYXljbGlja2FibGUgPSB0cnVlOw0KDQogICAvLyBHcmFzc1IwMHQ6IGFkZGVkIGZvciBjb21tdW5pY2F0aW5nIHRoZSBzY29yZS4NCiAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdncmFzc1Jvb3QuZ2FtZUVuZGVkJywge2RldGFpbDogeyBzY29yZTogc2NvcmUgfSB9KSk7DQp9DQoNCiQoIiNyZXBsYXkiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgIC8vbWFrZSBzdXJlIHdlIGNhbiBvbmx5IGNsaWNrIG9uY2UNCiAgIGlmKCFyZXBsYXljbGlja2FibGUpDQogICAgICByZXR1cm47DQogICBlbHNlDQogICAgICByZXBsYXljbGlja2FibGUgPSBmYWxzZTsNCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnLTQwcHgnLCBvcGFjaXR5OiAwfSwgMTAwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vd2hlbiB0aGF0J3MgZG9uZSwgZGlzcGxheSB1cyBiYWNrIHRvIG5vdGhpbmcNCiAgICAgICQoIiNzY29yZWJvYXJkIikuY3NzKCJkaXNwbGF5IiwgIm5vbmUiKTsNCiAgICAgIA0KICAgICAgLy9zdGFydCB0aGUgZ2FtZSBvdmVyIQ0KICAgICAgc2hvd1NwbGFzaCgpOw0KICAgfSk7DQp9KTsNCg0KZnVuY3Rpb24gcGxheWVyU2NvcmUoKQ0Kew0KICAgc2NvcmUgKz0gMTsNCiAgIC8vcGxheSBzY29yZSBzb3VuZA0KICAgc291bmRTY29yZS5zdG9wKCk7DQogICBzb3VuZFNjb3JlLnBsYXkoKTsNCiAgIHNldEJpZ1Njb3JlKCk7DQp9DQoNCmZ1bmN0aW9uIHVwZGF0ZVBpcGVzKCkNCnsNCiAgIC8vRG8gYW55IHBpcGVzIG5lZWQgcmVtb3ZhbD8NCiAgICQoIi5waXBlIikuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gJCh0aGlzKS5wb3NpdGlvbigpLmxlZnQgPD0gLTEwMDsgfSkucmVtb3ZlKCkNCiAgIA0KICAgLy9hZGQgYSBuZXcgcGlwZSAodG9wIGhlaWdodCArIGJvdHRvbSBoZWlnaHQgICsgcGlwZWhlaWdodCA9PSBmbHlBcmVhKSBhbmQgcHV0IGl0IGluIG91ciB0cmFja2VyDQogICB2YXIgcGFkZGluZyA9IDgwOw0KICAgdmFyIGNvbnN0cmFpbnQgPSBmbHlBcmVhIC0gcGlwZWhlaWdodCAtIChwYWRkaW5nICogMik7IC8vZG91YmxlIHBhZGRpbmcgKGZvciB0b3AgYW5kIGJvdHRvbSkNCiAgIHZhciB0b3BoZWlnaHQgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpKmNvbnN0cmFpbnQpICsgcGFkZGluZyk7IC8vYWRkIGxvd2VyIHBhZGRpbmcNCiAgIHZhciBib3R0b21oZWlnaHQgPSAoZmx5QXJlYSAtIHBpcGVoZWlnaHQpIC0gdG9waGVpZ2h0Ow0KICAgdmFyIG5ld3BpcGUgPSAkKCc8ZGl2IGNsYXNzPSJwaXBlIGFuaW1hdGVkIj48ZGl2IGNsYXNzPSJwaXBlX3VwcGVyIiBzdHlsZT0iaGVpZ2h0OiAnICsgdG9waGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PGRpdiBjbGFzcz0icGlwZV9sb3dlciIgc3R5bGU9ImhlaWdodDogJyArIGJvdHRvbWhlaWdodCArICdweDsiPjwvZGl2PjwvZGl2PicpOw0KICAgJCgiI2ZseWFyZWEiKS5hcHBlbmQobmV3cGlwZSk7DQogICBwaXBlcy5wdXNoKG5ld3BpcGUpOw0KfQ0KDQp2YXIgaXNJbmNvbXBhdGlibGUgPSB7DQogICBBbmRyb2lkOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpOw0KICAgfSwNCiAgIEJsYWNrQmVycnk6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0JsYWNrQmVycnkvaSk7DQogICB9LA0KICAgaU9TOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpOw0KICAgfSwNCiAgIE9wZXJhOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpOw0KICAgfSwNCiAgIFNhZmFyaTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09TIFguKlNhZmFyaS8pICYmICEgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lLykpOw0KICAgfSwNCiAgIFdpbmRvd3M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0lFTW9iaWxlL2kpOw0KICAgfSwNCiAgIGFueTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKGlzSW5jb21wYXRpYmxlLkFuZHJvaWQoKSB8fCBpc0luY29tcGF0aWJsZS5CbGFja0JlcnJ5KCkgfHwgaXNJbmNvbXBhdGlibGUuaU9TKCkgfHwgaXNJbmNvbXBhdGlibGUuT3BlcmEoKSB8fCBpc0luY29tcGF0aWJsZS5TYWZhcmkoKSB8fCBpc0luY29tcGF0aWJsZS5XaW5kb3dzKCkpOw0KICAgfQ0KfTs="
}

Changelog:

{
    "2020.09.07 22:34": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfd2luZy5vZ2dfY291bnQiKTsNCnZhciBzb3VuZFNjb3JlID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfcG9pbnQub2dnX2NvdW50Iik7DQp2YXIgc291bmRIaXQgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9oaXQub2dnX2NvdW50Iik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9kaWUub2dnX2NvdW50Iik7DQp2YXIgc291bmRTd29vc2ggPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9zd29vc2hpbmcub2dnX2NvdW50Iik7DQpidXp6LmFsbCgpLnNldFZvbHVtZSh2b2x1bWUpOw0KDQovL2xvb3BzDQp2YXIgbG9vcEdhbWVsb29wOw0KdmFyIGxvb3BQaXBlbG9vcDsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICBpZih3aW5kb3cubG9jYXRpb24uc2VhcmNoID09ICI/ZGVidWciKQ0KICAgICAgZGVidWdtb2RlID0gdHJ1ZTsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9lYXN5IikNCiAgICAgIHBpcGVoZWlnaHQgPSAyMDA7DQogICANCiAgIC8vZ2V0IHRoZSBoaWdoc2NvcmUNCiAgIHZhciBzYXZlZHNjb3JlID0gZ2V0Q29va2llKCJoaWdoc2NvcmUiKTsNCiAgIGlmKHNhdmVkc2NvcmUgIT0gIiIpDQogICAgICBoaWdoc2NvcmUgPSBwYXJzZUludChzYXZlZHNjb3JlKTsNCiAgIA0KICAgLy9zdGFydCB3aXRoIHRoZSBzcGxhc2ggc2NyZWVuDQogICBzaG93U3BsYXNoKCk7DQp9KTsNCg0KZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKQ0Kew0KICAgdmFyIG5hbWUgPSBjbmFtZSArICI9IjsNCiAgIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOw0KICAgZm9yKHZhciBpPTA7IGk8Y2EubGVuZ3RoOyBpKyspIA0KICAgew0KICAgICAgdmFyIGMgPSBjYVtpXS50cmltKCk7DQogICAgICBpZiAoYy5pbmRleE9mKG5hbWUpPT0wKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsYy5sZW5ndGgpOw0KICAgfQ0KICAgcmV0dXJuICIiOw0KfQ0KDQpmdW5jdGlvbiBzZXRDb29raWUoY25hbWUsY3ZhbHVlLGV4ZGF5cykNCnsNCiAgIHZhciBkID0gbmV3IERhdGUoKTsNCiAgIGQuc2V0VGltZShkLmdldFRpbWUoKSsoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTsNCiAgIHZhciBleHBpcmVzID0gImV4cGlyZXM9IitkLnRvR01UU3RyaW5nKCk7DQogICBkb2N1bWVudC5jb29raWUgPSBjbmFtZSArICI9IiArIGN2YWx1ZSArICI7ICIgKyBleHBpcmVzOw0KfQ0KDQpmdW5jdGlvbiBzaG93U3BsYXNoKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TcGxhc2hTY3JlZW47DQogICANCiAgIC8vc2V0IHRoZSBkZWZhdWx0cyAoYWdhaW4pDQogICB2ZWxvY2l0eSA9IDA7DQogICBwb3NpdGlvbiA9IDE4MDsNCiAgIHJvdGF0aW9uID0gMDsNCiAgIHNjb3JlID0gMDsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIG5leHQgZ2FtZQ0KICAgJCgiI3BsYXllciIpLmNzcyh7IHk6IDAsIHg6IDB9KTsNCiAgIHVwZGF0ZVBsYXllcigkKCIjcGxheWVyIikpOw0KICAgDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vY2xlYXIgb3V0IGFsbCB0aGUgcGlwZXMgaWYgdGhlcmUgYXJlIGFueQ0KICAgJCgiLnBpcGUiKS5yZW1vdmUoKTsNCiAgIHBpcGVzID0gbmV3IEFycmF5KCk7DQogICANCiAgIC8vbWFrZSBldmVyeXRoaW5nIGFuaW1hdGVkIGFnYWluDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgICQoIi5hbmltYXRlZCIpLmNzcygnLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZScsICdydW5uaW5nJyk7DQogICANCiAgIC8vZmFkZSBpbiB0aGUgc3BsYXNoDQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDEgfSwgMjAwMCwgJ2Vhc2UnKTsNCn0NCg0KZnVuY3Rpb24gc3RhcnRHYW1lKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5HYW1lU2NyZWVuOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS5zdG9wKCk7DQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDAgfSwgNTAwLCAnZWFzZScpOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSgpOw0KICAgDQogICAvL2RlYnVnIG1vZGU/DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICAvL3Nob3cgdGhlIGJvdW5kaW5nIGJveGVzDQogICAgICAkKCIuYm91bmRpbmdib3giKS5zaG93KCk7DQogICB9DQoNCiAgIC8vc3RhcnQgdXAgb3VyIGxvb3BzDQogICB2YXIgdXBkYXRlcmF0ZSA9IDEwMDAuMCAvIDYwLjAgOyAvLzYwIHRpbWVzIGEgc2Vjb25kDQogICBsb29wR2FtZWxvb3AgPSBzZXRJbnRlcnZhbChnYW1lbG9vcCwgdXBkYXRlcmF0ZSk7DQogICBsb29wUGlwZWxvb3AgPSBzZXRJbnRlcnZhbCh1cGRhdGVQaXBlcywgMTQwMCk7DQogICANCiAgIC8vanVtcCBmcm9tIHRoZSBzdGFydCENCiAgIHBsYXllckp1bXAoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGxheWVyKHBsYXllcikNCnsNCiAgIC8vcm90YXRpb24NCiAgIHJvdGF0aW9uID0gTWF0aC5taW4oKHZlbG9jaXR5IC8gMTApICogOTAsIDkwKTsNCiAgIA0KICAgLy9hcHBseSByb3RhdGlvbiBhbmQgcG9zaXRpb24NCiAgICQocGxheWVyKS5jc3MoeyByb3RhdGU6IHJvdGF0aW9uLCB0b3A6IHBvc2l0aW9uIH0pOw0KfQ0KDQpmdW5jdGlvbiBnYW1lbG9vcCgpIHsNCiAgIHZhciBwbGF5ZXIgPSAkKCIjcGxheWVyIik7DQogICANCiAgIC8vdXBkYXRlIHRoZSBwbGF5ZXIgc3BlZWQvcG9zaXRpb24NCiAgIHZlbG9jaXR5ICs9IGdyYXZpdHk7DQogICBwb3NpdGlvbiArPSB2ZWxvY2l0eTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllcg0KICAgdXBkYXRlUGxheWVyKHBsYXllcik7DQogICANCiAgIC8vY3JlYXRlIHRoZSBib3VuZGluZyBib3gNCiAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICB2YXIgb3JpZ3dpZHRoID0gMzQuMDsNCiAgIHZhciBvcmlnaGVpZ2h0ID0gMjQuMDsNCiAgIA0KICAgdmFyIGJveHdpZHRoID0gb3JpZ3dpZHRoIC0gKE1hdGguc2luKE1hdGguYWJzKHJvdGF0aW9uKSAvIDkwKSAqIDgpOw0KICAgdmFyIGJveGhlaWdodCA9IChvcmlnaGVpZ2h0ICsgYm94LmhlaWdodCkgLyAyOw0KICAgdmFyIGJveGxlZnQgPSAoKGJveC53aWR0aCAtIGJveHdpZHRoKSAvIDIpICsgYm94LmxlZnQ7DQogICB2YXIgYm94dG9wID0gKChib3guaGVpZ2h0IC0gYm94aGVpZ2h0KSAvIDIpICsgYm94LnRvcDsNCiAgIHZhciBib3hyaWdodCA9IGJveGxlZnQgKyBib3h3aWR0aDsNCiAgIHZhciBib3hib3R0b20gPSBib3h0b3AgKyBib3hoZWlnaHQ7DQogICANCiAgIC8vaWYgd2UncmUgaW4gZGVidWcgbW9kZSwgZHJhdyB0aGUgYm91bmRpbmcgYm94DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICB2YXIgYm91bmRpbmdib3ggPSAkKCIjcGxheWVyYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBib3hsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgYm94dG9wKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnaGVpZ2h0JywgYm94aGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBib3h3aWR0aCk7DQogICB9DQogICANCiAgIC8vZGlkIHdlIGhpdCB0aGUgZ3JvdW5kPw0KICAgaWYoYm94LmJvdHRvbSA+PSAkKCIjbGFuZCIpLm9mZnNldCgpLnRvcCkNCiAgIHsNCiAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgIHJldHVybjsNCiAgIH0NCiAgIA0KICAgLy9oYXZlIHRoZXkgdHJpZWQgdG8gZXNjYXBlIHRocm91Z2ggdGhlIGNlaWxpbmc/IDpvDQogICB2YXIgY2VpbGluZyA9ICQoIiNjZWlsaW5nIik7DQogICBpZihib3h0b3AgPD0gKGNlaWxpbmcub2Zmc2V0KCkudG9wICsgY2VpbGluZy5oZWlnaHQoKSkpDQogICAgICBwb3NpdGlvbiA9IDA7DQogICANCiAgIC8vd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIgd2l0aG91dCBhIHBpcGUNCiAgIGlmKHBpcGVzWzBdID09IG51bGwpDQogICAgICByZXR1cm47DQogICANCiAgIC8vZGV0ZXJtaW5lIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG5leHQgcGlwZXMgaW5uZXIgYXJlYQ0KICAgdmFyIG5leHRwaXBlID0gcGlwZXNbMF07DQogICB2YXIgbmV4dHBpcGV1cHBlciA9IG5leHRwaXBlLmNoaWxkcmVuKCIucGlwZV91cHBlciIpOw0KICAgDQogICB2YXIgcGlwZXRvcCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkudG9wICsgbmV4dHBpcGV1cHBlci5oZWlnaHQoKTsNCiAgIHZhciBwaXBlbGVmdCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkubGVmdCAtIDI7IC8vIGZvciBzb21lIHJlYXNvbiBpdCBzdGFydHMgYXQgdGhlIGlubmVyIHBpcGVzIG9mZnNldCwgbm90IHRoZSBvdXRlciBwaXBlcy4NCiAgIHZhciBwaXBlcmlnaHQgPSBwaXBlbGVmdCArIHBpcGV3aWR0aDsNCiAgIHZhciBwaXBlYm90dG9tID0gcGlwZXRvcCArIHBpcGVoZWlnaHQ7DQogICANCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwaXBlYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBwaXBlbGVmdCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ3RvcCcsIHBpcGV0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBwaXBlaGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBwaXBld2lkdGgpOw0KICAgfQ0KICAgDQogICAvL2hhdmUgd2UgZ290dGVuIGluc2lkZSB0aGUgcGlwZSB5ZXQ/DQogICBpZihib3hyaWdodCA+IHBpcGVsZWZ0KQ0KICAgew0KICAgICAgLy93ZSdyZSB3aXRoaW4gdGhlIHBpcGUsIGhhdmUgd2UgcGFzc2VkIGJldHdlZW4gdXBwZXIgYW5kIGxvd2VyIHBpcGVzPw0KICAgICAgaWYoYm94dG9wID4gcGlwZXRvcCAmJiBib3hib3R0b20gPCBwaXBlYm90dG9tKQ0KICAgICAgew0KICAgICAgICAgLy95ZWFoISB3ZSdyZSB3aXRoaW4gYm91bmRzDQogICAgICAgICANCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgIC8vbm8hIHdlIHRvdWNoZWQgdGhlIHBpcGUNCiAgICAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgIH0NCiAgIA0KICAgDQogICAvL2hhdmUgd2UgcGFzc2VkIHRoZSBpbW1pbmVudCBkYW5nZXI/DQogICBpZihib3hsZWZ0ID4gcGlwZXJpZ2h0KQ0KICAgew0KICAgICAgLy95ZXMsIHJlbW92ZSBpdA0KICAgICAgcGlwZXMuc3BsaWNlKDAsIDEpOw0KICAgICAgDQogICAgICAvL2FuZCBzY29yZSBhIHBvaW50DQogICAgICBwbGF5ZXJTY29yZSgpOw0KICAgfQ0KfQ0KDQovL0hhbmRsZSBzcGFjZSBiYXINCiQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24oZSl7DQogICAvL3NwYWNlIGJhciENCiAgIGlmKGUua2V5Q29kZSA9PSAzMikNCiAgIHsNCiAgICAgIC8vaW4gU2NvcmVTY3JlZW4sIGhpdHRpbmcgc3BhY2Ugc2hvdWxkIGNsaWNrIHRoZSAicmVwbGF5IiBidXR0b24uIGVsc2UgaXQncyBqdXN0IGEgcmVndWxhciBzcGFjZWJhciBoaXQNCiAgICAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU2NvcmVTY3JlZW4pDQogICAgICAgICAkKCIjcmVwbGF5IikuY2xpY2soKTsNCiAgICAgIGVsc2UNCiAgICAgICAgIHNjcmVlbkNsaWNrKCk7DQogICB9DQp9KTsNCg0KLy9IYW5kbGUgbW91c2UgZG93biBPUiB0b3VjaCBzdGFydA0KaWYoIm9udG91Y2hzdGFydCIgaW4gd2luZG93KQ0KICAgJChkb2N1bWVudCkub24oInRvdWNoc3RhcnQiLCBzY3JlZW5DbGljayk7DQplbHNlDQogICAkKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgc2NyZWVuQ2xpY2spOw0KDQpmdW5jdGlvbiBzY3JlZW5DbGljaygpDQp7DQogICBpZihjdXJyZW50c3RhdGUgPT0gc3RhdGVzLkdhbWVTY3JlZW4pDQogICB7DQogICAgICBwbGF5ZXJKdW1wKCk7DQogICB9DQogICBlbHNlIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU3BsYXNoU2NyZWVuKQ0KICAgew0KICAgICAgc3RhcnRHYW1lKCk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHBsYXllckp1bXAoKQ0Kew0KICAgdmVsb2NpdHkgPSBqdW1wOw0KICAgLy9wbGF5IGp1bXAgc291bmQNCiAgIHNvdW5kSnVtcC5zdG9wKCk7DQogICBzb3VuZEp1bXAucGxheSgpOw0KfQ0KDQpmdW5jdGlvbiBzZXRCaWdTY29yZShlcmFzZSkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjYmlnc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICBpZihlcmFzZSkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9iaWdfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0U21hbGxTY29yZSgpDQp7DQogICB2YXIgZWxlbXNjb3JlID0gJCgiI2N1cnJlbnRzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIHZhciBkaWdpdHMgPSBzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0SGlnaFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjaGlnaHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IGhpZ2hzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmQlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0TWVkYWwoKQ0Kew0KICAgdmFyIGVsZW1tZWRhbCA9ICQoIiNtZWRhbCIpOw0KICAgZWxlbW1lZGFsLmVtcHR5KCk7DQogICANCiAgIGlmKHNjb3JlIDwgMTApDQogICAgICAvL3NpZ25hbCB0aGF0IG5vIG1lZGFsIGhhcyBiZWVuIHdvbg0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgDQogICBpZihzY29yZSA+PSAxMCkNCiAgICAgIG1lZGFsID0gImJyb256ZSI7DQogICBpZihzY29yZSA+PSAyMCkNCiAgICAgIG1lZGFsID0gInNpbHZlciI7DQogICBpZihzY29yZSA+PSAzMCkNCiAgICAgIG1lZGFsID0gImdvbGQiOw0KICAgaWYoc2NvcmUgPj0gNDApDQogICAgICBtZWRhbCA9ICJwbGF0aW51bSI7DQogICANCiAgIGVsZW1tZWRhbC5hcHBlbmQoJzxpbWcgc3JjPSJodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGbWVkYWxfJyArIG1lZGFsICsnLnBuZ19jb3VudCIgYWx0PSInICsgbWVkYWwgKyciPicpOw0KICAgDQogICAvL3NpZ25hbCB0aGF0IGEgbWVkYWwgaGFzIGJlZW4gd29uDQogICByZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gcGxheWVyRGVhZCgpDQp7DQogICAvL3N0b3AgYW5pbWF0aW5nIGV2ZXJ5dGhpbmchDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgDQogICAvL2Ryb3AgdGhlIGJpcmQgdG8gdGhlIGZsb29yDQogICB2YXIgcGxheWVyYm90dG9tID0gJCgiI3BsYXllciIpLnBvc2l0aW9uKCkudG9wICsgJCgiI3BsYXllciIpLndpZHRoKCk7IC8vd2UgdXNlIHdpZHRoIGJlY2F1c2UgaGUnbGwgYmUgcm90YXRlZCA5MCBkZWcNCiAgIHZhciBmbG9vciA9IGZseUFyZWE7DQogICB2YXIgbW92ZXkgPSBNYXRoLm1heCgwLCBmbG9vciAtIHBsYXllcmJvdHRvbSk7DQogICAkKCIjcGxheWVyIikudHJhbnNpdGlvbih7IHk6IG1vdmV5ICsgJ3B4Jywgcm90YXRlOiA5MH0sIDEwMDAsICdlYXNlSW5PdXRDdWJpYycpOw0KICAgDQogICAvL2l0J3MgdGltZSB0byBjaGFuZ2Ugc3RhdGVzLiBhcyBvZiBub3cgd2UncmUgY29uc2lkZXJlZCBTY29yZVNjcmVlbiB0byBkaXNhYmxlIGxlZnQgY2xpY2svZmx5aW5nDQogICBjdXJyZW50c3RhdGUgPSBzdGF0ZXMuU2NvcmVTY3JlZW47DQoNCiAgIC8vZGVzdHJveSBvdXIgZ2FtZWxvb3BzDQogICBjbGVhckludGVydmFsKGxvb3BHYW1lbG9vcCk7DQogICBjbGVhckludGVydmFsKGxvb3BQaXBlbG9vcCk7DQogICBsb29wR2FtZWxvb3AgPSBudWxsOw0KICAgbG9vcFBpcGVsb29wID0gbnVsbDsNCg0KICAgLy9tb2JpbGUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBidXp6IGJpbmRPbmNlIGV2ZW50DQogICBpZihpc0luY29tcGF0aWJsZS5hbnkoKSkNCiAgIHsNCiAgICAgIC8vc2tpcCByaWdodCB0byBzaG93aW5nIHNjb3JlDQogICAgICBzaG93U2NvcmUoKTsNCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIC8vcGxheSB0aGUgaGl0IHNvdW5kICh0aGVuIHRoZSBkZWFkIHNvdW5kKSBhbmQgdGhlbiBzaG93IHNjb3JlDQogICAgICBzb3VuZEhpdC5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICBzb3VuZERpZS5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBzaG93U2NvcmUoKTsNCiAgICAgICAgIH0pOw0KICAgICAgfSk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHNob3dTY29yZSgpDQp7DQogICAvL3VuaGlkZSB1cw0KICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKTsNCiAgIA0KICAgLy9yZW1vdmUgdGhlIGJpZyBzY29yZQ0KICAgc2V0QmlnU2NvcmUodHJ1ZSk7DQogICANCiAgIC8vaGF2ZSB0aGV5IGJlYXRlbiB0aGVpciBoaWdoIHNjb3JlPw0KICAgaWYoc2NvcmUgPiBoaWdoc2NvcmUpDQogICB7DQogICAgICAvL3llYWghDQogICAgICBoaWdoc2NvcmUgPSBzY29yZTsNCiAgICAgIC8vc2F2ZSBpdCENCiAgICAgIHNldENvb2tpZSgiaGlnaHNjb3JlIiwgaGlnaHNjb3JlLCA5OTkpOw0KICAgfQ0KICAgDQogICAvL3VwZGF0ZSB0aGUgc2NvcmVib2FyZA0KICAgc2V0U21hbGxTY29yZSgpOw0KICAgc2V0SGlnaFNjb3JlKCk7DQogICB2YXIgd29ubWVkYWwgPSBzZXRNZWRhbCgpOw0KICAgDQogICAvL1NXT09TSCENCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9zaG93IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcyh7IHk6ICc0MHB4Jywgb3BhY2l0eTogMCB9KTsgLy9tb3ZlIGl0IGRvd24gc28gd2UgY2FuIHNsaWRlIGl0IHVwDQogICAkKCIjcmVwbGF5IikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOw0KICAgJCgiI3Njb3JlYm9hcmQiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJywgZnVuY3Rpb24oKSB7DQogICAgICAvL1doZW4gdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBhbmltYXRlIGluIHRoZSByZXBsYXkgYnV0dG9uIGFuZCBTV09PU0ghDQogICAgICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICAgICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICAgICAkKCIjcmVwbGF5IikudHJhbnNpdGlvbih7IHk6ICcwcHgnLCBvcGFjaXR5OiAxfSwgNjAwLCAnZWFzZScpOw0KICAgICAgDQogICAgICAvL2Fsc28gYW5pbWF0ZSBpbiB0aGUgTUVEQUwhIFdPTyENCiAgICAgIGlmKHdvbm1lZGFsKQ0KICAgICAgew0KICAgICAgICAgJCgiI21lZGFsIikuY3NzKHsgc2NhbGU6IDIsIG9wYWNpdHk6IDAgfSk7DQogICAgICAgICAkKCIjbWVkYWwiKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSwgc2NhbGU6IDEgfSwgMTIwMCwgJ2Vhc2UnKTsNCiAgICAgIH0NCiAgIH0pOw0KICAgDQogICAvL21ha2UgdGhlIHJlcGxheSBidXR0b24gY2xpY2thYmxlDQogICByZXBsYXljbGlja2FibGUgPSB0cnVlOw0KDQogICAvLyBHcmFzc1IwMHQ6IGFkZGVkIGZvciBjb21tdW5pY2F0aW5nIHRoZSBzY29yZS4NCiAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdncmFzc1Jvb3QuZ2FtZUVuZGVkJywge2RldGFpbDogeyBzY29yZTogc2NvcmUgfSB9KSk7DQp9DQoNCiQoIiNyZXBsYXkiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgIC8vbWFrZSBzdXJlIHdlIGNhbiBvbmx5IGNsaWNrIG9uY2UNCiAgIGlmKCFyZXBsYXljbGlja2FibGUpDQogICAgICByZXR1cm47DQogICBlbHNlDQogICAgICByZXBsYXljbGlja2FibGUgPSBmYWxzZTsNCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnLTQwcHgnLCBvcGFjaXR5OiAwfSwgMTAwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vd2hlbiB0aGF0J3MgZG9uZSwgZGlzcGxheSB1cyBiYWNrIHRvIG5vdGhpbmcNCiAgICAgICQoIiNzY29yZWJvYXJkIikuY3NzKCJkaXNwbGF5IiwgIm5vbmUiKTsNCiAgICAgIA0KICAgICAgLy9zdGFydCB0aGUgZ2FtZSBvdmVyIQ0KICAgICAgc2hvd1NwbGFzaCgpOw0KICAgfSk7DQp9KTsNCg0KZnVuY3Rpb24gcGxheWVyU2NvcmUoKQ0Kew0KICAgc2NvcmUgKz0gMTsNCiAgIC8vcGxheSBzY29yZSBzb3VuZA0KICAgc291bmRTY29yZS5zdG9wKCk7DQogICBzb3VuZFNjb3JlLnBsYXkoKTsNCiAgIHNldEJpZ1Njb3JlKCk7DQp9DQoNCmZ1bmN0aW9uIHVwZGF0ZVBpcGVzKCkNCnsNCiAgIC8vRG8gYW55IHBpcGVzIG5lZWQgcmVtb3ZhbD8NCiAgICQoIi5waXBlIikuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gJCh0aGlzKS5wb3NpdGlvbigpLmxlZnQgPD0gLTEwMDsgfSkucmVtb3ZlKCkNCiAgIA0KICAgLy9hZGQgYSBuZXcgcGlwZSAodG9wIGhlaWdodCArIGJvdHRvbSBoZWlnaHQgICsgcGlwZWhlaWdodCA9PSBmbHlBcmVhKSBhbmQgcHV0IGl0IGluIG91ciB0cmFja2VyDQogICB2YXIgcGFkZGluZyA9IDgwOw0KICAgdmFyIGNvbnN0cmFpbnQgPSBmbHlBcmVhIC0gcGlwZWhlaWdodCAtIChwYWRkaW5nICogMik7IC8vZG91YmxlIHBhZGRpbmcgKGZvciB0b3AgYW5kIGJvdHRvbSkNCiAgIHZhciB0b3BoZWlnaHQgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpKmNvbnN0cmFpbnQpICsgcGFkZGluZyk7IC8vYWRkIGxvd2VyIHBhZGRpbmcNCiAgIHZhciBib3R0b21oZWlnaHQgPSAoZmx5QXJlYSAtIHBpcGVoZWlnaHQpIC0gdG9waGVpZ2h0Ow0KICAgdmFyIG5ld3BpcGUgPSAkKCc8ZGl2IGNsYXNzPSJwaXBlIGFuaW1hdGVkIj48ZGl2IGNsYXNzPSJwaXBlX3VwcGVyIiBzdHlsZT0iaGVpZ2h0OiAnICsgdG9waGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PGRpdiBjbGFzcz0icGlwZV9sb3dlciIgc3R5bGU9ImhlaWdodDogJyArIGJvdHRvbWhlaWdodCArICdweDsiPjwvZGl2PjwvZGl2PicpOw0KICAgJCgiI2ZseWFyZWEiKS5hcHBlbmQobmV3cGlwZSk7DQogICBwaXBlcy5wdXNoKG5ld3BpcGUpOw0KfQ0KDQp2YXIgaXNJbmNvbXBhdGlibGUgPSB7DQogICBBbmRyb2lkOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpOw0KICAgfSwNCiAgIEJsYWNrQmVycnk6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0JsYWNrQmVycnkvaSk7DQogICB9LA0KICAgaU9TOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpOw0KICAgfSwNCiAgIE9wZXJhOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpOw0KICAgfSwNCiAgIFNhZmFyaTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09TIFguKlNhZmFyaS8pICYmICEgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lLykpOw0KICAgfSwNCiAgIFdpbmRvd3M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0lFTW9iaWxlL2kpOw0KICAgfSwNCiAgIGFueTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKGlzSW5jb21wYXRpYmxlLkFuZHJvaWQoKSB8fCBpc0luY29tcGF0aWJsZS5CbGFja0JlcnJ5KCkgfHwgaXNJbmNvbXBhdGlibGUuaU9TKCkgfHwgaXNJbmNvbXBhdGlibGUuT3BlcmEoKSB8fCBpc0luY29tcGF0aWJsZS5TYWZhcmkoKSB8fCBpc0luY29tcGF0aWJsZS5XaW5kb3dzKCkpOw0KICAgfQ0KfTs=",
    "2020.02.04 01:19": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkYXBwJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfd2luZy5vZ2dfY291bnQiKTsNCnZhciBzb3VuZFNjb3JlID0gbmV3IGJ1enouc291bmQoImh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkYXBwJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZzZnhfcG9pbnQub2dnX2NvdW50Iik7DQp2YXIgc291bmRIaXQgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmRhcHAlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9oaXQub2dnX2NvdW50Iik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmRhcHAlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9kaWUub2dnX2NvdW50Iik7DQp2YXIgc291bmRTd29vc2ggPSBuZXcgYnV6ei5zb3VuZCgiaHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmRhcHAlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRnNmeF9zd29vc2hpbmcub2dnX2NvdW50Iik7DQpidXp6LmFsbCgpLnNldFZvbHVtZSh2b2x1bWUpOw0KDQovL2xvb3BzDQp2YXIgbG9vcEdhbWVsb29wOw0KdmFyIGxvb3BQaXBlbG9vcDsNCg0KJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7DQogICBpZih3aW5kb3cubG9jYXRpb24uc2VhcmNoID09ICI/ZGVidWciKQ0KICAgICAgZGVidWdtb2RlID0gdHJ1ZTsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9lYXN5IikNCiAgICAgIHBpcGVoZWlnaHQgPSAyMDA7DQogICANCiAgIC8vZ2V0IHRoZSBoaWdoc2NvcmUNCiAgIHZhciBzYXZlZHNjb3JlID0gZ2V0Q29va2llKCJoaWdoc2NvcmUiKTsNCiAgIGlmKHNhdmVkc2NvcmUgIT0gIiIpDQogICAgICBoaWdoc2NvcmUgPSBwYXJzZUludChzYXZlZHNjb3JlKTsNCiAgIA0KICAgLy9zdGFydCB3aXRoIHRoZSBzcGxhc2ggc2NyZWVuDQogICBzaG93U3BsYXNoKCk7DQp9KTsNCg0KZnVuY3Rpb24gZ2V0Q29va2llKGNuYW1lKQ0Kew0KICAgdmFyIG5hbWUgPSBjbmFtZSArICI9IjsNCiAgIHZhciBjYSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdCgnOycpOw0KICAgZm9yKHZhciBpPTA7IGk8Y2EubGVuZ3RoOyBpKyspIA0KICAgew0KICAgICAgdmFyIGMgPSBjYVtpXS50cmltKCk7DQogICAgICBpZiAoYy5pbmRleE9mKG5hbWUpPT0wKSByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsYy5sZW5ndGgpOw0KICAgfQ0KICAgcmV0dXJuICIiOw0KfQ0KDQpmdW5jdGlvbiBzZXRDb29raWUoY25hbWUsY3ZhbHVlLGV4ZGF5cykNCnsNCiAgIHZhciBkID0gbmV3IERhdGUoKTsNCiAgIGQuc2V0VGltZShkLmdldFRpbWUoKSsoZXhkYXlzKjI0KjYwKjYwKjEwMDApKTsNCiAgIHZhciBleHBpcmVzID0gImV4cGlyZXM9IitkLnRvR01UU3RyaW5nKCk7DQogICBkb2N1bWVudC5jb29raWUgPSBjbmFtZSArICI9IiArIGN2YWx1ZSArICI7ICIgKyBleHBpcmVzOw0KfQ0KDQpmdW5jdGlvbiBzaG93U3BsYXNoKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TcGxhc2hTY3JlZW47DQogICANCiAgIC8vc2V0IHRoZSBkZWZhdWx0cyAoYWdhaW4pDQogICB2ZWxvY2l0eSA9IDA7DQogICBwb3NpdGlvbiA9IDE4MDsNCiAgIHJvdGF0aW9uID0gMDsNCiAgIHNjb3JlID0gMDsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBpbiBwcmVwYXJhdGlvbiBmb3IgdGhlIG5leHQgZ2FtZQ0KICAgJCgiI3BsYXllciIpLmNzcyh7IHk6IDAsIHg6IDB9KTsNCiAgIHVwZGF0ZVBsYXllcigkKCIjcGxheWVyIikpOw0KICAgDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vY2xlYXIgb3V0IGFsbCB0aGUgcGlwZXMgaWYgdGhlcmUgYXJlIGFueQ0KICAgJCgiLnBpcGUiKS5yZW1vdmUoKTsNCiAgIHBpcGVzID0gbmV3IEFycmF5KCk7DQogICANCiAgIC8vbWFrZSBldmVyeXRoaW5nIGFuaW1hdGVkIGFnYWluDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgICQoIi5hbmltYXRlZCIpLmNzcygnLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZScsICdydW5uaW5nJyk7DQogICANCiAgIC8vZmFkZSBpbiB0aGUgc3BsYXNoDQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDEgfSwgMjAwMCwgJ2Vhc2UnKTsNCn0NCg0KZnVuY3Rpb24gc3RhcnRHYW1lKCkNCnsNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5HYW1lU2NyZWVuOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS5zdG9wKCk7DQogICAkKCIjc3BsYXNoIikudHJhbnNpdGlvbih7IG9wYWNpdHk6IDAgfSwgNTAwLCAnZWFzZScpOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSgpOw0KICAgDQogICAvL2RlYnVnIG1vZGU/DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICAvL3Nob3cgdGhlIGJvdW5kaW5nIGJveGVzDQogICAgICAkKCIuYm91bmRpbmdib3giKS5zaG93KCk7DQogICB9DQoNCiAgIC8vc3RhcnQgdXAgb3VyIGxvb3BzDQogICB2YXIgdXBkYXRlcmF0ZSA9IDEwMDAuMCAvIDYwLjAgOyAvLzYwIHRpbWVzIGEgc2Vjb25kDQogICBsb29wR2FtZWxvb3AgPSBzZXRJbnRlcnZhbChnYW1lbG9vcCwgdXBkYXRlcmF0ZSk7DQogICBsb29wUGlwZWxvb3AgPSBzZXRJbnRlcnZhbCh1cGRhdGVQaXBlcywgMTQwMCk7DQogICANCiAgIC8vanVtcCBmcm9tIHRoZSBzdGFydCENCiAgIHBsYXllckp1bXAoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGxheWVyKHBsYXllcikNCnsNCiAgIC8vcm90YXRpb24NCiAgIHJvdGF0aW9uID0gTWF0aC5taW4oKHZlbG9jaXR5IC8gMTApICogOTAsIDkwKTsNCiAgIA0KICAgLy9hcHBseSByb3RhdGlvbiBhbmQgcG9zaXRpb24NCiAgICQocGxheWVyKS5jc3MoeyByb3RhdGU6IHJvdGF0aW9uLCB0b3A6IHBvc2l0aW9uIH0pOw0KfQ0KDQpmdW5jdGlvbiBnYW1lbG9vcCgpIHsNCiAgIHZhciBwbGF5ZXIgPSAkKCIjcGxheWVyIik7DQogICANCiAgIC8vdXBkYXRlIHRoZSBwbGF5ZXIgc3BlZWQvcG9zaXRpb24NCiAgIHZlbG9jaXR5ICs9IGdyYXZpdHk7DQogICBwb3NpdGlvbiArPSB2ZWxvY2l0eTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllcg0KICAgdXBkYXRlUGxheWVyKHBsYXllcik7DQogICANCiAgIC8vY3JlYXRlIHRoZSBib3VuZGluZyBib3gNCiAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxheWVyJykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7DQogICB2YXIgb3JpZ3dpZHRoID0gMzQuMDsNCiAgIHZhciBvcmlnaGVpZ2h0ID0gMjQuMDsNCiAgIA0KICAgdmFyIGJveHdpZHRoID0gb3JpZ3dpZHRoIC0gKE1hdGguc2luKE1hdGguYWJzKHJvdGF0aW9uKSAvIDkwKSAqIDgpOw0KICAgdmFyIGJveGhlaWdodCA9IChvcmlnaGVpZ2h0ICsgYm94LmhlaWdodCkgLyAyOw0KICAgdmFyIGJveGxlZnQgPSAoKGJveC53aWR0aCAtIGJveHdpZHRoKSAvIDIpICsgYm94LmxlZnQ7DQogICB2YXIgYm94dG9wID0gKChib3guaGVpZ2h0IC0gYm94aGVpZ2h0KSAvIDIpICsgYm94LnRvcDsNCiAgIHZhciBib3hyaWdodCA9IGJveGxlZnQgKyBib3h3aWR0aDsNCiAgIHZhciBib3hib3R0b20gPSBib3h0b3AgKyBib3hoZWlnaHQ7DQogICANCiAgIC8vaWYgd2UncmUgaW4gZGVidWcgbW9kZSwgZHJhdyB0aGUgYm91bmRpbmcgYm94DQogICBpZihkZWJ1Z21vZGUpDQogICB7DQogICAgICB2YXIgYm91bmRpbmdib3ggPSAkKCIjcGxheWVyYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBib3hsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgYm94dG9wKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnaGVpZ2h0JywgYm94aGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBib3h3aWR0aCk7DQogICB9DQogICANCiAgIC8vZGlkIHdlIGhpdCB0aGUgZ3JvdW5kPw0KICAgaWYoYm94LmJvdHRvbSA+PSAkKCIjbGFuZCIpLm9mZnNldCgpLnRvcCkNCiAgIHsNCiAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgIHJldHVybjsNCiAgIH0NCiAgIA0KICAgLy9oYXZlIHRoZXkgdHJpZWQgdG8gZXNjYXBlIHRocm91Z2ggdGhlIGNlaWxpbmc/IDpvDQogICB2YXIgY2VpbGluZyA9ICQoIiNjZWlsaW5nIik7DQogICBpZihib3h0b3AgPD0gKGNlaWxpbmcub2Zmc2V0KCkudG9wICsgY2VpbGluZy5oZWlnaHQoKSkpDQogICAgICBwb3NpdGlvbiA9IDA7DQogICANCiAgIC8vd2UgY2FuJ3QgZ28gYW55IGZ1cnRoZXIgd2l0aG91dCBhIHBpcGUNCiAgIGlmKHBpcGVzWzBdID09IG51bGwpDQogICAgICByZXR1cm47DQogICANCiAgIC8vZGV0ZXJtaW5lIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIG5leHQgcGlwZXMgaW5uZXIgYXJlYQ0KICAgdmFyIG5leHRwaXBlID0gcGlwZXNbMF07DQogICB2YXIgbmV4dHBpcGV1cHBlciA9IG5leHRwaXBlLmNoaWxkcmVuKCIucGlwZV91cHBlciIpOw0KICAgDQogICB2YXIgcGlwZXRvcCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkudG9wICsgbmV4dHBpcGV1cHBlci5oZWlnaHQoKTsNCiAgIHZhciBwaXBlbGVmdCA9IG5leHRwaXBldXBwZXIub2Zmc2V0KCkubGVmdCAtIDI7IC8vIGZvciBzb21lIHJlYXNvbiBpdCBzdGFydHMgYXQgdGhlIGlubmVyIHBpcGVzIG9mZnNldCwgbm90IHRoZSBvdXRlciBwaXBlcy4NCiAgIHZhciBwaXBlcmlnaHQgPSBwaXBlbGVmdCArIHBpcGV3aWR0aDsNCiAgIHZhciBwaXBlYm90dG9tID0gcGlwZXRvcCArIHBpcGVoZWlnaHQ7DQogICANCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwaXBlYm94Iik7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2xlZnQnLCBwaXBlbGVmdCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ3RvcCcsIHBpcGV0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBwaXBlaGVpZ2h0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnd2lkdGgnLCBwaXBld2lkdGgpOw0KICAgfQ0KICAgDQogICAvL2hhdmUgd2UgZ290dGVuIGluc2lkZSB0aGUgcGlwZSB5ZXQ/DQogICBpZihib3hyaWdodCA+IHBpcGVsZWZ0KQ0KICAgew0KICAgICAgLy93ZSdyZSB3aXRoaW4gdGhlIHBpcGUsIGhhdmUgd2UgcGFzc2VkIGJldHdlZW4gdXBwZXIgYW5kIGxvd2VyIHBpcGVzPw0KICAgICAgaWYoYm94dG9wID4gcGlwZXRvcCAmJiBib3hib3R0b20gPCBwaXBlYm90dG9tKQ0KICAgICAgew0KICAgICAgICAgLy95ZWFoISB3ZSdyZSB3aXRoaW4gYm91bmRzDQogICAgICAgICANCiAgICAgIH0NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICAgIC8vbm8hIHdlIHRvdWNoZWQgdGhlIHBpcGUNCiAgICAgICAgIHBsYXllckRlYWQoKTsNCiAgICAgICAgIHJldHVybjsNCiAgICAgIH0NCiAgIH0NCiAgIA0KICAgDQogICAvL2hhdmUgd2UgcGFzc2VkIHRoZSBpbW1pbmVudCBkYW5nZXI/DQogICBpZihib3hsZWZ0ID4gcGlwZXJpZ2h0KQ0KICAgew0KICAgICAgLy95ZXMsIHJlbW92ZSBpdA0KICAgICAgcGlwZXMuc3BsaWNlKDAsIDEpOw0KICAgICAgDQogICAgICAvL2FuZCBzY29yZSBhIHBvaW50DQogICAgICBwbGF5ZXJTY29yZSgpOw0KICAgfQ0KfQ0KDQovL0hhbmRsZSBzcGFjZSBiYXINCiQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24oZSl7DQogICAvL3NwYWNlIGJhciENCiAgIGlmKGUua2V5Q29kZSA9PSAzMikNCiAgIHsNCiAgICAgIC8vaW4gU2NvcmVTY3JlZW4sIGhpdHRpbmcgc3BhY2Ugc2hvdWxkIGNsaWNrIHRoZSAicmVwbGF5IiBidXR0b24uIGVsc2UgaXQncyBqdXN0IGEgcmVndWxhciBzcGFjZWJhciBoaXQNCiAgICAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU2NvcmVTY3JlZW4pDQogICAgICAgICAkKCIjcmVwbGF5IikuY2xpY2soKTsNCiAgICAgIGVsc2UNCiAgICAgICAgIHNjcmVlbkNsaWNrKCk7DQogICB9DQp9KTsNCg0KLy9IYW5kbGUgbW91c2UgZG93biBPUiB0b3VjaCBzdGFydA0KaWYoIm9udG91Y2hzdGFydCIgaW4gd2luZG93KQ0KICAgJChkb2N1bWVudCkub24oInRvdWNoc3RhcnQiLCBzY3JlZW5DbGljayk7DQplbHNlDQogICAkKGRvY3VtZW50KS5vbigibW91c2Vkb3duIiwgc2NyZWVuQ2xpY2spOw0KDQpmdW5jdGlvbiBzY3JlZW5DbGljaygpDQp7DQogICBpZihjdXJyZW50c3RhdGUgPT0gc3RhdGVzLkdhbWVTY3JlZW4pDQogICB7DQogICAgICBwbGF5ZXJKdW1wKCk7DQogICB9DQogICBlbHNlIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuU3BsYXNoU2NyZWVuKQ0KICAgew0KICAgICAgc3RhcnRHYW1lKCk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHBsYXllckp1bXAoKQ0Kew0KICAgdmVsb2NpdHkgPSBqdW1wOw0KICAgLy9wbGF5IGp1bXAgc291bmQNCiAgIHNvdW5kSnVtcC5zdG9wKCk7DQogICBzb3VuZEp1bXAucGxheSgpOw0KfQ0KDQpmdW5jdGlvbiBzZXRCaWdTY29yZShlcmFzZSkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjYmlnc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICBpZihlcmFzZSkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZGFwcCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9iaWdfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0U21hbGxTY29yZSgpDQp7DQogICB2YXIgZWxlbXNjb3JlID0gJCgiI2N1cnJlbnRzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIHZhciBkaWdpdHMgPSBzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmRhcHAlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0SGlnaFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjaGlnaHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IGhpZ2hzY29yZS50b1N0cmluZygpLnNwbGl0KCcnKTsNCiAgIGZvcih2YXIgaSA9IDA7IGkgPCBkaWdpdHMubGVuZ3RoOyBpKyspDQogICAgICBlbGVtc2NvcmUuYXBwZW5kKCI8aW1nIHNyYz0naHR0cHM6Ly9ub2Rlcy10ZXN0bmV0LndhdmVzbm9kZXMuY29tL2FkZHJlc3Nlcy9kYXRhL3dlYiUyQmRhcHAlM0ElMkYlMkYzTXNTM29EWHhxREoydm16Y3ZCUWVRTGtUaG1NbXVvak43NCUyRmZvbnRfc21hbGxfIiArIGRpZ2l0c1tpXSArICIucG5nX2NvdW50JyBhbHQ9JyIgKyBkaWdpdHNbaV0gKyAiJz4iKTsNCn0NCg0KZnVuY3Rpb24gc2V0TWVkYWwoKQ0Kew0KICAgdmFyIGVsZW1tZWRhbCA9ICQoIiNtZWRhbCIpOw0KICAgZWxlbW1lZGFsLmVtcHR5KCk7DQogICANCiAgIGlmKHNjb3JlIDwgMTApDQogICAgICAvL3NpZ25hbCB0aGF0IG5vIG1lZGFsIGhhcyBiZWVuIHdvbg0KICAgICAgcmV0dXJuIGZhbHNlOw0KICAgDQogICBpZihzY29yZSA+PSAxMCkNCiAgICAgIG1lZGFsID0gImJyb256ZSI7DQogICBpZihzY29yZSA+PSAyMCkNCiAgICAgIG1lZGFsID0gInNpbHZlciI7DQogICBpZihzY29yZSA+PSAzMCkNCiAgICAgIG1lZGFsID0gImdvbGQiOw0KICAgaWYoc2NvcmUgPj0gNDApDQogICAgICBtZWRhbCA9ICJwbGF0aW51bSI7DQogICANCiAgIGVsZW1tZWRhbC5hcHBlbmQoJzxpbWcgc3JjPSJodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZGFwcCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGbWVkYWxfJyArIG1lZGFsICsnLnBuZ19jb3VudCIgYWx0PSInICsgbWVkYWwgKyciPicpOw0KICAgDQogICAvL3NpZ25hbCB0aGF0IGEgbWVkYWwgaGFzIGJlZW4gd29uDQogICByZXR1cm4gdHJ1ZTsNCn0NCg0KZnVuY3Rpb24gcGxheWVyRGVhZCgpDQp7DQogICAvL3N0b3AgYW5pbWF0aW5nIGV2ZXJ5dGhpbmchDQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJ2FuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3BhdXNlZCcpOw0KICAgDQogICAvL2Ryb3AgdGhlIGJpcmQgdG8gdGhlIGZsb29yDQogICB2YXIgcGxheWVyYm90dG9tID0gJCgiI3BsYXllciIpLnBvc2l0aW9uKCkudG9wICsgJCgiI3BsYXllciIpLndpZHRoKCk7IC8vd2UgdXNlIHdpZHRoIGJlY2F1c2UgaGUnbGwgYmUgcm90YXRlZCA5MCBkZWcNCiAgIHZhciBmbG9vciA9IGZseUFyZWE7DQogICB2YXIgbW92ZXkgPSBNYXRoLm1heCgwLCBmbG9vciAtIHBsYXllcmJvdHRvbSk7DQogICAkKCIjcGxheWVyIikudHJhbnNpdGlvbih7IHk6IG1vdmV5ICsgJ3B4Jywgcm90YXRlOiA5MH0sIDEwMDAsICdlYXNlSW5PdXRDdWJpYycpOw0KICAgDQogICAvL2l0J3MgdGltZSB0byBjaGFuZ2Ugc3RhdGVzLiBhcyBvZiBub3cgd2UncmUgY29uc2lkZXJlZCBTY29yZVNjcmVlbiB0byBkaXNhYmxlIGxlZnQgY2xpY2svZmx5aW5nDQogICBjdXJyZW50c3RhdGUgPSBzdGF0ZXMuU2NvcmVTY3JlZW47DQoNCiAgIC8vZGVzdHJveSBvdXIgZ2FtZWxvb3BzDQogICBjbGVhckludGVydmFsKGxvb3BHYW1lbG9vcCk7DQogICBjbGVhckludGVydmFsKGxvb3BQaXBlbG9vcCk7DQogICBsb29wR2FtZWxvb3AgPSBudWxsOw0KICAgbG9vcFBpcGVsb29wID0gbnVsbDsNCg0KICAgLy9tb2JpbGUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCBidXp6IGJpbmRPbmNlIGV2ZW50DQogICBpZihpc0luY29tcGF0aWJsZS5hbnkoKSkNCiAgIHsNCiAgICAgIC8vc2tpcCByaWdodCB0byBzaG93aW5nIHNjb3JlDQogICAgICBzaG93U2NvcmUoKTsNCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAgIC8vcGxheSB0aGUgaGl0IHNvdW5kICh0aGVuIHRoZSBkZWFkIHNvdW5kKSBhbmQgdGhlbiBzaG93IHNjb3JlDQogICAgICBzb3VuZEhpdC5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICBzb3VuZERpZS5wbGF5KCkuYmluZE9uY2UoImVuZGVkIiwgZnVuY3Rpb24oKSB7DQogICAgICAgICAgICBzaG93U2NvcmUoKTsNCiAgICAgICAgIH0pOw0KICAgICAgfSk7DQogICB9DQp9DQoNCmZ1bmN0aW9uIHNob3dTY29yZSgpDQp7DQogICAvL3VuaGlkZSB1cw0KICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAiYmxvY2siKTsNCiAgIA0KICAgLy9yZW1vdmUgdGhlIGJpZyBzY29yZQ0KICAgc2V0QmlnU2NvcmUodHJ1ZSk7DQogICANCiAgIC8vaGF2ZSB0aGV5IGJlYXRlbiB0aGVpciBoaWdoIHNjb3JlPw0KICAgaWYoc2NvcmUgPiBoaWdoc2NvcmUpDQogICB7DQogICAgICAvL3llYWghDQogICAgICBoaWdoc2NvcmUgPSBzY29yZTsNCiAgICAgIC8vc2F2ZSBpdCENCiAgICAgIHNldENvb2tpZSgiaGlnaHNjb3JlIiwgaGlnaHNjb3JlLCA5OTkpOw0KICAgfQ0KICAgDQogICAvL3VwZGF0ZSB0aGUgc2NvcmVib2FyZA0KICAgc2V0U21hbGxTY29yZSgpOw0KICAgc2V0SGlnaFNjb3JlKCk7DQogICB2YXIgd29ubWVkYWwgPSBzZXRNZWRhbCgpOw0KICAgDQogICAvL1NXT09TSCENCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9zaG93IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcyh7IHk6ICc0MHB4Jywgb3BhY2l0eTogMCB9KTsgLy9tb3ZlIGl0IGRvd24gc28gd2UgY2FuIHNsaWRlIGl0IHVwDQogICAkKCIjcmVwbGF5IikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOw0KICAgJCgiI3Njb3JlYm9hcmQiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJywgZnVuY3Rpb24oKSB7DQogICAgICAvL1doZW4gdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBhbmltYXRlIGluIHRoZSByZXBsYXkgYnV0dG9uIGFuZCBTV09PU0ghDQogICAgICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICAgICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICAgICAkKCIjcmVwbGF5IikudHJhbnNpdGlvbih7IHk6ICcwcHgnLCBvcGFjaXR5OiAxfSwgNjAwLCAnZWFzZScpOw0KICAgICAgDQogICAgICAvL2Fsc28gYW5pbWF0ZSBpbiB0aGUgTUVEQUwhIFdPTyENCiAgICAgIGlmKHdvbm1lZGFsKQ0KICAgICAgew0KICAgICAgICAgJCgiI21lZGFsIikuY3NzKHsgc2NhbGU6IDIsIG9wYWNpdHk6IDAgfSk7DQogICAgICAgICAkKCIjbWVkYWwiKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSwgc2NhbGU6IDEgfSwgMTIwMCwgJ2Vhc2UnKTsNCiAgICAgIH0NCiAgIH0pOw0KICAgDQogICAvL21ha2UgdGhlIHJlcGxheSBidXR0b24gY2xpY2thYmxlDQogICByZXBsYXljbGlja2FibGUgPSB0cnVlOw0KDQogICAvLyBHcmFzc1IwMHQ6IGFkZGVkIGZvciBjb21tdW5pY2F0aW5nIHRoZSBzY29yZS4NCiAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdncmFzc1Jvb3QuZ2FtZUVuZGVkJywge2RldGFpbDogeyBzY29yZTogc2NvcmUgfSB9KSk7DQp9DQoNCiQoIiNyZXBsYXkiKS5jbGljayhmdW5jdGlvbigpIHsNCiAgIC8vbWFrZSBzdXJlIHdlIGNhbiBvbmx5IGNsaWNrIG9uY2UNCiAgIGlmKCFyZXBsYXljbGlja2FibGUpDQogICAgICByZXR1cm47DQogICBlbHNlDQogICAgICByZXBsYXljbGlja2FibGUgPSBmYWxzZTsNCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL2ZhZGUgb3V0IHRoZSBzY29yZWJvYXJkDQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnLTQwcHgnLCBvcGFjaXR5OiAwfSwgMTAwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vd2hlbiB0aGF0J3MgZG9uZSwgZGlzcGxheSB1cyBiYWNrIHRvIG5vdGhpbmcNCiAgICAgICQoIiNzY29yZWJvYXJkIikuY3NzKCJkaXNwbGF5IiwgIm5vbmUiKTsNCiAgICAgIA0KICAgICAgLy9zdGFydCB0aGUgZ2FtZSBvdmVyIQ0KICAgICAgc2hvd1NwbGFzaCgpOw0KICAgfSk7DQp9KTsNCg0KZnVuY3Rpb24gcGxheWVyU2NvcmUoKQ0Kew0KICAgc2NvcmUgKz0gMTsNCiAgIC8vcGxheSBzY29yZSBzb3VuZA0KICAgc291bmRTY29yZS5zdG9wKCk7DQogICBzb3VuZFNjb3JlLnBsYXkoKTsNCiAgIHNldEJpZ1Njb3JlKCk7DQp9DQoNCmZ1bmN0aW9uIHVwZGF0ZVBpcGVzKCkNCnsNCiAgIC8vRG8gYW55IHBpcGVzIG5lZWQgcmVtb3ZhbD8NCiAgICQoIi5waXBlIikuZmlsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4gJCh0aGlzKS5wb3NpdGlvbigpLmxlZnQgPD0gLTEwMDsgfSkucmVtb3ZlKCkNCiAgIA0KICAgLy9hZGQgYSBuZXcgcGlwZSAodG9wIGhlaWdodCArIGJvdHRvbSBoZWlnaHQgICsgcGlwZWhlaWdodCA9PSBmbHlBcmVhKSBhbmQgcHV0IGl0IGluIG91ciB0cmFja2VyDQogICB2YXIgcGFkZGluZyA9IDgwOw0KICAgdmFyIGNvbnN0cmFpbnQgPSBmbHlBcmVhIC0gcGlwZWhlaWdodCAtIChwYWRkaW5nICogMik7IC8vZG91YmxlIHBhZGRpbmcgKGZvciB0b3AgYW5kIGJvdHRvbSkNCiAgIHZhciB0b3BoZWlnaHQgPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpKmNvbnN0cmFpbnQpICsgcGFkZGluZyk7IC8vYWRkIGxvd2VyIHBhZGRpbmcNCiAgIHZhciBib3R0b21oZWlnaHQgPSAoZmx5QXJlYSAtIHBpcGVoZWlnaHQpIC0gdG9waGVpZ2h0Ow0KICAgdmFyIG5ld3BpcGUgPSAkKCc8ZGl2IGNsYXNzPSJwaXBlIGFuaW1hdGVkIj48ZGl2IGNsYXNzPSJwaXBlX3VwcGVyIiBzdHlsZT0iaGVpZ2h0OiAnICsgdG9waGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PGRpdiBjbGFzcz0icGlwZV9sb3dlciIgc3R5bGU9ImhlaWdodDogJyArIGJvdHRvbWhlaWdodCArICdweDsiPjwvZGl2PjwvZGl2PicpOw0KICAgJCgiI2ZseWFyZWEiKS5hcHBlbmQobmV3cGlwZSk7DQogICBwaXBlcy5wdXNoKG5ld3BpcGUpOw0KfQ0KDQp2YXIgaXNJbmNvbXBhdGlibGUgPSB7DQogICBBbmRyb2lkOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9BbmRyb2lkL2kpOw0KICAgfSwNCiAgIEJsYWNrQmVycnk6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0JsYWNrQmVycnkvaSk7DQogICB9LA0KICAgaU9TOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmV8aVBhZHxpUG9kL2kpOw0KICAgfSwNCiAgIE9wZXJhOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9PcGVyYSBNaW5pL2kpOw0KICAgfSwNCiAgIFNhZmFyaTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09TIFguKlNhZmFyaS8pICYmICEgbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lLykpOw0KICAgfSwNCiAgIFdpbmRvd3M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0lFTW9iaWxlL2kpOw0KICAgfSwNCiAgIGFueTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gKGlzSW5jb21wYXRpYmxlLkFuZHJvaWQoKSB8fCBpc0luY29tcGF0aWJsZS5CbGFja0JlcnJ5KCkgfHwgaXNJbmNvbXBhdGlibGUuaU9TKCkgfHwgaXNJbmNvbXBhdGlibGUuT3BlcmEoKSB8fCBpc0luY29tcGF0aWJsZS5TYWZhcmkoKSB8fCBpc0luY29tcGF0aWJsZS5XaW5kb3dzKCkpOw0KICAgfQ0KfTs=",
    "2020.02.04 01:18": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3dpbmcub2dnIik7DQp2YXIgc291bmRTY29yZSA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9wb2ludC5vZ2ciKTsNCnZhciBzb3VuZEhpdCA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9oaXQub2dnIik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiYXNzZXRzL3NvdW5kcy9zZnhfZGllLm9nZyIpOw0KdmFyIHNvdW5kU3dvb3NoID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3N3b29zaGluZy5vZ2ciKTsNCmJ1enouYWxsKCkuc2V0Vm9sdW1lKHZvbHVtZSk7DQoNCi8vbG9vcHMNCnZhciBsb29wR2FtZWxvb3A7DQp2YXIgbG9vcFBpcGVsb29wOw0KDQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9kZWJ1ZyIpDQogICAgICBkZWJ1Z21vZGUgPSB0cnVlOw0KICAgaWYod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAiP2Vhc3kiKQ0KICAgICAgcGlwZWhlaWdodCA9IDIwMDsNCiAgIA0KICAgLy9nZXQgdGhlIGhpZ2hzY29yZQ0KICAgdmFyIHNhdmVkc2NvcmUgPSBnZXRDb29raWUoImhpZ2hzY29yZSIpOw0KICAgaWYoc2F2ZWRzY29yZSAhPSAiIikNCiAgICAgIGhpZ2hzY29yZSA9IHBhcnNlSW50KHNhdmVkc2NvcmUpOw0KICAgDQogICAvL3N0YXJ0IHdpdGggdGhlIHNwbGFzaCBzY3JlZW4NCiAgIHNob3dTcGxhc2goKTsNCn0pOw0KDQpmdW5jdGlvbiBnZXRDb29raWUoY25hbWUpDQp7DQogICB2YXIgbmFtZSA9IGNuYW1lICsgIj0iOw0KICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7DQogICBmb3IodmFyIGk9MDsgaTxjYS5sZW5ndGg7IGkrKykgDQogICB7DQogICAgICB2YXIgYyA9IGNhW2ldLnRyaW0oKTsNCiAgICAgIGlmIChjLmluZGV4T2YobmFtZSk9PTApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCxjLmxlbmd0aCk7DQogICB9DQogICByZXR1cm4gIiI7DQp9DQoNCmZ1bmN0aW9uIHNldENvb2tpZShjbmFtZSxjdmFsdWUsZXhkYXlzKQ0Kew0KICAgdmFyIGQgPSBuZXcgRGF0ZSgpOw0KICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpKyhleGRheXMqMjQqNjAqNjAqMTAwMCkpOw0KICAgdmFyIGV4cGlyZXMgPSAiZXhwaXJlcz0iK2QudG9HTVRTdHJpbmcoKTsNCiAgIGRvY3VtZW50LmNvb2tpZSA9IGNuYW1lICsgIj0iICsgY3ZhbHVlICsgIjsgIiArIGV4cGlyZXM7DQp9DQoNCmZ1bmN0aW9uIHNob3dTcGxhc2goKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLlNwbGFzaFNjcmVlbjsNCiAgIA0KICAgLy9zZXQgdGhlIGRlZmF1bHRzIChhZ2FpbikNCiAgIHZlbG9jaXR5ID0gMDsNCiAgIHBvc2l0aW9uID0gMTgwOw0KICAgcm90YXRpb24gPSAwOw0KICAgc2NvcmUgPSAwOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyIGluIHByZXBhcmF0aW9uIGZvciB0aGUgbmV4dCBnYW1lDQogICAkKCIjcGxheWVyIikuY3NzKHsgeTogMCwgeDogMH0pOw0KICAgdXBkYXRlUGxheWVyKCQoIiNwbGF5ZXIiKSk7DQogICANCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9jbGVhciBvdXQgYWxsIHRoZSBwaXBlcyBpZiB0aGVyZSBhcmUgYW55DQogICAkKCIucGlwZSIpLnJlbW92ZSgpOw0KICAgcGlwZXMgPSBuZXcgQXJyYXkoKTsNCiAgIA0KICAgLy9tYWtlIGV2ZXJ5dGhpbmcgYW5pbWF0ZWQgYWdhaW4NCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncnVubmluZycpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgIA0KICAgLy9mYWRlIGluIHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSB9LCAyMDAwLCAnZWFzZScpOw0KfQ0KDQpmdW5jdGlvbiBzdGFydEdhbWUoKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLkdhbWVTY3JlZW47DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNwbGFzaA0KICAgJCgiI3NwbGFzaCIpLnN0b3AoKTsNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMCB9LCA1MDAsICdlYXNlJyk7DQogICANCiAgIC8vdXBkYXRlIHRoZSBiaWcgc2NvcmUNCiAgIHNldEJpZ1Njb3JlKCk7DQogICANCiAgIC8vZGVidWcgbW9kZT8NCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIC8vc2hvdyB0aGUgYm91bmRpbmcgYm94ZXMNCiAgICAgICQoIi5ib3VuZGluZ2JveCIpLnNob3coKTsNCiAgIH0NCg0KICAgLy9zdGFydCB1cCBvdXIgbG9vcHMNCiAgIHZhciB1cGRhdGVyYXRlID0gMTAwMC4wIC8gNjAuMCA7IC8vNjAgdGltZXMgYSBzZWNvbmQNCiAgIGxvb3BHYW1lbG9vcCA9IHNldEludGVydmFsKGdhbWVsb29wLCB1cGRhdGVyYXRlKTsNCiAgIGxvb3BQaXBlbG9vcCA9IHNldEludGVydmFsKHVwZGF0ZVBpcGVzLCAxNDAwKTsNCiAgIA0KICAgLy9qdW1wIGZyb20gdGhlIHN0YXJ0IQ0KICAgcGxheWVySnVtcCgpOw0KfQ0KDQpmdW5jdGlvbiB1cGRhdGVQbGF5ZXIocGxheWVyKQ0Kew0KICAgLy9yb3RhdGlvbg0KICAgcm90YXRpb24gPSBNYXRoLm1pbigodmVsb2NpdHkgLyAxMCkgKiA5MCwgOTApOw0KICAgDQogICAvL2FwcGx5IHJvdGF0aW9uIGFuZCBwb3NpdGlvbg0KICAgJChwbGF5ZXIpLmNzcyh7IHJvdGF0ZTogcm90YXRpb24sIHRvcDogcG9zaXRpb24gfSk7DQp9DQoNCmZ1bmN0aW9uIGdhbWVsb29wKCkgew0KICAgdmFyIHBsYXllciA9ICQoIiNwbGF5ZXIiKTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBzcGVlZC9wb3NpdGlvbg0KICAgdmVsb2NpdHkgKz0gZ3Jhdml0eTsNCiAgIHBvc2l0aW9uICs9IHZlbG9jaXR5Ow0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyDQogICB1cGRhdGVQbGF5ZXIocGxheWVyKTsNCiAgIA0KICAgLy9jcmVhdGUgdGhlIGJvdW5kaW5nIGJveA0KICAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXInKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgIHZhciBvcmlnd2lkdGggPSAzNC4wOw0KICAgdmFyIG9yaWdoZWlnaHQgPSAyNC4wOw0KICAgDQogICB2YXIgYm94d2lkdGggPSBvcmlnd2lkdGggLSAoTWF0aC5zaW4oTWF0aC5hYnMocm90YXRpb24pIC8gOTApICogOCk7DQogICB2YXIgYm94aGVpZ2h0ID0gKG9yaWdoZWlnaHQgKyBib3guaGVpZ2h0KSAvIDI7DQogICB2YXIgYm94bGVmdCA9ICgoYm94LndpZHRoIC0gYm94d2lkdGgpIC8gMikgKyBib3gubGVmdDsNCiAgIHZhciBib3h0b3AgPSAoKGJveC5oZWlnaHQgLSBib3hoZWlnaHQpIC8gMikgKyBib3gudG9wOw0KICAgdmFyIGJveHJpZ2h0ID0gYm94bGVmdCArIGJveHdpZHRoOw0KICAgdmFyIGJveGJvdHRvbSA9IGJveHRvcCArIGJveGhlaWdodDsNCiAgIA0KICAgLy9pZiB3ZSdyZSBpbiBkZWJ1ZyBtb2RlLCBkcmF3IHRoZSBib3VuZGluZyBib3gNCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwbGF5ZXJib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIGJveGxlZnQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd0b3AnLCBib3h0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBib3hoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIGJveHdpZHRoKTsNCiAgIH0NCiAgIA0KICAgLy9kaWQgd2UgaGl0IHRoZSBncm91bmQ/DQogICBpZihib3guYm90dG9tID49ICQoIiNsYW5kIikub2Zmc2V0KCkudG9wKQ0KICAgew0KICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgcmV0dXJuOw0KICAgfQ0KICAgDQogICAvL2hhdmUgdGhleSB0cmllZCB0byBlc2NhcGUgdGhyb3VnaCB0aGUgY2VpbGluZz8gOm8NCiAgIHZhciBjZWlsaW5nID0gJCgiI2NlaWxpbmciKTsNCiAgIGlmKGJveHRvcCA8PSAoY2VpbGluZy5vZmZzZXQoKS50b3AgKyBjZWlsaW5nLmhlaWdodCgpKSkNCiAgICAgIHBvc2l0aW9uID0gMDsNCiAgIA0KICAgLy93ZSBjYW4ndCBnbyBhbnkgZnVydGhlciB3aXRob3V0IGEgcGlwZQ0KICAgaWYocGlwZXNbMF0gPT0gbnVsbCkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgLy9kZXRlcm1pbmUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgbmV4dCBwaXBlcyBpbm5lciBhcmVhDQogICB2YXIgbmV4dHBpcGUgPSBwaXBlc1swXTsNCiAgIHZhciBuZXh0cGlwZXVwcGVyID0gbmV4dHBpcGUuY2hpbGRyZW4oIi5waXBlX3VwcGVyIik7DQogICANCiAgIHZhciBwaXBldG9wID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS50b3AgKyBuZXh0cGlwZXVwcGVyLmhlaWdodCgpOw0KICAgdmFyIHBpcGVsZWZ0ID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS5sZWZ0IC0gMjsgLy8gZm9yIHNvbWUgcmVhc29uIGl0IHN0YXJ0cyBhdCB0aGUgaW5uZXIgcGlwZXMgb2Zmc2V0LCBub3QgdGhlIG91dGVyIHBpcGVzLg0KICAgdmFyIHBpcGVyaWdodCA9IHBpcGVsZWZ0ICsgcGlwZXdpZHRoOw0KICAgdmFyIHBpcGVib3R0b20gPSBwaXBldG9wICsgcGlwZWhlaWdodDsNCiAgIA0KICAgaWYoZGVidWdtb2RlKQ0KICAgew0KICAgICAgdmFyIGJvdW5kaW5nYm94ID0gJCgiI3BpcGVib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIHBpcGVsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgcGlwZXRvcCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2hlaWdodCcsIHBpcGVoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIHBpcGV3aWR0aCk7DQogICB9DQogICANCiAgIC8vaGF2ZSB3ZSBnb3R0ZW4gaW5zaWRlIHRoZSBwaXBlIHlldD8NCiAgIGlmKGJveHJpZ2h0ID4gcGlwZWxlZnQpDQogICB7DQogICAgICAvL3dlJ3JlIHdpdGhpbiB0aGUgcGlwZSwgaGF2ZSB3ZSBwYXNzZWQgYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgcGlwZXM/DQogICAgICBpZihib3h0b3AgPiBwaXBldG9wICYmIGJveGJvdHRvbSA8IHBpcGVib3R0b20pDQogICAgICB7DQogICAgICAgICAvL3llYWghIHdlJ3JlIHdpdGhpbiBib3VuZHMNCiAgICAgICAgIA0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgLy9ubyEgd2UgdG91Y2hlZCB0aGUgcGlwZQ0KICAgICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgfQ0KICAgDQogICANCiAgIC8vaGF2ZSB3ZSBwYXNzZWQgdGhlIGltbWluZW50IGRhbmdlcj8NCiAgIGlmKGJveGxlZnQgPiBwaXBlcmlnaHQpDQogICB7DQogICAgICAvL3llcywgcmVtb3ZlIGl0DQogICAgICBwaXBlcy5zcGxpY2UoMCwgMSk7DQogICAgICANCiAgICAgIC8vYW5kIHNjb3JlIGEgcG9pbnQNCiAgICAgIHBsYXllclNjb3JlKCk7DQogICB9DQp9DQoNCi8vSGFuZGxlIHNwYWNlIGJhcg0KJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihlKXsNCiAgIC8vc3BhY2UgYmFyIQ0KICAgaWYoZS5rZXlDb2RlID09IDMyKQ0KICAgew0KICAgICAgLy9pbiBTY29yZVNjcmVlbiwgaGl0dGluZyBzcGFjZSBzaG91bGQgY2xpY2sgdGhlICJyZXBsYXkiIGJ1dHRvbi4gZWxzZSBpdCdzIGp1c3QgYSByZWd1bGFyIHNwYWNlYmFyIGhpdA0KICAgICAgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TY29yZVNjcmVlbikNCiAgICAgICAgICQoIiNyZXBsYXkiKS5jbGljaygpOw0KICAgICAgZWxzZQ0KICAgICAgICAgc2NyZWVuQ2xpY2soKTsNCiAgIH0NCn0pOw0KDQovL0hhbmRsZSBtb3VzZSBkb3duIE9SIHRvdWNoIHN0YXJ0DQppZigib250b3VjaHN0YXJ0IiBpbiB3aW5kb3cpDQogICAkKGRvY3VtZW50KS5vbigidG91Y2hzdGFydCIsIHNjcmVlbkNsaWNrKTsNCmVsc2UNCiAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZWRvd24iLCBzY3JlZW5DbGljayk7DQoNCmZ1bmN0aW9uIHNjcmVlbkNsaWNrKCkNCnsNCiAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuR2FtZVNjcmVlbikNCiAgIHsNCiAgICAgIHBsYXllckp1bXAoKTsNCiAgIH0NCiAgIGVsc2UgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TcGxhc2hTY3JlZW4pDQogICB7DQogICAgICBzdGFydEdhbWUoKTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gcGxheWVySnVtcCgpDQp7DQogICB2ZWxvY2l0eSA9IGp1bXA7DQogICAvL3BsYXkganVtcCBzb3VuZA0KICAgc291bmRKdW1wLnN0b3AoKTsNCiAgIHNvdW5kSnVtcC5wbGF5KCk7DQp9DQoNCmZ1bmN0aW9uIHNldEJpZ1Njb3JlKGVyYXNlKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNiaWdzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIGlmKGVyYXNlKQ0KICAgICAgcmV0dXJuOw0KICAgDQogICB2YXIgZGlnaXRzID0gc2NvcmUudG9TdHJpbmcoKS5zcGxpdCgnJyk7DQogICBmb3IodmFyIGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKQ0KICAgICAgZWxlbXNjb3JlLmFwcGVuZCgiPGltZyBzcmM9J2Fzc2V0cy9mb250X2JpZ18iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRTbWFsbFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjY3VycmVudHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdhc3NldHMvZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRIaWdoU2NvcmUoKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNoaWdoc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICB2YXIgZGlnaXRzID0gaGlnaHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdhc3NldHMvZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmcnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRNZWRhbCgpDQp7DQogICB2YXIgZWxlbW1lZGFsID0gJCgiI21lZGFsIik7DQogICBlbGVtbWVkYWwuZW1wdHkoKTsNCiAgIA0KICAgaWYoc2NvcmUgPCAxMCkNCiAgICAgIC8vc2lnbmFsIHRoYXQgbm8gbWVkYWwgaGFzIGJlZW4gd29uDQogICAgICByZXR1cm4gZmFsc2U7DQogICANCiAgIGlmKHNjb3JlID49IDEwKQ0KICAgICAgbWVkYWwgPSAiYnJvbnplIjsNCiAgIGlmKHNjb3JlID49IDIwKQ0KICAgICAgbWVkYWwgPSAic2lsdmVyIjsNCiAgIGlmKHNjb3JlID49IDMwKQ0KICAgICAgbWVkYWwgPSAiZ29sZCI7DQogICBpZihzY29yZSA+PSA0MCkNCiAgICAgIG1lZGFsID0gInBsYXRpbnVtIjsNCiAgIA0KICAgZWxlbW1lZGFsLmFwcGVuZCgnPGltZyBzcmM9ImFzc2V0cy9tZWRhbF8nICsgbWVkYWwgKycucG5nIiBhbHQ9IicgKyBtZWRhbCArJyI+Jyk7DQogICANCiAgIC8vc2lnbmFsIHRoYXQgYSBtZWRhbCBoYXMgYmVlbiB3b24NCiAgIHJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBwbGF5ZXJEZWFkKCkNCnsNCiAgIC8vc3RvcCBhbmltYXRpbmcgZXZlcnl0aGluZyENCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICANCiAgIC8vZHJvcCB0aGUgYmlyZCB0byB0aGUgZmxvb3INCiAgIHZhciBwbGF5ZXJib3R0b20gPSAkKCIjcGxheWVyIikucG9zaXRpb24oKS50b3AgKyAkKCIjcGxheWVyIikud2lkdGgoKTsgLy93ZSB1c2Ugd2lkdGggYmVjYXVzZSBoZSdsbCBiZSByb3RhdGVkIDkwIGRlZw0KICAgdmFyIGZsb29yID0gZmx5QXJlYTsNCiAgIHZhciBtb3ZleSA9IE1hdGgubWF4KDAsIGZsb29yIC0gcGxheWVyYm90dG9tKTsNCiAgICQoIiNwbGF5ZXIiKS50cmFuc2l0aW9uKHsgeTogbW92ZXkgKyAncHgnLCByb3RhdGU6IDkwfSwgMTAwMCwgJ2Vhc2VJbk91dEN1YmljJyk7DQogICANCiAgIC8vaXQncyB0aW1lIHRvIGNoYW5nZSBzdGF0ZXMuIGFzIG9mIG5vdyB3ZSdyZSBjb25zaWRlcmVkIFNjb3JlU2NyZWVuIHRvIGRpc2FibGUgbGVmdCBjbGljay9mbHlpbmcNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TY29yZVNjcmVlbjsNCg0KICAgLy9kZXN0cm95IG91ciBnYW1lbG9vcHMNCiAgIGNsZWFySW50ZXJ2YWwobG9vcEdhbWVsb29wKTsNCiAgIGNsZWFySW50ZXJ2YWwobG9vcFBpcGVsb29wKTsNCiAgIGxvb3BHYW1lbG9vcCA9IG51bGw7DQogICBsb29wUGlwZWxvb3AgPSBudWxsOw0KDQogICAvL21vYmlsZSBicm93c2VycyBkb24ndCBzdXBwb3J0IGJ1enogYmluZE9uY2UgZXZlbnQNCiAgIGlmKGlzSW5jb21wYXRpYmxlLmFueSgpKQ0KICAgew0KICAgICAgLy9za2lwIHJpZ2h0IHRvIHNob3dpbmcgc2NvcmUNCiAgICAgIHNob3dTY29yZSgpOw0KICAgfQ0KICAgZWxzZQ0KICAgew0KICAgICAgLy9wbGF5IHRoZSBoaXQgc291bmQgKHRoZW4gdGhlIGRlYWQgc291bmQpIGFuZCB0aGVuIHNob3cgc2NvcmUNCiAgICAgIHNvdW5kSGl0LnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgIHNvdW5kRGllLnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHNob3dTY29yZSgpOw0KICAgICAgICAgfSk7DQogICAgICB9KTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gc2hvd1Njb3JlKCkNCnsNCiAgIC8vdW5oaWRlIHVzDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcygiZGlzcGxheSIsICJibG9jayIpOw0KICAgDQogICAvL3JlbW92ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSh0cnVlKTsNCiAgIA0KICAgLy9oYXZlIHRoZXkgYmVhdGVuIHRoZWlyIGhpZ2ggc2NvcmU/DQogICBpZihzY29yZSA+IGhpZ2hzY29yZSkNCiAgIHsNCiAgICAgIC8veWVhaCENCiAgICAgIGhpZ2hzY29yZSA9IHNjb3JlOw0KICAgICAgLy9zYXZlIGl0IQ0KICAgICAgc2V0Q29va2llKCJoaWdoc2NvcmUiLCBoaWdoc2NvcmUsIDk5OSk7DQogICB9DQogICANCiAgIC8vdXBkYXRlIHRoZSBzY29yZWJvYXJkDQogICBzZXRTbWFsbFNjb3JlKCk7DQogICBzZXRIaWdoU2NvcmUoKTsNCiAgIHZhciB3b25tZWRhbCA9IHNldE1lZGFsKCk7DQogICANCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL3Nob3cgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOyAvL21vdmUgaXQgZG93biBzbyB3ZSBjYW4gc2xpZGUgaXQgdXANCiAgICQoIiNyZXBsYXkiKS5jc3MoeyB5OiAnNDBweCcsIG9wYWNpdHk6IDAgfSk7DQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnMHB4Jywgb3BhY2l0eTogMX0sIDYwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vV2hlbiB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGFuaW1hdGUgaW4gdGhlIHJlcGxheSBidXR0b24gYW5kIFNXT09TSCENCiAgICAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgICAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgICAgICQoIiNyZXBsYXkiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJyk7DQogICAgICANCiAgICAgIC8vYWxzbyBhbmltYXRlIGluIHRoZSBNRURBTCEgV09PIQ0KICAgICAgaWYod29ubWVkYWwpDQogICAgICB7DQogICAgICAgICAkKCIjbWVkYWwiKS5jc3MoeyBzY2FsZTogMiwgb3BhY2l0eTogMCB9KTsNCiAgICAgICAgICQoIiNtZWRhbCIpLnRyYW5zaXRpb24oeyBvcGFjaXR5OiAxLCBzY2FsZTogMSB9LCAxMjAwLCAnZWFzZScpOw0KICAgICAgfQ0KICAgfSk7DQogICANCiAgIC8vbWFrZSB0aGUgcmVwbGF5IGJ1dHRvbiBjbGlja2FibGUNCiAgIHJlcGxheWNsaWNrYWJsZSA9IHRydWU7DQoNCiAgIC8vIEdyYXNzUjAwdDogYWRkZWQgZm9yIGNvbW11bmljYXRpbmcgdGhlIHNjb3JlLg0KICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dyYXNzUm9vdC5nYW1lRW5kZWQnLCB7ZGV0YWlsOiB7IHNjb3JlOiBzY29yZSB9IH0pKTsNCn0NCg0KJCgiI3JlcGxheSIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgLy9tYWtlIHN1cmUgd2UgY2FuIG9ubHkgY2xpY2sgb25jZQ0KICAgaWYoIXJlcGxheWNsaWNrYWJsZSkNCiAgICAgIHJldHVybjsNCiAgIGVsc2UNCiAgICAgIHJlcGxheWNsaWNrYWJsZSA9IGZhbHNlOw0KICAgLy9TV09PU0ghDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikudHJhbnNpdGlvbih7IHk6ICctNDBweCcsIG9wYWNpdHk6IDB9LCAxMDAwLCAnZWFzZScsIGZ1bmN0aW9uKCkgew0KICAgICAgLy93aGVuIHRoYXQncyBkb25lLCBkaXNwbGF5IHVzIGJhY2sgdG8gbm90aGluZw0KICAgICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpOw0KICAgICAgDQogICAgICAvL3N0YXJ0IHRoZSBnYW1lIG92ZXIhDQogICAgICBzaG93U3BsYXNoKCk7DQogICB9KTsNCn0pOw0KDQpmdW5jdGlvbiBwbGF5ZXJTY29yZSgpDQp7DQogICBzY29yZSArPSAxOw0KICAgLy9wbGF5IHNjb3JlIHNvdW5kDQogICBzb3VuZFNjb3JlLnN0b3AoKTsNCiAgIHNvdW5kU2NvcmUucGxheSgpOw0KICAgc2V0QmlnU2NvcmUoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGlwZXMoKQ0Kew0KICAgLy9EbyBhbnkgcGlwZXMgbmVlZCByZW1vdmFsPw0KICAgJCgiLnBpcGUiKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiAkKHRoaXMpLnBvc2l0aW9uKCkubGVmdCA8PSAtMTAwOyB9KS5yZW1vdmUoKQ0KICAgDQogICAvL2FkZCBhIG5ldyBwaXBlICh0b3AgaGVpZ2h0ICsgYm90dG9tIGhlaWdodCAgKyBwaXBlaGVpZ2h0ID09IGZseUFyZWEpIGFuZCBwdXQgaXQgaW4gb3VyIHRyYWNrZXINCiAgIHZhciBwYWRkaW5nID0gODA7DQogICB2YXIgY29uc3RyYWludCA9IGZseUFyZWEgLSBwaXBlaGVpZ2h0IC0gKHBhZGRpbmcgKiAyKTsgLy9kb3VibGUgcGFkZGluZyAoZm9yIHRvcCBhbmQgYm90dG9tKQ0KICAgdmFyIHRvcGhlaWdodCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkqY29uc3RyYWludCkgKyBwYWRkaW5nKTsgLy9hZGQgbG93ZXIgcGFkZGluZw0KICAgdmFyIGJvdHRvbWhlaWdodCA9IChmbHlBcmVhIC0gcGlwZWhlaWdodCkgLSB0b3BoZWlnaHQ7DQogICB2YXIgbmV3cGlwZSA9ICQoJzxkaXYgY2xhc3M9InBpcGUgYW5pbWF0ZWQiPjxkaXYgY2xhc3M9InBpcGVfdXBwZXIiIHN0eWxlPSJoZWlnaHQ6ICcgKyB0b3BoZWlnaHQgKyAncHg7Ij48L2Rpdj48ZGl2IGNsYXNzPSJwaXBlX2xvd2VyIiBzdHlsZT0iaGVpZ2h0OiAnICsgYm90dG9taGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PC9kaXY+Jyk7DQogICAkKCIjZmx5YXJlYSIpLmFwcGVuZChuZXdwaXBlKTsNCiAgIHBpcGVzLnB1c2gobmV3cGlwZSk7DQp9DQoNCnZhciBpc0luY29tcGF0aWJsZSA9IHsNCiAgIEFuZHJvaWQ6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSk7DQogICB9LA0KICAgQmxhY2tCZXJyeTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQmxhY2tCZXJyeS9pKTsNCiAgIH0sDQogICBpT1M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSk7DQogICB9LA0KICAgT3BlcmE6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09wZXJhIE1pbmkvaSk7DQogICB9LA0KICAgU2FmYXJpOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgWC4qU2FmYXJpLykgJiYgISBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWUvKSk7DQogICB9LA0KICAgV2luZG93czogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvSUVNb2JpbGUvaSk7DQogICB9LA0KICAgYW55OiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAoaXNJbmNvbXBhdGlibGUuQW5kcm9pZCgpIHx8IGlzSW5jb21wYXRpYmxlLkJsYWNrQmVycnkoKSB8fCBpc0luY29tcGF0aWJsZS5pT1MoKSB8fCBpc0luY29tcGF0aWJsZS5PcGVyYSgpIHx8IGlzSW5jb21wYXRpYmxlLlNhZmFyaSgpIHx8IGlzSW5jb21wYXRpYmxlLldpbmRvd3MoKSk7DQogICB9DQp9Ow==",
    "2020.02.03 23:54": "base64:LyoNCiAgIENvcHlyaWdodCAyMDE0IE5lYmV6IEJyaWVma2FuaQ0KICAgZmxvcHB5YmlyZCAtIG1haW4uanMNCg0KICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQogICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCg0KICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KDQogICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQogICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQogICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQogICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiovDQoNCnZhciBkZWJ1Z21vZGUgPSBmYWxzZTsNCg0KdmFyIHN0YXRlcyA9IE9iamVjdC5mcmVlemUoew0KICAgU3BsYXNoU2NyZWVuOiAwLA0KICAgR2FtZVNjcmVlbjogMSwNCiAgIFNjb3JlU2NyZWVuOiAyDQp9KTsNCg0KdmFyIGN1cnJlbnRzdGF0ZTsNCg0KdmFyIGdyYXZpdHkgPSAwLjI1Ow0KdmFyIHZlbG9jaXR5ID0gMDsNCnZhciBwb3NpdGlvbiA9IDE4MDsNCnZhciByb3RhdGlvbiA9IDA7DQp2YXIganVtcCA9IC00LjY7DQp2YXIgZmx5QXJlYSA9ICQoIiNmbHlhcmVhIikuaGVpZ2h0KCk7DQoNCnZhciBzY29yZSA9IDA7DQp2YXIgaGlnaHNjb3JlID0gMDsNCg0KdmFyIHBpcGVoZWlnaHQgPSA5MDsNCnZhciBwaXBld2lkdGggPSA1MjsNCnZhciBwaXBlcyA9IG5ldyBBcnJheSgpOw0KDQp2YXIgcmVwbGF5Y2xpY2thYmxlID0gZmFsc2U7DQoNCi8vc291bmRzDQp2YXIgdm9sdW1lID0gMzA7DQp2YXIgc291bmRKdW1wID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3dpbmcub2dnIik7DQp2YXIgc291bmRTY29yZSA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9wb2ludC5vZ2ciKTsNCnZhciBzb3VuZEhpdCA9IG5ldyBidXp6LnNvdW5kKCJhc3NldHMvc291bmRzL3NmeF9oaXQub2dnIik7DQp2YXIgc291bmREaWUgPSBuZXcgYnV6ei5zb3VuZCgiYXNzZXRzL3NvdW5kcy9zZnhfZGllLm9nZyIpOw0KdmFyIHNvdW5kU3dvb3NoID0gbmV3IGJ1enouc291bmQoImFzc2V0cy9zb3VuZHMvc2Z4X3N3b29zaGluZy5vZ2ciKTsNCmJ1enouYWxsKCkuc2V0Vm9sdW1lKHZvbHVtZSk7DQoNCi8vbG9vcHMNCnZhciBsb29wR2FtZWxvb3A7DQp2YXIgbG9vcFBpcGVsb29wOw0KDQokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpIHsNCiAgIGlmKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2ggPT0gIj9kZWJ1ZyIpDQogICAgICBkZWJ1Z21vZGUgPSB0cnVlOw0KICAgaWYod2luZG93LmxvY2F0aW9uLnNlYXJjaCA9PSAiP2Vhc3kiKQ0KICAgICAgcGlwZWhlaWdodCA9IDIwMDsNCiAgIA0KICAgLy9nZXQgdGhlIGhpZ2hzY29yZQ0KICAgdmFyIHNhdmVkc2NvcmUgPSBnZXRDb29raWUoImhpZ2hzY29yZSIpOw0KICAgaWYoc2F2ZWRzY29yZSAhPSAiIikNCiAgICAgIGhpZ2hzY29yZSA9IHBhcnNlSW50KHNhdmVkc2NvcmUpOw0KICAgDQogICAvL3N0YXJ0IHdpdGggdGhlIHNwbGFzaCBzY3JlZW4NCiAgIHNob3dTcGxhc2goKTsNCn0pOw0KDQpmdW5jdGlvbiBnZXRDb29raWUoY25hbWUpDQp7DQogICB2YXIgbmFtZSA9IGNuYW1lICsgIj0iOw0KICAgdmFyIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7Jyk7DQogICBmb3IodmFyIGk9MDsgaTxjYS5sZW5ndGg7IGkrKykgDQogICB7DQogICAgICB2YXIgYyA9IGNhW2ldLnRyaW0oKTsNCiAgICAgIGlmIChjLmluZGV4T2YobmFtZSk9PTApIHJldHVybiBjLnN1YnN0cmluZyhuYW1lLmxlbmd0aCxjLmxlbmd0aCk7DQogICB9DQogICByZXR1cm4gIiI7DQp9DQoNCmZ1bmN0aW9uIHNldENvb2tpZShjbmFtZSxjdmFsdWUsZXhkYXlzKQ0Kew0KICAgdmFyIGQgPSBuZXcgRGF0ZSgpOw0KICAgZC5zZXRUaW1lKGQuZ2V0VGltZSgpKyhleGRheXMqMjQqNjAqNjAqMTAwMCkpOw0KICAgdmFyIGV4cGlyZXMgPSAiZXhwaXJlcz0iK2QudG9HTVRTdHJpbmcoKTsNCiAgIGRvY3VtZW50LmNvb2tpZSA9IGNuYW1lICsgIj0iICsgY3ZhbHVlICsgIjsgIiArIGV4cGlyZXM7DQp9DQoNCmZ1bmN0aW9uIHNob3dTcGxhc2goKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLlNwbGFzaFNjcmVlbjsNCiAgIA0KICAgLy9zZXQgdGhlIGRlZmF1bHRzIChhZ2FpbikNCiAgIHZlbG9jaXR5ID0gMDsNCiAgIHBvc2l0aW9uID0gMTgwOw0KICAgcm90YXRpb24gPSAwOw0KICAgc2NvcmUgPSAwOw0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyIGluIHByZXBhcmF0aW9uIGZvciB0aGUgbmV4dCBnYW1lDQogICAkKCIjcGxheWVyIikuY3NzKHsgeTogMCwgeDogMH0pOw0KICAgdXBkYXRlUGxheWVyKCQoIiNwbGF5ZXIiKSk7DQogICANCiAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgIA0KICAgLy9jbGVhciBvdXQgYWxsIHRoZSBwaXBlcyBpZiB0aGVyZSBhcmUgYW55DQogICAkKCIucGlwZSIpLnJlbW92ZSgpOw0KICAgcGlwZXMgPSBuZXcgQXJyYXkoKTsNCiAgIA0KICAgLy9tYWtlIGV2ZXJ5dGhpbmcgYW5pbWF0ZWQgYWdhaW4NCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncnVubmluZycpOw0KICAgJCgiLmFuaW1hdGVkIikuY3NzKCctd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlJywgJ3J1bm5pbmcnKTsNCiAgIA0KICAgLy9mYWRlIGluIHRoZSBzcGxhc2gNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMSB9LCAyMDAwLCAnZWFzZScpOw0KfQ0KDQpmdW5jdGlvbiBzdGFydEdhbWUoKQ0Kew0KICAgY3VycmVudHN0YXRlID0gc3RhdGVzLkdhbWVTY3JlZW47DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNwbGFzaA0KICAgJCgiI3NwbGFzaCIpLnN0b3AoKTsNCiAgICQoIiNzcGxhc2giKS50cmFuc2l0aW9uKHsgb3BhY2l0eTogMCB9LCA1MDAsICdlYXNlJyk7DQogICANCiAgIC8vdXBkYXRlIHRoZSBiaWcgc2NvcmUNCiAgIHNldEJpZ1Njb3JlKCk7DQogICANCiAgIC8vZGVidWcgbW9kZT8NCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIC8vc2hvdyB0aGUgYm91bmRpbmcgYm94ZXMNCiAgICAgICQoIi5ib3VuZGluZ2JveCIpLnNob3coKTsNCiAgIH0NCg0KICAgLy9zdGFydCB1cCBvdXIgbG9vcHMNCiAgIHZhciB1cGRhdGVyYXRlID0gMTAwMC4wIC8gNjAuMCA7IC8vNjAgdGltZXMgYSBzZWNvbmQNCiAgIGxvb3BHYW1lbG9vcCA9IHNldEludGVydmFsKGdhbWVsb29wLCB1cGRhdGVyYXRlKTsNCiAgIGxvb3BQaXBlbG9vcCA9IHNldEludGVydmFsKHVwZGF0ZVBpcGVzLCAxNDAwKTsNCiAgIA0KICAgLy9qdW1wIGZyb20gdGhlIHN0YXJ0IQ0KICAgcGxheWVySnVtcCgpOw0KfQ0KDQpmdW5jdGlvbiB1cGRhdGVQbGF5ZXIocGxheWVyKQ0Kew0KICAgLy9yb3RhdGlvbg0KICAgcm90YXRpb24gPSBNYXRoLm1pbigodmVsb2NpdHkgLyAxMCkgKiA5MCwgOTApOw0KICAgDQogICAvL2FwcGx5IHJvdGF0aW9uIGFuZCBwb3NpdGlvbg0KICAgJChwbGF5ZXIpLmNzcyh7IHJvdGF0ZTogcm90YXRpb24sIHRvcDogcG9zaXRpb24gfSk7DQp9DQoNCmZ1bmN0aW9uIGdhbWVsb29wKCkgew0KICAgdmFyIHBsYXllciA9ICQoIiNwbGF5ZXIiKTsNCiAgIA0KICAgLy91cGRhdGUgdGhlIHBsYXllciBzcGVlZC9wb3NpdGlvbg0KICAgdmVsb2NpdHkgKz0gZ3Jhdml0eTsNCiAgIHBvc2l0aW9uICs9IHZlbG9jaXR5Ow0KICAgDQogICAvL3VwZGF0ZSB0aGUgcGxheWVyDQogICB1cGRhdGVQbGF5ZXIocGxheWVyKTsNCiAgIA0KICAgLy9jcmVhdGUgdGhlIGJvdW5kaW5nIGJveA0KICAgdmFyIGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5ZXInKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsNCiAgIHZhciBvcmlnd2lkdGggPSAzNC4wOw0KICAgdmFyIG9yaWdoZWlnaHQgPSAyNC4wOw0KICAgDQogICB2YXIgYm94d2lkdGggPSBvcmlnd2lkdGggLSAoTWF0aC5zaW4oTWF0aC5hYnMocm90YXRpb24pIC8gOTApICogOCk7DQogICB2YXIgYm94aGVpZ2h0ID0gKG9yaWdoZWlnaHQgKyBib3guaGVpZ2h0KSAvIDI7DQogICB2YXIgYm94bGVmdCA9ICgoYm94LndpZHRoIC0gYm94d2lkdGgpIC8gMikgKyBib3gubGVmdDsNCiAgIHZhciBib3h0b3AgPSAoKGJveC5oZWlnaHQgLSBib3hoZWlnaHQpIC8gMikgKyBib3gudG9wOw0KICAgdmFyIGJveHJpZ2h0ID0gYm94bGVmdCArIGJveHdpZHRoOw0KICAgdmFyIGJveGJvdHRvbSA9IGJveHRvcCArIGJveGhlaWdodDsNCiAgIA0KICAgLy9pZiB3ZSdyZSBpbiBkZWJ1ZyBtb2RlLCBkcmF3IHRoZSBib3VuZGluZyBib3gNCiAgIGlmKGRlYnVnbW9kZSkNCiAgIHsNCiAgICAgIHZhciBib3VuZGluZ2JveCA9ICQoIiNwbGF5ZXJib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIGJveGxlZnQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd0b3AnLCBib3h0b3ApOw0KICAgICAgYm91bmRpbmdib3guY3NzKCdoZWlnaHQnLCBib3hoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIGJveHdpZHRoKTsNCiAgIH0NCiAgIA0KICAgLy9kaWQgd2UgaGl0IHRoZSBncm91bmQ/DQogICBpZihib3guYm90dG9tID49ICQoIiNsYW5kIikub2Zmc2V0KCkudG9wKQ0KICAgew0KICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgcmV0dXJuOw0KICAgfQ0KICAgDQogICAvL2hhdmUgdGhleSB0cmllZCB0byBlc2NhcGUgdGhyb3VnaCB0aGUgY2VpbGluZz8gOm8NCiAgIHZhciBjZWlsaW5nID0gJCgiI2NlaWxpbmciKTsNCiAgIGlmKGJveHRvcCA8PSAoY2VpbGluZy5vZmZzZXQoKS50b3AgKyBjZWlsaW5nLmhlaWdodCgpKSkNCiAgICAgIHBvc2l0aW9uID0gMDsNCiAgIA0KICAgLy93ZSBjYW4ndCBnbyBhbnkgZnVydGhlciB3aXRob3V0IGEgcGlwZQ0KICAgaWYocGlwZXNbMF0gPT0gbnVsbCkNCiAgICAgIHJldHVybjsNCiAgIA0KICAgLy9kZXRlcm1pbmUgdGhlIGJvdW5kaW5nIGJveCBvZiB0aGUgbmV4dCBwaXBlcyBpbm5lciBhcmVhDQogICB2YXIgbmV4dHBpcGUgPSBwaXBlc1swXTsNCiAgIHZhciBuZXh0cGlwZXVwcGVyID0gbmV4dHBpcGUuY2hpbGRyZW4oIi5waXBlX3VwcGVyIik7DQogICANCiAgIHZhciBwaXBldG9wID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS50b3AgKyBuZXh0cGlwZXVwcGVyLmhlaWdodCgpOw0KICAgdmFyIHBpcGVsZWZ0ID0gbmV4dHBpcGV1cHBlci5vZmZzZXQoKS5sZWZ0IC0gMjsgLy8gZm9yIHNvbWUgcmVhc29uIGl0IHN0YXJ0cyBhdCB0aGUgaW5uZXIgcGlwZXMgb2Zmc2V0LCBub3QgdGhlIG91dGVyIHBpcGVzLg0KICAgdmFyIHBpcGVyaWdodCA9IHBpcGVsZWZ0ICsgcGlwZXdpZHRoOw0KICAgdmFyIHBpcGVib3R0b20gPSBwaXBldG9wICsgcGlwZWhlaWdodDsNCiAgIA0KICAgaWYoZGVidWdtb2RlKQ0KICAgew0KICAgICAgdmFyIGJvdW5kaW5nYm94ID0gJCgiI3BpcGVib3giKTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygnbGVmdCcsIHBpcGVsZWZ0KTsNCiAgICAgIGJvdW5kaW5nYm94LmNzcygndG9wJywgcGlwZXRvcCk7DQogICAgICBib3VuZGluZ2JveC5jc3MoJ2hlaWdodCcsIHBpcGVoZWlnaHQpOw0KICAgICAgYm91bmRpbmdib3guY3NzKCd3aWR0aCcsIHBpcGV3aWR0aCk7DQogICB9DQogICANCiAgIC8vaGF2ZSB3ZSBnb3R0ZW4gaW5zaWRlIHRoZSBwaXBlIHlldD8NCiAgIGlmKGJveHJpZ2h0ID4gcGlwZWxlZnQpDQogICB7DQogICAgICAvL3dlJ3JlIHdpdGhpbiB0aGUgcGlwZSwgaGF2ZSB3ZSBwYXNzZWQgYmV0d2VlbiB1cHBlciBhbmQgbG93ZXIgcGlwZXM/DQogICAgICBpZihib3h0b3AgPiBwaXBldG9wICYmIGJveGJvdHRvbSA8IHBpcGVib3R0b20pDQogICAgICB7DQogICAgICAgICAvL3llYWghIHdlJ3JlIHdpdGhpbiBib3VuZHMNCiAgICAgICAgIA0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICAgLy9ubyEgd2UgdG91Y2hlZCB0aGUgcGlwZQ0KICAgICAgICAgcGxheWVyRGVhZCgpOw0KICAgICAgICAgcmV0dXJuOw0KICAgICAgfQ0KICAgfQ0KICAgDQogICANCiAgIC8vaGF2ZSB3ZSBwYXNzZWQgdGhlIGltbWluZW50IGRhbmdlcj8NCiAgIGlmKGJveGxlZnQgPiBwaXBlcmlnaHQpDQogICB7DQogICAgICAvL3llcywgcmVtb3ZlIGl0DQogICAgICBwaXBlcy5zcGxpY2UoMCwgMSk7DQogICAgICANCiAgICAgIC8vYW5kIHNjb3JlIGEgcG9pbnQNCiAgICAgIHBsYXllclNjb3JlKCk7DQogICB9DQp9DQoNCi8vSGFuZGxlIHNwYWNlIGJhcg0KJChkb2N1bWVudCkua2V5ZG93bihmdW5jdGlvbihlKXsNCiAgIC8vc3BhY2UgYmFyIQ0KICAgaWYoZS5rZXlDb2RlID09IDMyKQ0KICAgew0KICAgICAgLy9pbiBTY29yZVNjcmVlbiwgaGl0dGluZyBzcGFjZSBzaG91bGQgY2xpY2sgdGhlICJyZXBsYXkiIGJ1dHRvbi4gZWxzZSBpdCdzIGp1c3QgYSByZWd1bGFyIHNwYWNlYmFyIGhpdA0KICAgICAgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TY29yZVNjcmVlbikNCiAgICAgICAgICQoIiNyZXBsYXkiKS5jbGljaygpOw0KICAgICAgZWxzZQ0KICAgICAgICAgc2NyZWVuQ2xpY2soKTsNCiAgIH0NCn0pOw0KDQovL0hhbmRsZSBtb3VzZSBkb3duIE9SIHRvdWNoIHN0YXJ0DQppZigib250b3VjaHN0YXJ0IiBpbiB3aW5kb3cpDQogICAkKGRvY3VtZW50KS5vbigidG91Y2hzdGFydCIsIHNjcmVlbkNsaWNrKTsNCmVsc2UNCiAgICQoZG9jdW1lbnQpLm9uKCJtb3VzZWRvd24iLCBzY3JlZW5DbGljayk7DQoNCmZ1bmN0aW9uIHNjcmVlbkNsaWNrKCkNCnsNCiAgIGlmKGN1cnJlbnRzdGF0ZSA9PSBzdGF0ZXMuR2FtZVNjcmVlbikNCiAgIHsNCiAgICAgIHBsYXllckp1bXAoKTsNCiAgIH0NCiAgIGVsc2UgaWYoY3VycmVudHN0YXRlID09IHN0YXRlcy5TcGxhc2hTY3JlZW4pDQogICB7DQogICAgICBzdGFydEdhbWUoKTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gcGxheWVySnVtcCgpDQp7DQogICB2ZWxvY2l0eSA9IGp1bXA7DQogICAvL3BsYXkganVtcCBzb3VuZA0KICAgc291bmRKdW1wLnN0b3AoKTsNCiAgIHNvdW5kSnVtcC5wbGF5KCk7DQp9DQoNCmZ1bmN0aW9uIHNldEJpZ1Njb3JlKGVyYXNlKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNiaWdzY29yZSIpOw0KICAgZWxlbXNjb3JlLmVtcHR5KCk7DQogICANCiAgIGlmKGVyYXNlKQ0KICAgICAgcmV0dXJuOw0KICAgDQogICB2YXIgZGlnaXRzID0gc2NvcmUudG9TdHJpbmcoKS5zcGxpdCgnJyk7DQogICBmb3IodmFyIGkgPSAwOyBpIDwgZGlnaXRzLmxlbmd0aDsgaSsrKQ0KICAgICAgZWxlbXNjb3JlLmFwcGVuZCgiPGltZyBzcmM9J2h0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkYXBwJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZmb250X2JpZ18iICsgZGlnaXRzW2ldICsgIi5wbmdfY291bnQnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRTbWFsbFNjb3JlKCkNCnsNCiAgIHZhciBlbGVtc2NvcmUgPSAkKCIjY3VycmVudHNjb3JlIik7DQogICBlbGVtc2NvcmUuZW1wdHkoKTsNCiAgIA0KICAgdmFyIGRpZ2l0cyA9IHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZGFwcCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmdfY291bnQnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRIaWdoU2NvcmUoKQ0Kew0KICAgdmFyIGVsZW1zY29yZSA9ICQoIiNoaWdoc2NvcmUiKTsNCiAgIGVsZW1zY29yZS5lbXB0eSgpOw0KICAgDQogICB2YXIgZGlnaXRzID0gaGlnaHNjb3JlLnRvU3RyaW5nKCkuc3BsaXQoJycpOw0KICAgZm9yKHZhciBpID0gMDsgaSA8IGRpZ2l0cy5sZW5ndGg7IGkrKykNCiAgICAgIGVsZW1zY29yZS5hcHBlbmQoIjxpbWcgc3JjPSdodHRwczovL25vZGVzLXRlc3RuZXQud2F2ZXNub2Rlcy5jb20vYWRkcmVzc2VzL2RhdGEvd2ViJTJCZGFwcCUzQSUyRiUyRjNNc1Mzb0RYeHFESjJ2bXpjdkJRZVFMa1RobU1tdW9qTjc0JTJGZm9udF9zbWFsbF8iICsgZGlnaXRzW2ldICsgIi5wbmdfY291bnQnIGFsdD0nIiArIGRpZ2l0c1tpXSArICInPiIpOw0KfQ0KDQpmdW5jdGlvbiBzZXRNZWRhbCgpDQp7DQogICB2YXIgZWxlbW1lZGFsID0gJCgiI21lZGFsIik7DQogICBlbGVtbWVkYWwuZW1wdHkoKTsNCiAgIA0KICAgaWYoc2NvcmUgPCAxMCkNCiAgICAgIC8vc2lnbmFsIHRoYXQgbm8gbWVkYWwgaGFzIGJlZW4gd29uDQogICAgICByZXR1cm4gZmFsc2U7DQogICANCiAgIGlmKHNjb3JlID49IDEwKQ0KICAgICAgbWVkYWwgPSAiYnJvbnplIjsNCiAgIGlmKHNjb3JlID49IDIwKQ0KICAgICAgbWVkYWwgPSAic2lsdmVyIjsNCiAgIGlmKHNjb3JlID49IDMwKQ0KICAgICAgbWVkYWwgPSAiZ29sZCI7DQogICBpZihzY29yZSA+PSA0MCkNCiAgICAgIG1lZGFsID0gInBsYXRpbnVtIjsNCiAgIA0KICAgZWxlbW1lZGFsLmFwcGVuZCgnPGltZyBzcmM9Imh0dHBzOi8vbm9kZXMtdGVzdG5ldC53YXZlc25vZGVzLmNvbS9hZGRyZXNzZXMvZGF0YS93ZWIlMkJkYXBwJTNBJTJGJTJGM01zUzNvRFh4cURKMnZtemN2QlFlUUxrVGhtTW11b2pONzQlMkZtZWRhbF8nICsgbWVkYWwgKycucG5nX2NvdW50IiBhbHQ9IicgKyBtZWRhbCArJyI+Jyk7DQogICANCiAgIC8vc2lnbmFsIHRoYXQgYSBtZWRhbCBoYXMgYmVlbiB3b24NCiAgIHJldHVybiB0cnVlOw0KfQ0KDQpmdW5jdGlvbiBwbGF5ZXJEZWFkKCkNCnsNCiAgIC8vc3RvcCBhbmltYXRpbmcgZXZlcnl0aGluZyENCiAgICQoIi5hbmltYXRlZCIpLmNzcygnYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICAkKCIuYW5pbWF0ZWQiKS5jc3MoJy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUnLCAncGF1c2VkJyk7DQogICANCiAgIC8vZHJvcCB0aGUgYmlyZCB0byB0aGUgZmxvb3INCiAgIHZhciBwbGF5ZXJib3R0b20gPSAkKCIjcGxheWVyIikucG9zaXRpb24oKS50b3AgKyAkKCIjcGxheWVyIikud2lkdGgoKTsgLy93ZSB1c2Ugd2lkdGggYmVjYXVzZSBoZSdsbCBiZSByb3RhdGVkIDkwIGRlZw0KICAgdmFyIGZsb29yID0gZmx5QXJlYTsNCiAgIHZhciBtb3ZleSA9IE1hdGgubWF4KDAsIGZsb29yIC0gcGxheWVyYm90dG9tKTsNCiAgICQoIiNwbGF5ZXIiKS50cmFuc2l0aW9uKHsgeTogbW92ZXkgKyAncHgnLCByb3RhdGU6IDkwfSwgMTAwMCwgJ2Vhc2VJbk91dEN1YmljJyk7DQogICANCiAgIC8vaXQncyB0aW1lIHRvIGNoYW5nZSBzdGF0ZXMuIGFzIG9mIG5vdyB3ZSdyZSBjb25zaWRlcmVkIFNjb3JlU2NyZWVuIHRvIGRpc2FibGUgbGVmdCBjbGljay9mbHlpbmcNCiAgIGN1cnJlbnRzdGF0ZSA9IHN0YXRlcy5TY29yZVNjcmVlbjsNCg0KICAgLy9kZXN0cm95IG91ciBnYW1lbG9vcHMNCiAgIGNsZWFySW50ZXJ2YWwobG9vcEdhbWVsb29wKTsNCiAgIGNsZWFySW50ZXJ2YWwobG9vcFBpcGVsb29wKTsNCiAgIGxvb3BHYW1lbG9vcCA9IG51bGw7DQogICBsb29wUGlwZWxvb3AgPSBudWxsOw0KDQogICAvL21vYmlsZSBicm93c2VycyBkb24ndCBzdXBwb3J0IGJ1enogYmluZE9uY2UgZXZlbnQNCiAgIGlmKGlzSW5jb21wYXRpYmxlLmFueSgpKQ0KICAgew0KICAgICAgLy9za2lwIHJpZ2h0IHRvIHNob3dpbmcgc2NvcmUNCiAgICAgIHNob3dTY29yZSgpOw0KICAgfQ0KICAgZWxzZQ0KICAgew0KICAgICAgLy9wbGF5IHRoZSBoaXQgc291bmQgKHRoZW4gdGhlIGRlYWQgc291bmQpIGFuZCB0aGVuIHNob3cgc2NvcmUNCiAgICAgIHNvdW5kSGl0LnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgIHNvdW5kRGllLnBsYXkoKS5iaW5kT25jZSgiZW5kZWQiLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgIHNob3dTY29yZSgpOw0KICAgICAgICAgfSk7DQogICAgICB9KTsNCiAgIH0NCn0NCg0KZnVuY3Rpb24gc2hvd1Njb3JlKCkNCnsNCiAgIC8vdW5oaWRlIHVzDQogICAkKCIjc2NvcmVib2FyZCIpLmNzcygiZGlzcGxheSIsICJibG9jayIpOw0KICAgDQogICAvL3JlbW92ZSB0aGUgYmlnIHNjb3JlDQogICBzZXRCaWdTY29yZSh0cnVlKTsNCiAgIA0KICAgLy9oYXZlIHRoZXkgYmVhdGVuIHRoZWlyIGhpZ2ggc2NvcmU/DQogICBpZihzY29yZSA+IGhpZ2hzY29yZSkNCiAgIHsNCiAgICAgIC8veWVhaCENCiAgICAgIGhpZ2hzY29yZSA9IHNjb3JlOw0KICAgICAgLy9zYXZlIGl0IQ0KICAgICAgc2V0Q29va2llKCJoaWdoc2NvcmUiLCBoaWdoc2NvcmUsIDk5OSk7DQogICB9DQogICANCiAgIC8vdXBkYXRlIHRoZSBzY29yZWJvYXJkDQogICBzZXRTbWFsbFNjb3JlKCk7DQogICBzZXRIaWdoU2NvcmUoKTsNCiAgIHZhciB3b25tZWRhbCA9IHNldE1lZGFsKCk7DQogICANCiAgIC8vU1dPT1NIIQ0KICAgc291bmRTd29vc2guc3RvcCgpOw0KICAgc291bmRTd29vc2gucGxheSgpOw0KICAgDQogICAvL3Nob3cgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikuY3NzKHsgeTogJzQwcHgnLCBvcGFjaXR5OiAwIH0pOyAvL21vdmUgaXQgZG93biBzbyB3ZSBjYW4gc2xpZGUgaXQgdXANCiAgICQoIiNyZXBsYXkiKS5jc3MoeyB5OiAnNDBweCcsIG9wYWNpdHk6IDAgfSk7DQogICAkKCIjc2NvcmVib2FyZCIpLnRyYW5zaXRpb24oeyB5OiAnMHB4Jywgb3BhY2l0eTogMX0sIDYwMCwgJ2Vhc2UnLCBmdW5jdGlvbigpIHsNCiAgICAgIC8vV2hlbiB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGFuaW1hdGUgaW4gdGhlIHJlcGxheSBidXR0b24gYW5kIFNXT09TSCENCiAgICAgIHNvdW5kU3dvb3NoLnN0b3AoKTsNCiAgICAgIHNvdW5kU3dvb3NoLnBsYXkoKTsNCiAgICAgICQoIiNyZXBsYXkiKS50cmFuc2l0aW9uKHsgeTogJzBweCcsIG9wYWNpdHk6IDF9LCA2MDAsICdlYXNlJyk7DQogICAgICANCiAgICAgIC8vYWxzbyBhbmltYXRlIGluIHRoZSBNRURBTCEgV09PIQ0KICAgICAgaWYod29ubWVkYWwpDQogICAgICB7DQogICAgICAgICAkKCIjbWVkYWwiKS5jc3MoeyBzY2FsZTogMiwgb3BhY2l0eTogMCB9KTsNCiAgICAgICAgICQoIiNtZWRhbCIpLnRyYW5zaXRpb24oeyBvcGFjaXR5OiAxLCBzY2FsZTogMSB9LCAxMjAwLCAnZWFzZScpOw0KICAgICAgfQ0KICAgfSk7DQogICANCiAgIC8vbWFrZSB0aGUgcmVwbGF5IGJ1dHRvbiBjbGlja2FibGUNCiAgIHJlcGxheWNsaWNrYWJsZSA9IHRydWU7DQoNCiAgIC8vIEdyYXNzUjAwdDogYWRkZWQgZm9yIGNvbW11bmljYXRpbmcgdGhlIHNjb3JlLg0KICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2dyYXNzUm9vdC5nYW1lRW5kZWQnLCB7ZGV0YWlsOiB7IHNjb3JlOiBzY29yZSB9IH0pKTsNCn0NCg0KJCgiI3JlcGxheSIpLmNsaWNrKGZ1bmN0aW9uKCkgew0KICAgLy9tYWtlIHN1cmUgd2UgY2FuIG9ubHkgY2xpY2sgb25jZQ0KICAgaWYoIXJlcGxheWNsaWNrYWJsZSkNCiAgICAgIHJldHVybjsNCiAgIGVsc2UNCiAgICAgIHJlcGxheWNsaWNrYWJsZSA9IGZhbHNlOw0KICAgLy9TV09PU0ghDQogICBzb3VuZFN3b29zaC5zdG9wKCk7DQogICBzb3VuZFN3b29zaC5wbGF5KCk7DQogICANCiAgIC8vZmFkZSBvdXQgdGhlIHNjb3JlYm9hcmQNCiAgICQoIiNzY29yZWJvYXJkIikudHJhbnNpdGlvbih7IHk6ICctNDBweCcsIG9wYWNpdHk6IDB9LCAxMDAwLCAnZWFzZScsIGZ1bmN0aW9uKCkgew0KICAgICAgLy93aGVuIHRoYXQncyBkb25lLCBkaXNwbGF5IHVzIGJhY2sgdG8gbm90aGluZw0KICAgICAgJCgiI3Njb3JlYm9hcmQiKS5jc3MoImRpc3BsYXkiLCAibm9uZSIpOw0KICAgICAgDQogICAgICAvL3N0YXJ0IHRoZSBnYW1lIG92ZXIhDQogICAgICBzaG93U3BsYXNoKCk7DQogICB9KTsNCn0pOw0KDQpmdW5jdGlvbiBwbGF5ZXJTY29yZSgpDQp7DQogICBzY29yZSArPSAxOw0KICAgLy9wbGF5IHNjb3JlIHNvdW5kDQogICBzb3VuZFNjb3JlLnN0b3AoKTsNCiAgIHNvdW5kU2NvcmUucGxheSgpOw0KICAgc2V0QmlnU2NvcmUoKTsNCn0NCg0KZnVuY3Rpb24gdXBkYXRlUGlwZXMoKQ0Kew0KICAgLy9EbyBhbnkgcGlwZXMgbmVlZCByZW1vdmFsPw0KICAgJCgiLnBpcGUiKS5maWx0ZXIoZnVuY3Rpb24oKSB7IHJldHVybiAkKHRoaXMpLnBvc2l0aW9uKCkubGVmdCA8PSAtMTAwOyB9KS5yZW1vdmUoKQ0KICAgDQogICAvL2FkZCBhIG5ldyBwaXBlICh0b3AgaGVpZ2h0ICsgYm90dG9tIGhlaWdodCAgKyBwaXBlaGVpZ2h0ID09IGZseUFyZWEpIGFuZCBwdXQgaXQgaW4gb3VyIHRyYWNrZXINCiAgIHZhciBwYWRkaW5nID0gODA7DQogICB2YXIgY29uc3RyYWludCA9IGZseUFyZWEgLSBwaXBlaGVpZ2h0IC0gKHBhZGRpbmcgKiAyKTsgLy9kb3VibGUgcGFkZGluZyAoZm9yIHRvcCBhbmQgYm90dG9tKQ0KICAgdmFyIHRvcGhlaWdodCA9IE1hdGguZmxvb3IoKE1hdGgucmFuZG9tKCkqY29uc3RyYWludCkgKyBwYWRkaW5nKTsgLy9hZGQgbG93ZXIgcGFkZGluZw0KICAgdmFyIGJvdHRvbWhlaWdodCA9IChmbHlBcmVhIC0gcGlwZWhlaWdodCkgLSB0b3BoZWlnaHQ7DQogICB2YXIgbmV3cGlwZSA9ICQoJzxkaXYgY2xhc3M9InBpcGUgYW5pbWF0ZWQiPjxkaXYgY2xhc3M9InBpcGVfdXBwZXIiIHN0eWxlPSJoZWlnaHQ6ICcgKyB0b3BoZWlnaHQgKyAncHg7Ij48L2Rpdj48ZGl2IGNsYXNzPSJwaXBlX2xvd2VyIiBzdHlsZT0iaGVpZ2h0OiAnICsgYm90dG9taGVpZ2h0ICsgJ3B4OyI+PC9kaXY+PC9kaXY+Jyk7DQogICAkKCIjZmx5YXJlYSIpLmFwcGVuZChuZXdwaXBlKTsNCiAgIHBpcGVzLnB1c2gobmV3cGlwZSk7DQp9DQoNCnZhciBpc0luY29tcGF0aWJsZSA9IHsNCiAgIEFuZHJvaWQ6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSk7DQogICB9LA0KICAgQmxhY2tCZXJyeTogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQmxhY2tCZXJyeS9pKTsNCiAgIH0sDQogICBpT1M6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZXxpUGFkfGlQb2QvaSk7DQogICB9LA0KICAgT3BlcmE6IGZ1bmN0aW9uKCkgew0KICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL09wZXJhIE1pbmkvaSk7DQogICB9LA0KICAgU2FmYXJpOiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAobmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvT1MgWC4qU2FmYXJpLykgJiYgISBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9DaHJvbWUvKSk7DQogICB9LA0KICAgV2luZG93czogZnVuY3Rpb24oKSB7DQogICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvSUVNb2JpbGUvaSk7DQogICB9LA0KICAgYW55OiBmdW5jdGlvbigpIHsNCiAgIHJldHVybiAoaXNJbmNvbXBhdGlibGUuQW5kcm9pZCgpIHx8IGlzSW5jb21wYXRpYmxlLkJsYWNrQmVycnkoKSB8fCBpc0luY29tcGF0aWJsZS5pT1MoKSB8fCBpc0luY29tcGF0aWJsZS5PcGVyYSgpIHx8IGlzSW5jb21wYXRpYmxlLlNhZmFyaSgpIHx8IGlzSW5jb21wYXRpYmxlLldpbmRvd3MoKSk7DQogICB9DQp9Ow=="
}

github/deemru/w8io/169f3d6 
7.83 ms