{"remainingRequest":"F:\\workspace\\gcy\\RK-html\\RK-project\\ruoyi-ui\\node_modules\\thread-loader\\dist\\cjs.js!F:\\workspace\\gcy\\RK-html\\RK-project\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js!F:\\workspace\\gcy\\RK-html\\RK-project\\ruoyi-ui\\src\\views\\dashboard\\mixins\\echarts-wordcloud.min.js","dependencies":[{"path":"F:\\workspace\\gcy\\RK-html\\RK-project\\ruoyi-ui\\src\\views\\dashboard\\mixins\\echarts-wordcloud.min.js","mtime":1634007167383},{"path":"F:\\workspace\\gcy\\RK-html\\RK-project\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"F:\\workspace\\gcy\\RK-html\\RK-project\\ruoyi-ui\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"F:\\workspace\\gcy\\RK-html\\RK-project\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:dmFyIF90eXBlb2YgPSByZXF1aXJlKCJGOi93b3Jrc3BhY2UvZ2N5L1JLLWh0bWwvUkstcHJvamVjdC9ydW95aS11aS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YiKS5kZWZhdWx0OwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbGwuanMiKTsKCnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIuaW1tZWRpYXRlLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiKTsKCnJlcXVpcmUoImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnRvLWZpeGVkLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc29ydC5qcyIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5qcyIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5kZXNjcmlwdGlvbi5qcyIpOwoKcmVxdWlyZSgiY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC50by1zdHJpbmctdGFnLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi50by1zdHJpbmctdGFnLmpzIik7CgpyZXF1aXJlKCJjb3JlLWpzL21vZHVsZXMvZXMubWF0aC50by1zdHJpbmctdGFnLmpzIik7CgovKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBlY2hhcnRzLXdvcmRjbG91ZC5taW4uanMuTElDRU5TRS50eHQgKi8KIWZ1bmN0aW9uICh0LCBlKSB7CiAgIm9iamVjdCIgPT0gKHR5cGVvZiBleHBvcnRzID09PSAidW5kZWZpbmVkIiA/ICJ1bmRlZmluZWQiIDogX3R5cGVvZihleHBvcnRzKSkgJiYgIm9iamVjdCIgPT0gKHR5cGVvZiBtb2R1bGUgPT09ICJ1bmRlZmluZWQiID8gInVuZGVmaW5lZCIgOiBfdHlwZW9mKG1vZHVsZSkpID8gbW9kdWxlLmV4cG9ydHMgPSBlKHJlcXVpcmUoImVjaGFydHMiKSkgOiAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbImVjaGFydHMiXSwgZSkgOiAib2JqZWN0IiA9PSAodHlwZW9mIGV4cG9ydHMgPT09ICJ1bmRlZmluZWQiID8gInVuZGVmaW5lZCIgOiBfdHlwZW9mKGV4cG9ydHMpKSA/IGV4cG9ydHNbImVjaGFydHMtd29yZGNsb3VkIl0gPSBlKHJlcXVpcmUoImVjaGFydHMiKSkgOiB0WyJlY2hhcnRzLXdvcmRjbG91ZCJdID0gZSh0LmVjaGFydHMpOwp9KHNlbGYsIGZ1bmN0aW9uICh0KSB7CiAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgZSA9IHsKICAgICAgNjM4OiBmdW5jdGlvbiBfKHQsIGUsIGEpIHsKICAgICAgICBhLnIoZSk7CiAgICAgICAgdmFyIG8gPSBhKDgzKTsKICAgICAgICBvLmV4dGVuZFNlcmllc01vZGVsKHsKICAgICAgICAgIHR5cGU6ICJzZXJpZXMud29yZENsb3VkIiwKICAgICAgICAgIHZpc3VhbFN0eWxlQWNjZXNzUGF0aDogInRleHRTdHlsZSIsCiAgICAgICAgICB2aXN1YWxTdHlsZU1hcHBlcjogZnVuY3Rpb24gdmlzdWFsU3R5bGVNYXBwZXIodCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGZpbGw6IHQuZ2V0KCJjb2xvciIpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9LAogICAgICAgICAgdmlzdWFsRHJhd1R5cGU6ICJmaWxsIiwKICAgICAgICAgIG9wdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIG9wdGlvblVwZGF0ZWQoKSB7CiAgICAgICAgICAgIHZhciB0ID0gdGhpcy5vcHRpb247CiAgICAgICAgICAgIHQuZ3JpZFNpemUgPSBNYXRoLm1heChNYXRoLmZsb29yKHQuZ3JpZFNpemUpLCA0KTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRJbml0aWFsRGF0YTogZnVuY3Rpb24gZ2V0SW5pdGlhbERhdGEodCwgZSkgewogICAgICAgICAgICB2YXIgYSA9IG8uaGVscGVyLmNyZWF0ZURpbWVuc2lvbnModC5kYXRhLCB7CiAgICAgICAgICAgICAgY29vcmREaW1lbnNpb25zOiBbInZhbHVlIl0KICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICBpID0gbmV3IG8uTGlzdChhLCB0aGlzKTsKICAgICAgICAgICAgcmV0dXJuIGkuaW5pdERhdGEodC5kYXRhKSwgaTsKICAgICAgICAgIH0sCiAgICAgICAgICBkZWZhdWx0T3B0aW9uOiB7CiAgICAgICAgICAgIG1hc2tJbWFnZTogbnVsbCwKICAgICAgICAgICAgc2hhcGU6ICJjaXJjbGUiLAogICAgICAgICAgICBsZWZ0OiAiY2VudGVyIiwKICAgICAgICAgICAgdG9wOiAiY2VudGVyIiwKICAgICAgICAgICAgd2lkdGg6ICI3MCUiLAogICAgICAgICAgICBoZWlnaHQ6ICI4MCUiLAogICAgICAgICAgICBzaXplUmFuZ2U6IFsxMiwgNjBdLAogICAgICAgICAgICByb3RhdGlvblJhbmdlOiBbLTkwLCA5MF0sCiAgICAgICAgICAgIHJvdGF0aW9uU3RlcDogNDUsCiAgICAgICAgICAgIGdyaWRTaXplOiA4LAogICAgICAgICAgICBkcmF3T3V0T2ZCb3VuZDogITEsCiAgICAgICAgICAgIHRleHRTdHlsZTogewogICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICJub3JtYWwiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KSwgby5leHRlbmRDaGFydFZpZXcoewogICAgICAgICAgdHlwZTogIndvcmRDbG91ZCIsCiAgICAgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcih0LCBlLCBhKSB7CiAgICAgICAgICAgIHZhciBpID0gdGhpcy5ncm91cDsKICAgICAgICAgICAgaS5yZW1vdmVBbGwoKTsKICAgICAgICAgICAgdmFyIHIgPSB0LmdldERhdGEoKSwKICAgICAgICAgICAgICAgIG4gPSB0LmdldCgiZ3JpZFNpemUiKTsKICAgICAgICAgICAgdC5sYXlvdXRJbnN0YW5jZS5vbmRyYXcgPSBmdW5jdGlvbiAoZSwgYSwgcywgbCkgewogICAgICAgICAgICAgIHZhciBkID0gci5nZXRJdGVtTW9kZWwocyksCiAgICAgICAgICAgICAgICAgIHUgPSBkLmdldE1vZGVsKCJ0ZXh0U3R5bGUiKSwKICAgICAgICAgICAgICAgICAgZiA9IG5ldyBvLmdyYXBoaWMuVGV4dCh7CiAgICAgICAgICAgICAgICBzdHlsZTogby5oZWxwZXIuY3JlYXRlVGV4dFN0eWxlKHUpLAogICAgICAgICAgICAgICAgc2NhbGVYOiAxIC8gbC5pbmZvLm11LAogICAgICAgICAgICAgICAgc2NhbGVZOiAxIC8gbC5pbmZvLm11LAogICAgICAgICAgICAgICAgeDogKGwuZ3ggKyBsLmluZm8uZ3cgLyAyKSAqIG4sCiAgICAgICAgICAgICAgICB5OiAobC5neSArIGwuaW5mby5naCAvIDIpICogbiwKICAgICAgICAgICAgICAgIHJvdGF0aW9uOiBsLnJvdAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGYuc2V0U3R5bGUoewogICAgICAgICAgICAgICAgeDogbC5pbmZvLmZpbGxUZXh0T2Zmc2V0WCwKICAgICAgICAgICAgICAgIHk6IGwuaW5mby5maWxsVGV4dE9mZnNldFkgKyAuNSAqIGEsCiAgICAgICAgICAgICAgICB0ZXh0OiBlLAogICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbjogIm1pZGRsZSIsCiAgICAgICAgICAgICAgICBmaWxsOiByLmdldEl0ZW1WaXN1YWwocywgInN0eWxlIikuZmlsbCwKICAgICAgICAgICAgICAgIGZvbnRTaXplOiBhCiAgICAgICAgICAgICAgfSksIGkuYWRkKGYpLCByLnNldEl0ZW1HcmFwaGljRWwocywgZiksIGYuZW5zdXJlU3RhdGUoImVtcGhhc2lzIikuc3R5bGUgPSBvLmhlbHBlci5jcmVhdGVUZXh0U3R5bGUoZC5nZXRNb2RlbChbImVtcGhhc2lzIiwgInRleHRTdHlsZSJdKSwgewogICAgICAgICAgICAgICAgc3RhdGU6ICJlbXBoYXNpcyIKICAgICAgICAgICAgICB9KSwgZi5lbnN1cmVTdGF0ZSgiYmx1ciIpLnN0eWxlID0gby5oZWxwZXIuY3JlYXRlVGV4dFN0eWxlKGQuZ2V0TW9kZWwoWyJibHVyIiwgInRleHRTdHlsZSJdKSwgewogICAgICAgICAgICAgICAgc3RhdGU6ICJibHVyIgogICAgICAgICAgICAgIH0pLCBvLmhlbHBlci5lbmFibGVIb3ZlckVtcGhhc2lzKGYsIGQuZ2V0KFsiZW1waGFzaXMiLCAiZm9jdXMiXSksIGQuZ2V0KFsiZW1waGFzaXMiLCAiYmx1clNjb3BlIl0pKSwgZi5zdGF0ZVRyYW5zaXRpb24gPSB7CiAgICAgICAgICAgICAgICBkdXJhdGlvbjogdC5nZXQoImFuaW1hdGlvbiIpID8gdC5nZXQoWyJzdGF0ZUFuaW1hdGlvbiIsICJkdXJhdGlvbiJdKSA6IDAsCiAgICAgICAgICAgICAgICBlYXNpbmc6IHQuZ2V0KFsic3RhdGVBbmltYXRpb24iLCAiZWFzaW5nIl0pCiAgICAgICAgICAgICAgfSwgZi5fX2hpZ2hEb3duRGlzcGF0Y2hlciA9ICEwOwogICAgICAgICAgICB9LCB0aGlzLl9tb2RlbCA9IHQ7CiAgICAgICAgICB9LAogICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7CiAgICAgICAgICAgIHRoaXMuZ3JvdXAucmVtb3ZlQWxsKCksIHRoaXMuX21vZGVsLmxheW91dEluc3RhbmNlLmRpc3Bvc2UoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiBkaXNwb3NlKCkgewogICAgICAgICAgICB0aGlzLl9tb2RlbC5sYXlvdXRJbnN0YW5jZS5kaXNwb3NlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSksIHdpbmRvdy5zZXRJbW1lZGlhdGUgfHwgKHdpbmRvdy5zZXRJbW1lZGlhdGUgPSB3aW5kb3cubXNTZXRJbW1lZGlhdGUgfHwgd2luZG93LndlYmtpdFNldEltbWVkaWF0ZSB8fCB3aW5kb3cubW96U2V0SW1tZWRpYXRlIHx8IHdpbmRvdy5vU2V0SW1tZWRpYXRlIHx8IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGlmICghd2luZG93LnBvc3RNZXNzYWdlIHx8ICF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikgcmV0dXJuIG51bGw7CiAgICAgICAgICB2YXIgdCA9IFt2b2lkIDBdLAogICAgICAgICAgICAgIGUgPSAiemVyby10aW1lb3V0LW1lc3NhZ2UiOwogICAgICAgICAgcmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiBhLmRhdGEgJiYgYS5kYXRhLnN1YnN0cigwLCBlLmxlbmd0aCkgPT09IGUpIHsKICAgICAgICAgICAgICBhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgIHZhciBvID0gcGFyc2VJbnQoYS5kYXRhLnN1YnN0cihlLmxlbmd0aCksIDM2KTsKICAgICAgICAgICAgICB0W29dICYmICh0W29dKCksIHRbb10gPSB2b2lkIDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCAhMCksIHdpbmRvdy5jbGVhckltbWVkaWF0ZSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHRbZV0gJiYgKHRbZV0gPSB2b2lkIDApOwogICAgICAgICAgfSwgZnVuY3Rpb24gKGEpIHsKICAgICAgICAgICAgdmFyIG8gPSB0Lmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIHQucHVzaChhKSwgd2luZG93LnBvc3RNZXNzYWdlKGUgKyBvLnRvU3RyaW5nKDM2KSwgIioiKSwgbzsKICAgICAgICAgIH07CiAgICAgICAgfSgpIHx8IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh0LCAwKTsKICAgICAgICB9KSwgd2luZG93LmNsZWFySW1tZWRpYXRlIHx8ICh3aW5kb3cuY2xlYXJJbW1lZGlhdGUgPSB3aW5kb3cubXNDbGVhckltbWVkaWF0ZSB8fCB3aW5kb3cud2Via2l0Q2xlYXJJbW1lZGlhdGUgfHwgd2luZG93Lm1vekNsZWFySW1tZWRpYXRlIHx8IHdpbmRvdy5vQ2xlYXJJbW1lZGlhdGUgfHwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodCk7CiAgICAgICAgfSk7CgogICAgICAgIHZhciBpID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgICAgICAgIGlmICghdCB8fCAhdC5nZXRDb250ZXh0KSByZXR1cm4gITE7CiAgICAgICAgICB2YXIgZSA9IHQuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgIHJldHVybiAhIShlLmdldEltYWdlRGF0YSAmJiBlLmZpbGxUZXh0ICYmIEFycmF5LnByb3RvdHlwZS5zb21lICYmIEFycmF5LnByb3RvdHlwZS5wdXNoKTsKICAgICAgICB9KCksCiAgICAgICAgICAgIHIgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAoaSkgewogICAgICAgICAgICBmb3IgKHZhciB0LCBlLCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKSwgbyA9IDIwOyBvOykgewogICAgICAgICAgICAgIGlmIChhLmZvbnQgPSBvLnRvU3RyaW5nKDEwKSArICJweCBzYW5zLXNlcmlmIiwgYS5tZWFzdXJlVGV4dCgi77y3Iikud2lkdGggPT09IHQgJiYgYS5tZWFzdXJlVGV4dCgibSIpLndpZHRoID09PSBlKSByZXR1cm4gbyArIDE7CiAgICAgICAgICAgICAgdCA9IGEubWVhc3VyZVRleHQoIu+8tyIpLndpZHRoLCBlID0gYS5tZWFzdXJlVGV4dCgibSIpLndpZHRoLCBvLS07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfQogICAgICAgIH0oKSwKICAgICAgICAgICAgbiA9IGZ1bmN0aW9uIG4odCkgewogICAgICAgICAgZm9yICh2YXIgZSwgYSwgbyA9IHQubGVuZ3RoOyBvOyBlID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbyksIGEgPSB0Wy0tb10sIHRbb10gPSB0W2VdLCB0W2VdID0gYSkgewogICAgICAgICAgICA7CiAgICAgICAgICB9CgogICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgfSwKICAgICAgICAgICAgcyA9IGZ1bmN0aW9uIHModCwgZSkgewogICAgICAgICAgaWYgKGkpIHsKICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh0KSB8fCAodCA9IFt0XSksIHQuZm9yRWFjaChmdW5jdGlvbiAoZSwgYSkgewogICAgICAgICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgZSkgewogICAgICAgICAgICAgICAgaWYgKHRbYV0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKSwgIXRbYV0pIHRocm93ICJUaGUgZWxlbWVudCBpZCBzcGVjaWZpZWQgaXMgbm90IGZvdW5kLiI7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICghZS50YWdOYW1lICYmICFlLmFwcGVuZENoaWxkKSB0aHJvdyAiWW91IG11c3QgcGFzcyB2YWxpZCBIVE1MIGVsZW1lbnRzLCBvciBJRCBvZiB0aGUgZWxlbWVudC4iOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdmFyIGEgPSB7CiAgICAgICAgICAgICAgbGlzdDogW10sCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJyJUcmVidWNoZXQgTVMiLCAiSGVpdGkgVEMiLCAi5b6u6Luf5q2j6buR6auUIiwgIkFyaWFsIFVuaWNvZGUgTVMiLCAiRHJvaWQgRmFsbGJhY2sgU2FucyIsIHNhbnMtc2VyaWYnLAogICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICJub3JtYWwiLAogICAgICAgICAgICAgIGNvbG9yOiAicmFuZG9tLWRhcmsiLAogICAgICAgICAgICAgIG1pblNpemU6IDAsCiAgICAgICAgICAgICAgd2VpZ2h0RmFjdG9yOiAxLAogICAgICAgICAgICAgIGNsZWFyQ2FudmFzOiAhMCwKICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICIjZmZmIiwKICAgICAgICAgICAgICBncmlkU2l6ZTogOCwKICAgICAgICAgICAgICBkcmF3T3V0T2ZCb3VuZDogITEsCiAgICAgICAgICAgICAgb3JpZ2luOiBudWxsLAogICAgICAgICAgICAgIGRyYXdNYXNrOiAhMSwKICAgICAgICAgICAgICBtYXNrQ29sb3I6ICJyZ2JhKDI1NSwwLDAsMC4zKSIsCiAgICAgICAgICAgICAgbWFza0dhcFdpZHRoOiAuMywKICAgICAgICAgICAgICBsYXlvdXRBbmltYXRpb246ICEwLAogICAgICAgICAgICAgIHdhaXQ6IDAsCiAgICAgICAgICAgICAgYWJvcnRUaHJlc2hvbGQ6IDAsCiAgICAgICAgICAgICAgYWJvcnQ6IGZ1bmN0aW9uIGFib3J0KCkge30sCiAgICAgICAgICAgICAgbWluUm90YXRpb246IC1NYXRoLlBJIC8gMiwKICAgICAgICAgICAgICBtYXhSb3RhdGlvbjogTWF0aC5QSSAvIDIsCiAgICAgICAgICAgICAgcm90YXRpb25TdGVwOiAuMSwKICAgICAgICAgICAgICBzaHVmZmxlOiAhMCwKICAgICAgICAgICAgICByb3RhdGVSYXRpbzogLjEsCiAgICAgICAgICAgICAgc2hhcGU6ICJjaXJjbGUiLAogICAgICAgICAgICAgIGVsbGlwdGljaXR5OiAuNjUsCiAgICAgICAgICAgICAgY2xhc3NlczogbnVsbCwKICAgICAgICAgICAgICBob3ZlcjogbnVsbCwKICAgICAgICAgICAgICBjbGljazogbnVsbAogICAgICAgICAgICB9OwogICAgICAgICAgICBpZiAoZSkgZm9yICh2YXIgbyBpbiBlKSB7CiAgICAgICAgICAgICAgbyBpbiBhICYmIChhW29dID0gZVtvXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgiZnVuY3Rpb24iICE9IHR5cGVvZiBhLndlaWdodEZhY3RvcikgewogICAgICAgICAgICAgIHZhciBzID0gYS53ZWlnaHRGYWN0b3I7CgogICAgICAgICAgICAgIGEud2VpZ2h0RmFjdG9yID0gZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0ICogczsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoImZ1bmN0aW9uIiAhPSB0eXBlb2YgYS5zaGFwZSkgc3dpdGNoIChhLnNoYXBlKSB7CiAgICAgICAgICAgICAgY2FzZSAiY2lyY2xlIjoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgYS5zaGFwZSA9ICJjaXJjbGUiOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgImNhcmRpb2lkIjoKICAgICAgICAgICAgICAgIGEuc2hhcGUgPSBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gMSAtIE1hdGguc2luKHQpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgY2FzZSAiZGlhbW9uZCI6CiAgICAgICAgICAgICAgY2FzZSAic3F1YXJlIjoKICAgICAgICAgICAgICAgIGEuc2hhcGUgPSBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICB2YXIgZSA9IHQgJSAoMiAqIE1hdGguUEkgLyA0KTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIDEgLyAoTWF0aC5jb3MoZSkgKyBNYXRoLnNpbihlKSk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlICJ0cmlhbmdsZS1mb3J3YXJkIjoKICAgICAgICAgICAgICAgIGEuc2hhcGUgPSBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICB2YXIgZSA9IHQgJSAoMiAqIE1hdGguUEkgLyAzKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIDEgLyAoTWF0aC5jb3MoZSkgKyBNYXRoLnNxcnQoMykgKiBNYXRoLnNpbihlKSk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlICJ0cmlhbmdsZSI6CiAgICAgICAgICAgICAgY2FzZSAidHJpYW5nbGUtdXByaWdodCI6CiAgICAgICAgICAgICAgICBhLnNoYXBlID0gZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgdmFyIGUgPSAodCArIDMgKiBNYXRoLlBJIC8gMikgJSAoMiAqIE1hdGguUEkgLyAzKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIDEgLyAoTWF0aC5jb3MoZSkgKyBNYXRoLnNxcnQoMykgKiBNYXRoLnNpbihlKSk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlICJwZW50YWdvbiI6CiAgICAgICAgICAgICAgICBhLnNoYXBlID0gZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgdmFyIGUgPSAodCArIC45NTUpICUgKDIgKiBNYXRoLlBJIC8gNSk7CiAgICAgICAgICAgICAgICAgIHJldHVybiAxIC8gKE1hdGguY29zKGUpICsgLjcyNjU0MyAqIE1hdGguc2luKGUpKTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgIGNhc2UgInN0YXIiOgogICAgICAgICAgICAgICAgYS5zaGFwZSA9IGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIHZhciBlID0gKHQgKyAuOTU1KSAlICgyICogTWF0aC5QSSAvIDEwKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuICh0ICsgLjk1NSkgJSAoMiAqIE1hdGguUEkgLyA1KSAtIDIgKiBNYXRoLlBJIC8gMTAgPj0gMCA/IDEgLyAoTWF0aC5jb3MoMiAqIE1hdGguUEkgLyAxMCAtIGUpICsgMy4wNzc2OCAqIE1hdGguc2luKDIgKiBNYXRoLlBJIC8gMTAgLSBlKSkgOiAxIC8gKE1hdGguY29zKGUpICsgMy4wNzc2OCAqIE1hdGguc2luKGUpKTsKICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICB9CiAgICAgICAgICAgIGEuZ3JpZFNpemUgPSBNYXRoLm1heChNYXRoLmZsb29yKGEuZ3JpZFNpemUpLCA0KTsKICAgICAgICAgICAgdmFyIGwsCiAgICAgICAgICAgICAgICBkLAogICAgICAgICAgICAgICAgdSwKICAgICAgICAgICAgICAgIGYsCiAgICAgICAgICAgICAgICBjLAogICAgICAgICAgICAgICAgaCwKICAgICAgICAgICAgICAgIG0sCiAgICAgICAgICAgICAgICBnID0gYS5ncmlkU2l6ZSwKICAgICAgICAgICAgICAgIHYgPSBnIC0gYS5tYXNrR2FwV2lkdGgsCiAgICAgICAgICAgICAgICB3ID0gTWF0aC5hYnMoYS5tYXhSb3RhdGlvbiAtIGEubWluUm90YXRpb24pLAogICAgICAgICAgICAgICAgcCA9IE1hdGgubWluKGEubWF4Um90YXRpb24sIGEubWluUm90YXRpb24pLAogICAgICAgICAgICAgICAgeSA9IGEucm90YXRpb25TdGVwOwoKICAgICAgICAgICAgc3dpdGNoIChhLmNvbG9yKSB7CiAgICAgICAgICAgICAgY2FzZSAicmFuZG9tLWRhcmsiOgogICAgICAgICAgICAgICAgbSA9IGZ1bmN0aW9uIG0oKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBSKDEwLCA1MCk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBjYXNlICJyYW5kb20tbGlnaHQiOgogICAgICAgICAgICAgICAgbSA9IGZ1bmN0aW9uIG0oKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBSKDUwLCA5MCk7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgImZ1bmN0aW9uIiA9PSB0eXBlb2YgYS5jb2xvciAmJiAobSA9IGEuY29sb3IpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgeCA9IG51bGw7CiAgICAgICAgICAgICJmdW5jdGlvbiIgPT0gdHlwZW9mIGEuY2xhc3NlcyAmJiAoeCA9IGEuY2xhc3Nlcyk7CgogICAgICAgICAgICB2YXIgTSwKICAgICAgICAgICAgICAgIFMgPSAhMSwKICAgICAgICAgICAgICAgIGIgPSBbXSwKICAgICAgICAgICAgICAgIEkgPSBmdW5jdGlvbiBJKHQpIHsKICAgICAgICAgICAgICB2YXIgZSwKICAgICAgICAgICAgICAgICAgYSwKICAgICAgICAgICAgICAgICAgbyA9IHQuY3VycmVudFRhcmdldCwKICAgICAgICAgICAgICAgICAgaSA9IG8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICAgICAgdC50b3VjaGVzID8gKGUgPSB0LnRvdWNoZXNbMF0uY2xpZW50WCwgYSA9IHQudG91Y2hlc1swXS5jbGllbnRZKSA6IChlID0gdC5jbGllbnRYLCBhID0gdC5jbGllbnRZKTsKICAgICAgICAgICAgICB2YXIgciA9IGUgLSBpLmxlZnQsCiAgICAgICAgICAgICAgICAgIG4gPSBhIC0gaS50b3AsCiAgICAgICAgICAgICAgICAgIHMgPSBNYXRoLmZsb29yKHIgKiAoby53aWR0aCAvIGkud2lkdGggfHwgMSkgLyBnKSwKICAgICAgICAgICAgICAgICAgbCA9IE1hdGguZmxvb3IobiAqIChvLmhlaWdodCAvIGkuaGVpZ2h0IHx8IDEpIC8gZyk7CiAgICAgICAgICAgICAgcmV0dXJuIGJbc11bbF07CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUID0gZnVuY3Rpb24gVCh0KSB7CiAgICAgICAgICAgICAgdmFyIGUgPSBJKHQpOwogICAgICAgICAgICAgIE0gIT09IGUgJiYgKE0gPSBlLCBlID8gYS5ob3ZlcihlLml0ZW0sIGUuZGltZW5zaW9uLCB0KSA6IGEuaG92ZXIodm9pZCAwLCB2b2lkIDAsIHQpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEMgPSBmdW5jdGlvbiBDKHQpIHsKICAgICAgICAgICAgICB2YXIgZSA9IEkodCk7CiAgICAgICAgICAgICAgZSAmJiAoYS5jbGljayhlLml0ZW0sIGUuZGltZW5zaW9uLCB0KSwgdC5wcmV2ZW50RGVmYXVsdCgpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEUgPSBbXSwKICAgICAgICAgICAgICAgIGsgPSBmdW5jdGlvbiBrKHQpIHsKICAgICAgICAgICAgICBpZiAoRVt0XSkgcmV0dXJuIEVbdF07CiAgICAgICAgICAgICAgdmFyIGUgPSA4ICogdCwKICAgICAgICAgICAgICAgICAgbyA9IGUsCiAgICAgICAgICAgICAgICAgIGkgPSBbXTsKCiAgICAgICAgICAgICAgZm9yICgwID09PSB0ICYmIGkucHVzaChbZlswXSwgZlsxXSwgMF0pOyBvLS07KSB7CiAgICAgICAgICAgICAgICB2YXIgciA9IDE7CiAgICAgICAgICAgICAgICAiY2lyY2xlIiAhPT0gYS5zaGFwZSAmJiAociA9IGEuc2hhcGUobyAvIGUgKiAyICogTWF0aC5QSSkpLCBpLnB1c2goW2ZbMF0gKyB0ICogciAqIE1hdGguY29zKC1vIC8gZSAqIDIgKiBNYXRoLlBJKSwgZlsxXSArIHQgKiByICogTWF0aC5zaW4oLW8gLyBlICogMiAqIE1hdGguUEkpICogYS5lbGxpcHRpY2l0eSwgbyAvIGUgKiAyICogTWF0aC5QSV0pOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgcmV0dXJuIEVbdF0gPSBpLCBpOwogICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgTyA9IGZ1bmN0aW9uIE8oKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGEuYWJvcnRUaHJlc2hvbGQgPiAwICYmIG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gaCA+IGEuYWJvcnRUaHJlc2hvbGQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBQID0gZnVuY3Rpb24gUChlLCBhLCBvLCBpLCByKSB7CiAgICAgICAgICAgICAgZSA+PSBkIHx8IGEgPj0gdSB8fCBlIDwgMCB8fCBhIDwgMCB8fCAobFtlXVthXSA9ICExLCBvICYmIHRbMF0uZ2V0Q29udGV4dCgiMmQiKS5maWxsUmVjdChlICogZywgYSAqIGcsIHYsIHYpLCBTICYmIChiW2VdW2FdID0gewogICAgICAgICAgICAgICAgaXRlbTogciwKICAgICAgICAgICAgICAgIGRpbWVuc2lvbjogaQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIEQgPSBmdW5jdGlvbiBEKGUsIGEsIG8pIHsKICAgICAgICAgICAgICBpZiAoYSkgcmV0dXJuICF0LnNvbWUoZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgIHZhciBpID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkN1c3RvbUV2ZW50Iik7CiAgICAgICAgICAgICAgICByZXR1cm4gaS5pbml0Q3VzdG9tRXZlbnQoZSwgITAsIGEsIG8gfHwge30pLCAhdC5kaXNwYXRjaEV2ZW50KGkpOwogICAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgICAgICAgIHQuZm9yRWFjaChmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgdmFyIGkgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgiQ3VzdG9tRXZlbnQiKTsKICAgICAgICAgICAgICAgIGkuaW5pdEN1c3RvbUV2ZW50KGUsICEwLCBhLCBvIHx8IHt9KSwgdC5kaXNwYXRjaEV2ZW50KGkpOwogICAgICAgICAgICAgIH0sIHRoaXMpOwogICAgICAgICAgICB9OwoKICAgICAgICAgICAgIWZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICB2YXIgZSA9IHRbMF07CiAgICAgICAgICAgICAgaWYgKGUuZ2V0Q29udGV4dCkgZCA9IE1hdGguY2VpbChlLndpZHRoIC8gZyksIHUgPSBNYXRoLmNlaWwoZS5oZWlnaHQgLyBnKTtlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBvID0gZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgICAgIGQgPSBNYXRoLmNlaWwoby53aWR0aCAvIGcpLCB1ID0gTWF0aC5jZWlsKG8uaGVpZ2h0IC8gZyk7CiAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICBpZiAoRCgid29yZGNsb3Vkc3RhcnQiLCAhMCkpIHsKICAgICAgICAgICAgICAgIHZhciBpLCBzLCB2LCBJLCBFOwogICAgICAgICAgICAgICAgaWYgKGYgPSBhLm9yaWdpbiA/IFthLm9yaWdpblswXSAvIGcsIGEub3JpZ2luWzFdIC8gZ10gOiBbZCAvIDIsIHUgLyAyXSwgYyA9IE1hdGguZmxvb3IoTWF0aC5zcXJ0KGQgKiBkICsgdSAqIHUpKSwgbCA9IFtdLCAhZS5nZXRDb250ZXh0IHx8IGEuY2xlYXJDYW52YXMpIGZvciAodC5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgIGlmICh0LmdldENvbnRleHQpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IHQuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgICAgICAgICAgICBlLmZpbGxTdHlsZSA9IGEuYmFja2dyb3VuZENvbG9yLCBlLmNsZWFyUmVjdCgwLCAwLCBkICogKGcgKyAxKSwgdSAqIChnICsgMSkpLCBlLmZpbGxSZWN0KDAsIDAsIGQgKiAoZyArIDEpLCB1ICogKGcgKyAxKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB0LnRleHRDb250ZW50ID0gIiIsIHQuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gYS5iYWNrZ3JvdW5kQ29sb3IsIHQuc3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwogICAgICAgICAgICAgICAgfSksIGkgPSBkOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgIGZvciAobFtpXSA9IFtdLCBzID0gdTsgcy0tOykgewogICAgICAgICAgICAgICAgICAgIGxbaV1bc10gPSAhMDsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgdmFyIFIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgICAgICAgICBSLmZpbGxTdHlsZSA9IGEuYmFja2dyb3VuZENvbG9yLCBSLmZpbGxSZWN0KDAsIDAsIDEsIDEpOwogICAgICAgICAgICAgICAgICB2YXIgQSwKICAgICAgICAgICAgICAgICAgICAgIHosCiAgICAgICAgICAgICAgICAgICAgICBGID0gUi5nZXRJbWFnZURhdGEoMCwgMCwgMSwgMSkuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgIEwgPSBlLmdldENvbnRleHQoIjJkIikuZ2V0SW1hZ2VEYXRhKDAsIDAsIGQgKiBnLCB1ICogZykuZGF0YTsKCiAgICAgICAgICAgICAgICAgIGZvciAoaSA9IGQ7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKGxbaV0gPSBbXSwgcyA9IHU7IHMtLTspIHsKICAgICAgICAgICAgICAgICAgICAgIHogPSBnOwoKICAgICAgICAgICAgICAgICAgICAgIHQ6IGZvciAoOyB6LS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoQSA9IGc7IEEtLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHYgPSA0OyB2LS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTFs0ICogKChzICogZyArIHopICogZCAqIGcgKyAoaSAqIGcgKyBBKSkgKyB2XSAhPT0gRlt2XSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsW2ldW3NdID0gITE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgITEgIT09IGxbaV1bc10gJiYgKGxbaV1bc10gPSAhMCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICBMID0gUiA9IEYgPSB2b2lkIDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGEuaG92ZXIgfHwgYS5jbGljaykgewogICAgICAgICAgICAgICAgICBmb3IgKFMgPSAhMCwgaSA9IGQgKyAxOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgYltpXSA9IFtdOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICBhLmhvdmVyICYmIGUuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgVCksIGEuY2xpY2sgJiYgKGUuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBDKSwgZS5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaHN0YXJ0IiwgQyksIGUuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIHQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgfSksIGUuc3R5bGUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3IgPSAicmdiYSgwLCAwLCAwLCAwKSIpLCBlLmFkZEV2ZW50TGlzdGVuZXIoIndvcmRjbG91ZHN0YXJ0IiwgZnVuY3Rpb24gdCgpIHsKICAgICAgICAgICAgICAgICAgICBlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIndvcmRjbG91ZHN0YXJ0IiwgdCksIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgVCksIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBDKSwgTSA9IHZvaWQgMDsKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdiA9IDA7CiAgICAgICAgICAgICAgICB2YXIgVyA9ICEwOwogICAgICAgICAgICAgICAgYS5sYXlvdXRBbmltYXRpb24gPyAwICE9PSBhLndhaXQgPyAoSSA9IHdpbmRvdy5zZXRUaW1lb3V0LCBFID0gd2luZG93LmNsZWFyVGltZW91dCkgOiAoSSA9IHdpbmRvdy5zZXRJbW1lZGlhdGUsIEUgPSB3aW5kb3cuY2xlYXJJbW1lZGlhdGUpIDogKEkgPSBmdW5jdGlvbiBJKHQpIHsKICAgICAgICAgICAgICAgICAgdCgpOwogICAgICAgICAgICAgICAgfSwgRSA9IGZ1bmN0aW9uIEUoKSB7CiAgICAgICAgICAgICAgICAgIFcgPSAhMTsKICAgICAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgICAgIHZhciBCID0gZnVuY3Rpb24gQihlLCBhKSB7CiAgICAgICAgICAgICAgICAgIHQuZm9yRWFjaChmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgIHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlLCBhKTsKICAgICAgICAgICAgICAgICAgfSwgdGhpcyk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFggPSBmdW5jdGlvbiB0KCkgewogICAgICAgICAgICAgICAgICBCKCJ3b3JkY2xvdWRzdGFydCIsIHQpLCBFKFkpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAhZnVuY3Rpb24gKGUsIGEpIHsKICAgICAgICAgICAgICAgICAgdC5mb3JFYWNoKGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICAgICAgdC5hZGRFdmVudExpc3RlbmVyKCJ3b3JkY2xvdWRzdGFydCIsIGEpOwogICAgICAgICAgICAgICAgICB9LCB0aGlzKTsKICAgICAgICAgICAgICAgIH0oMCwgWCk7CiAgICAgICAgICAgICAgICB2YXIgWSA9IChhLmxheW91dEFuaW1hdGlvbiA/IEkgOiBzZXRUaW1lb3V0KShmdW5jdGlvbiBlKCkgewogICAgICAgICAgICAgICAgICBpZiAoVykgewogICAgICAgICAgICAgICAgICAgIGlmICh2ID49IGEubGlzdC5sZW5ndGgpIHJldHVybiBFKFkpLCBEKCJ3b3JkY2xvdWRzdG9wIiwgITEpLCB2b2lkIEIoIndvcmRjbG91ZHN0YXJ0IiwgWCk7CiAgICAgICAgICAgICAgICAgICAgaCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpOwoKICAgICAgICAgICAgICAgICAgICB2YXIgbyA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICAgICAgICB2YXIgbywgaSwgczsKICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoZSkgPyAobyA9IGVbMF0sIGkgPSBlWzFdKSA6IChvID0gZS53b3JkLCBpID0gZS53ZWlnaHQsIHMgPSBlLmF0dHJpYnV0ZXMpOwoKICAgICAgICAgICAgICAgICAgICAgIHZhciBmLAogICAgICAgICAgICAgICAgICAgICAgICAgIGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdiwKICAgICAgICAgICAgICAgICAgICAgICAgICBNID0gMCA9PT0gYS5yb3RhdGVSYXRpbyB8fCBNYXRoLnJhbmRvbSgpID4gYS5yb3RhdGVSYXRpbyA/IDAgOiAwID09PSB3ID8gcCA6IHAgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiB3IC8geSkgKiB5LAogICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBmdW5jdGlvbiAodCwgZSwgbykgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGEud2VpZ2h0RmFjdG9yKGUpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA8PSBhLm1pblNpemUpIHJldHVybiAhMTsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICBpIDwgciAmJiAobiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0ID0gMjsgdCAqIGkgPCByOykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0oKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsID0gcy5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB3aWxsUmVhZEZyZXF1ZW50bHk6ICEwCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBsLmZvbnQgPSBhLmZvbnRXZWlnaHQgKyAiICIgKyAoaSAqIG4pLnRvU3RyaW5nKDEwKSArICJweCAiICsgYS5mb250RmFtaWx5OwogICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGwubWVhc3VyZVRleHQodCkud2lkdGggLyBuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdSA9IE1hdGgubWF4KGkgKiBuLCBsLm1lYXN1cmVUZXh0KCJtIikud2lkdGgsIGwubWVhc3VyZVRleHQoIu+8tyIpLndpZHRoKSAvIG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZCArIDIgKiB1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IDMgKiB1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaCA9IE1hdGguY2VpbChmIC8gZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtID0gTWF0aC5jZWlsKGMgLyBnKTsKICAgICAgICAgICAgICAgICAgICAgICAgZiA9IGggKiBnLCBjID0gbSAqIGc7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2ID0gLWQgLyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA9IC40ICogLXUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gTWF0aC5jZWlsKChmICogTWF0aC5hYnMoTWF0aC5zaW4obykpICsgYyAqIE1hdGguYWJzKE1hdGguY29zKG8pKSkgLyBnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBNYXRoLmNlaWwoKGYgKiBNYXRoLmFicyhNYXRoLmNvcyhvKSkgKyBjICogTWF0aC5hYnMoTWF0aC5zaW4obykpKSAvIGcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHkgKiBnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTSA9IHAgKiBnOwogICAgICAgICAgICAgICAgICAgICAgICBzLnNldEF0dHJpYnV0ZSgid2lkdGgiLCB4KSwgcy5zZXRBdHRyaWJ1dGUoImhlaWdodCIsIE0pLCBsLnNjYWxlKDEgLyBuLCAxIC8gbiksIGwudHJhbnNsYXRlKHggKiBuIC8gMiwgTSAqIG4gLyAyKSwgbC5yb3RhdGUoLW8pLCBsLmZvbnQgPSBhLmZvbnRXZWlnaHQgKyAiICIgKyAoaSAqIG4pLnRvU3RyaW5nKDEwKSArICJweCAiICsgYS5mb250RmFtaWx5LCBsLmZpbGxTdHlsZSA9ICIjMDAwIiwgbC50ZXh0QmFzZWxpbmUgPSAibWlkZGxlIiwgbC5maWxsVGV4dCh0LCB2ICogbiwgKHcgKyAuNSAqIGkpICogbik7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBTID0gbC5nZXRJbWFnZURhdGEoMCwgMCwgeCwgTSkuZGF0YTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE8oKSkgcmV0dXJuICExOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYiwgSSwgVCwgQyA9IFtdLCBFID0geSwgayA9IFtwIC8gMiwgeSAvIDIsIHAgLyAyLCB5IC8gMl07IEUtLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGIgPSBwOyBiLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUID0gZzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0OiBmb3IgKDsgVC0tOykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKEkgPSBnOyBJLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNbNCAqICgoYiAqIGcgKyBUKSAqIHggKyAoRSAqIGcgKyBJKSkgKyAzXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQy5wdXNoKFtFLCBiXSksIEUgPCBrWzNdICYmIChrWzNdID0gRSksIEUgPiBrWzFdICYmIChrWzFdID0gRSksIGIgPCBrWzBdICYmIChrWzBdID0gYiksIGIgPiBrWzJdICYmIChrWzJdID0gYik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtdTogbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBvY2N1cGllZDogQywKICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHM6IGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3c6IHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2g6IHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbFRleHRPZmZzZXRYOiB2LAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxUZXh0T2Zmc2V0WTogdywKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsVGV4dFdpZHRoOiBkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxUZXh0SGVpZ2h0OiB1LAogICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiBpCiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgICAgICAgICB9KG8sIGksIE0pOwoKICAgICAgICAgICAgICAgICAgICAgIGlmICghYikgcmV0dXJuICExOwogICAgICAgICAgICAgICAgICAgICAgaWYgKE8oKSkgcmV0dXJuICExOwoKICAgICAgICAgICAgICAgICAgICAgIGlmICghYS5kcmF3T3V0T2ZCb3VuZCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgSSA9IGIuYm91bmRzOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoSVsxXSAtIElbM10gKyAxID4gZCB8fCBJWzJdIC0gSVswXSArIDEgPiB1KSByZXR1cm4gITE7CiAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgVCA9IGMgKyAxOyBULS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBDID0gayhjIC0gVCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGEuc2h1ZmZsZSAmJiAoQyA9IFtdLmNvbmNhdChDKSwgbihDKSk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBFID0gMDsgRSA8IEMubGVuZ3RoOyBFKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgRCA9IChmID0gQ1tFXSwgaCA9IHZvaWQgMCwgdiA9IHZvaWQgMCwgaCA9IE1hdGguZmxvb3IoZlswXSAtIGIuZ3cgLyAyKSwgdiA9IE1hdGguZmxvb3IoZlsxXSAtIGIuZ2ggLyAyKSwgYi5ndywgYi5naCwgISFmdW5jdGlvbiAodCwgZSwgbywgaSwgcikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbiA9IHIubGVuZ3RoOyBuLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzID0gdCArIHJbbl1bMF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZSArIHJbbl1bMV07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+PSBkIHx8IGYgPj0gdSB8fCBzIDwgMCB8fCBmIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYS5kcmF3T3V0T2ZCb3VuZCkgcmV0dXJuICExOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFsW3NdW2ZdKSByZXR1cm4gITE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEwOwogICAgICAgICAgICAgICAgICAgICAgICAgIH0oaCwgdiwgMCwgMCwgYi5vY2N1cGllZCkgJiYgKGZ1bmN0aW9uIChlLCBvLCBpLCByLCBuLCBzLCBsLCBkLCB1KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBpLmZvbnRTaXplOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZiA9IG0gPyBtKHIsIG4sIGgsIHMsIGwpIDogYS5jb2xvciwgYyA9IHggPyB4KHIsIG4sIGgsIHMsIGwpIDogYS5jbGFzc2VzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBpLmJvdW5kczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZbM10sIHZbMF0sIHZbMV0sIHZbM10sIHZbMl0sIHZbMF0sIHQuZm9yRWFjaChmdW5jdGlvbiAodCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5nZXRDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG4gPSB0LmdldENvbnRleHQoIjJkIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBpLm11OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4uc2F2ZSgpLCBuLnNjYWxlKDEgLyBzLCAxIC8gcyksIG4uZm9udCA9IGEuZm9udFdlaWdodCArICIgIiArIChoICogcykudG9TdHJpbmcoMTApICsgInB4ICIgKyBhLmZvbnRGYW1pbHksIG4uZmlsbFN0eWxlID0gZiwgbi50cmFuc2xhdGUoKGUgKyBpLmd3IC8gMikgKiBnICogcywgKG8gKyBpLmdoIC8gMikgKiBnICogcyksIDAgIT09IGQgJiYgbi5yb3RhdGUoLWQpLCBuLnRleHRCYXNlbGluZSA9ICJtaWRkbGUiLCBuLmZpbGxUZXh0KHIsIGkuZmlsbFRleHRPZmZzZXRYICogcywgKGkuZmlsbFRleHRPZmZzZXRZICsgLjUgKiBoKSAqIHMpLCBuLnJlc3RvcmUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSA9ICIiOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSAicm90YXRlKCIgKyAtZCAvIE1hdGguUEkgKiAxODAgKyAiZGVnKSAiLCAxICE9PSBpLm11ICYmIChtICs9ICJ0cmFuc2xhdGVYKC0iICsgaS5maWxsVGV4dFdpZHRoIC8gNCArICJweCkgc2NhbGUoIiArIDEgLyBpLm11ICsgIikiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAiYWJzb2x1dGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogImJsb2NrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6IGEuZm9udFdlaWdodCArICIgIiArIGggKiBpLm11ICsgInB4ICIgKyBhLmZvbnRGYW1pbHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAoZSArIGkuZ3cgLyAyKSAqIGcgKyBpLmZpbGxUZXh0T2Zmc2V0WCArICJweCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IChvICsgaS5naCAvIDIpICogZyArIGkuZmlsbFRleHRPZmZzZXRZICsgInB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpLmZpbGxUZXh0V2lkdGggKyAicHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBpLmZpbGxUZXh0SGVpZ2h0ICsgInB4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IGggKyAicHgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogIm5vd3JhcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm06IG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRUcmFuc2Zvcm06IG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc1RyYW5zZm9ybTogbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbjogIjUwJSA0MCUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0VHJhbnNmb3JtT3JpZ2luOiAiNTAlIDQwJSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc1RyYW5zZm9ybU9yaWdpbjogIjUwJSA0MCUiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgdyBpbiBmICYmICh2LmNvbG9yID0gZiksIGwudGV4dENvbnRlbnQgPSByLCB2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsLnN0eWxlW3ddID0gdlt3XTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1KSBmb3IgKHZhciBwIGluIHUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwuc2V0QXR0cmlidXRlKHAsIHVbcF0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjICYmIChsLmNsYXNzTmFtZSArPSBjKSwgdC5hcHBlbmRDaGlsZChsKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfShoLCB2LCBiLCBvLCBpLCBjIC0gVCwgZlsyXSwgTSwgcyksIGZ1bmN0aW9uIChlLCBvLCBpLCByLCBuLCBzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBuLm9jY3VwaWVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggPSBhLmRyYXdNYXNrOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoICYmICgobCA9IHRbMF0uZ2V0Q29udGV4dCgiMmQiKSkuc2F2ZSgpLCBsLmZpbGxTdHlsZSA9IGEubWFza0NvbG9yKSwgUykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbSA9IG4uYm91bmRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IChlICsgbVszXSkgKiBnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk6IChvICsgbVswXSkgKiBnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHc6IChtWzFdIC0gbVszXSArIDEpICogZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoOiAobVsyXSAtIG1bMF0gKyAxKSAqIGcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB2ID0gYy5sZW5ndGg7IHYtLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHcgPSBlICsgY1t2XVswXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBvICsgY1t2XVsxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdyA+PSBkIHx8IHAgPj0gdSB8fCB3IDwgMCB8fCBwIDwgMCB8fCBQKHcsIHAsIGgsIGYsIHMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGggJiYgbC5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgfShoLCB2LCAwLCAwLCBiLCBlKSwgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3g6IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBneTogdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdDogTSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm86IGIKICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEQpIHJldHVybiBEOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgICAgICAgfShhLmxpc3Rbdl0pLAogICAgICAgICAgICAgICAgICAgICAgICBpID0gIUQoIndvcmRjbG91ZGRyYXduIiwgITAsIHsKICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IGEubGlzdFt2XSwKICAgICAgICAgICAgICAgICAgICAgIGRyYXduOiBvCiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChPKCkgfHwgaSkgcmV0dXJuIEUoWSksIGEuYWJvcnQoKSwgRCgid29yZGNsb3VkYWJvcnQiLCAhMSksIEQoIndvcmRjbG91ZHN0b3AiLCAhMSksIHZvaWQgQigid29yZGNsb3Vkc3RhcnQiLCBYKTsKICAgICAgICAgICAgICAgICAgICB2KyssIFkgPSBJKGUsIGEud2FpdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIGEud2FpdCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KCk7CiAgICAgICAgICB9CgogICAgICAgICAgZnVuY3Rpb24gUih0LCBlKSB7CiAgICAgICAgICAgIHJldHVybiAiaHNsKCIgKyAoMzYwICogTWF0aC5yYW5kb20oKSkudG9GaXhlZCgpICsgIiwiICsgKDMwICogTWF0aC5yYW5kb20oKSArIDcwKS50b0ZpeGVkKCkgKyAiJSwiICsgKE1hdGgucmFuZG9tKCkgKiAoZSAtIHQpICsgdCkudG9GaXhlZCgpICsgIiUpIjsKICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICBzLmlzU3VwcG9ydGVkID0gaSwgcy5taW5Gb250U2l6ZSA9IHI7CiAgICAgICAgdmFyIGwgPSBzOwogICAgICAgIGlmICghbC5pc1N1cHBvcnRlZCkgdGhyb3cgbmV3IEVycm9yKCJTb3JyeSB5b3VyIGJyb3dzZXIgbm90IHN1cHBvcnQgd29yZENsb3VkIik7CiAgICAgICAgby5yZWdpc3RlckxheW91dChmdW5jdGlvbiAodCwgZSkgewogICAgICAgICAgdC5lYWNoU2VyaWVzQnlUeXBlKCJ3b3JkQ2xvdWQiLCBmdW5jdGlvbiAoYSkgewogICAgICAgICAgICB2YXIgaSA9IG8uaGVscGVyLmdldExheW91dFJlY3QoYS5nZXRCb3hMYXlvdXRQYXJhbXMoKSwgewogICAgICAgICAgICAgIHdpZHRoOiBlLmdldFdpZHRoKCksCiAgICAgICAgICAgICAgaGVpZ2h0OiBlLmdldEhlaWdodCgpCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgciA9IGEuZ2V0RGF0YSgpLAogICAgICAgICAgICAgICAgbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICAgICAgICBuLndpZHRoID0gaS53aWR0aCwgbi5oZWlnaHQgPSBpLmhlaWdodDsKICAgICAgICAgICAgdmFyIHMgPSBuLmdldENvbnRleHQoIjJkIiksCiAgICAgICAgICAgICAgICBkID0gYS5nZXQoIm1hc2tJbWFnZSIpOwogICAgICAgICAgICBpZiAoZCkgdHJ5IHsKICAgICAgICAgICAgICBzLmRyYXdJbWFnZShkLCAwLCAwLCBuLndpZHRoLCBuLmhlaWdodCksIGZ1bmN0aW9uICh0KSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBlID0gdC5nZXRDb250ZXh0KCIyZCIpLCBhID0gZS5nZXRJbWFnZURhdGEoMCwgMCwgdC53aWR0aCwgdC5oZWlnaHQpLCBvID0gZS5jcmVhdGVJbWFnZURhdGEoYSksIGkgPSAwLCByID0gMCwgbiA9IDA7IG4gPCBhLmRhdGEubGVuZ3RoOyBuICs9IDQpIHsKICAgICAgICAgICAgICAgICAgYS5kYXRhW24gKyAzXSA+IDEyOCAmJiAoaSArPSBsID0gYS5kYXRhW25dICsgYS5kYXRhW24gKyAxXSArIGEuZGF0YVtuICsgMl0sICsrcik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIHMgPSBpIC8gcjsKCiAgICAgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgYS5kYXRhLmxlbmd0aDsgbiArPSA0KSB7CiAgICAgICAgICAgICAgICAgIHZhciBsID0gYS5kYXRhW25dICsgYS5kYXRhW24gKyAxXSArIGEuZGF0YVtuICsgMl07CiAgICAgICAgICAgICAgICAgIGEuZGF0YVtuICsgM10gPCAxMjggfHwgbCA+IHMgPyAoby5kYXRhW25dID0gMCwgby5kYXRhW24gKyAxXSA9IDAsIG8uZGF0YVtuICsgMl0gPSAwLCBvLmRhdGFbbiArIDNdID0gMCkgOiAoby5kYXRhW25dID0gMjU1LCBvLmRhdGFbbiArIDFdID0gMjU1LCBvLmRhdGFbbiArIDJdID0gMjU1LCBvLmRhdGFbbiArIDNdID0gMjU1KTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlLnB1dEltYWdlRGF0YShvLCAwLCAwKTsKICAgICAgICAgICAgICB9KG4pOwogICAgICAgICAgICB9IGNhdGNoICh0KSB7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBtYXNrIGltYWdlIiksIGNvbnNvbGUuZXJyb3IodC50b1N0cmluZygpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgdSA9IGEuZ2V0KCJzaXplUmFuZ2UiKSwKICAgICAgICAgICAgICAgIGYgPSBhLmdldCgicm90YXRpb25SYW5nZSIpLAogICAgICAgICAgICAgICAgYyA9IHIuZ2V0RGF0YUV4dGVudCgidmFsdWUiKSwKICAgICAgICAgICAgICAgIGggPSBNYXRoLlBJIC8gMTgwLAogICAgICAgICAgICAgICAgbSA9IGEuZ2V0KCJncmlkU2l6ZSIpOwoKICAgICAgICAgICAgZnVuY3Rpb24gZyh0KSB7CiAgICAgICAgICAgICAgdmFyIGUgPSB0LmRldGFpbC5pdGVtOwogICAgICAgICAgICAgIHQuZGV0YWlsLmRyYXduICYmIGEubGF5b3V0SW5zdGFuY2Uub25kcmF3ICYmICh0LmRldGFpbC5kcmF3bi5neCArPSBpLnggLyBtLCB0LmRldGFpbC5kcmF3bi5neSArPSBpLnkgLyBtLCBhLmxheW91dEluc3RhbmNlLm9uZHJhdyhlWzBdLCBlWzFdLCBlWzJdLCB0LmRldGFpbC5kcmF3bikpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBsKG4sIHsKICAgICAgICAgICAgICBsaXN0OiByLm1hcEFycmF5KCJ2YWx1ZSIsIGZ1bmN0aW9uICh0LCBlKSB7CiAgICAgICAgICAgICAgICB2YXIgYSA9IHIuZ2V0SXRlbU1vZGVsKGUpOwogICAgICAgICAgICAgICAgcmV0dXJuIFtyLmdldE5hbWUoZSksIGEuZ2V0KCJ0ZXh0U3R5bGUuZm9udFNpemUiLCAhMCkgfHwgby5udW1iZXIubGluZWFyTWFwKHQsIGMsIHUpLCBlXTsKICAgICAgICAgICAgICB9KS5zb3J0KGZ1bmN0aW9uICh0LCBlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZVsxXSAtIHRbMV07CiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgZm9udEZhbWlseTogYS5nZXQoInRleHRTdHlsZS5mb250RmFtaWx5IikgfHwgYS5nZXQoImVtcGhhc2lzLnRleHRTdHlsZS5mb250RmFtaWx5IikgfHwgdC5nZXQoInRleHRTdHlsZS5mb250RmFtaWx5IiksCiAgICAgICAgICAgICAgZm9udFdlaWdodDogYS5nZXQoInRleHRTdHlsZS5mb250V2VpZ2h0IikgfHwgYS5nZXQoImVtcGhhc2lzLnRleHRTdHlsZS5mb250V2VpZ2h0IikgfHwgdC5nZXQoInRleHRTdHlsZS5mb250V2VpZ2h0IiksCiAgICAgICAgICAgICAgZ3JpZFNpemU6IG0sCiAgICAgICAgICAgICAgZWxsaXB0aWNpdHk6IGkuaGVpZ2h0IC8gaS53aWR0aCwKICAgICAgICAgICAgICBtaW5Sb3RhdGlvbjogZlswXSAqIGgsCiAgICAgICAgICAgICAgbWF4Um90YXRpb246IGZbMV0gKiBoLAogICAgICAgICAgICAgIGNsZWFyQ2FudmFzOiAhZCwKICAgICAgICAgICAgICByb3RhdGVSYXRpbzogMSwKICAgICAgICAgICAgICByb3RhdGlvblN0ZXA6IGEuZ2V0KCJyb3RhdGlvblN0ZXAiKSAqIGgsCiAgICAgICAgICAgICAgZHJhd091dE9mQm91bmQ6IGEuZ2V0KCJkcmF3T3V0T2ZCb3VuZCIpLAogICAgICAgICAgICAgIGxheW91dEFuaW1hdGlvbjogYS5nZXQoImxheW91dEFuaW1hdGlvbiIpLAogICAgICAgICAgICAgIHNodWZmbGU6ICExLAogICAgICAgICAgICAgIHNoYXBlOiBhLmdldCgic2hhcGUiKQogICAgICAgICAgICB9KSwgbi5hZGRFdmVudExpc3RlbmVyKCJ3b3JkY2xvdWRkcmF3biIsIGcpLCBhLmxheW91dEluc3RhbmNlICYmIGEubGF5b3V0SW5zdGFuY2UuZGlzcG9zZSgpLCBhLmxheW91dEluc3RhbmNlID0gewogICAgICAgICAgICAgIG9uZHJhdzogbnVsbCwKICAgICAgICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbiBkaXNwb3NlKCkgewogICAgICAgICAgICAgICAgbi5yZW1vdmVFdmVudExpc3RlbmVyKCJ3b3JkY2xvdWRkcmF3biIsIGcpLCBuLmFkZEV2ZW50TGlzdGVuZXIoIndvcmRjbG91ZGRyYXduIiwgZnVuY3Rpb24gKHQpIHsKICAgICAgICAgICAgICAgICAgdC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgfSk7CiAgICAgICAgfSksIG8ucmVnaXN0ZXJQcmVwcm9jZXNzb3IoZnVuY3Rpb24gKHQpIHsKICAgICAgICAgIHZhciBlID0gKHQgfHwge30pLnNlcmllczsKICAgICAgICAgICFvLnV0aWwuaXNBcnJheShlKSAmJiAoZSA9IGUgPyBbZV0gOiBbXSk7CiAgICAgICAgICB2YXIgYSA9IFsic2hhZG93Q29sb3IiLCAic2hhZG93Qmx1ciIsICJzaGFkb3dPZmZzZXRYIiwgInNoYWRvd09mZnNldFkiXTsKCiAgICAgICAgICBmdW5jdGlvbiBpKHQpIHsKICAgICAgICAgICAgdCAmJiBvLnV0aWwuZWFjaChhLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgIHQuaGFzT3duUHJvcGVydHkoZSkgJiYgKHRbInRleHQiICsgby5mb3JtYXQuY2FwaXRhbEZpcnN0KGUpXSA9IHRbZV0pOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KCiAgICAgICAgICBvLnV0aWwuZWFjaChlLCBmdW5jdGlvbiAodCkgewogICAgICAgICAgICBpZiAodCAmJiAid29yZENsb3VkIiA9PT0gdC50eXBlKSB7CiAgICAgICAgICAgICAgdmFyIGUgPSB0LnRleHRTdHlsZSB8fCB7fTsKICAgICAgICAgICAgICBpKGUubm9ybWFsKSwgaShlLmVtcGhhc2lzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIDgzOiBmdW5jdGlvbiBfKGUpIHsKICAgICAgICBlLmV4cG9ydHMgPSB0OwogICAgICB9CiAgICB9LAogICAgICAgIGEgPSB7fTsKCiAgICBmdW5jdGlvbiBvKHQpIHsKICAgICAgaWYgKGFbdF0pIHJldHVybiBhW3RdLmV4cG9ydHM7CiAgICAgIHZhciBpID0gYVt0XSA9IHsKICAgICAgICBleHBvcnRzOiB7fQogICAgICB9OwogICAgICByZXR1cm4gZVt0XShpLCBpLmV4cG9ydHMsIG8pLCBpLmV4cG9ydHM7CiAgICB9CgogICAgcmV0dXJuIG8uciA9IGZ1bmN0aW9uICh0KSB7CiAgICAgICJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgU3ltYm9sLnRvU3RyaW5nVGFnICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCBTeW1ib2wudG9TdHJpbmdUYWcsIHsKICAgICAgICB2YWx1ZTogIk1vZHVsZSIKICAgICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCAiX19lc01vZHVsZSIsIHsKICAgICAgICB2YWx1ZTogITAKICAgICAgfSk7CiAgICB9LCBvKDYzOCk7CiAgfSgpOwp9KTs="},null]}