(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/util/string_util.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, 'e783aY1FgZLkIb8Lnntomdo', 'string_util'); // Scripts/util/string_util.js "use strict"; /*-----------------------------------------------------+ * 字符串相关处理 * @author whjing2012@163.com +-----------------------------------------------------*/ //
xxx#1xxx
window.StringUtil = { regex: /(<.*?>|#\d*|[^<>#]+)/ig, parse: function parse(str, handler) { // handler = handler || 'handler'; return str; var arr = str.match(this.regex); str = ""; var end_tags = []; for (var i = 0, n = arr.length; i < n; i++) { var s = arr[i]; //Log.info("====>", s, s.charAt(0)); if (s == "") { if (end_tags.length > 0) { str += end_tags.pop(); } } else if (s.length > 1 && s.charAt(0) == "#") { var face = s.substr(1); str += ""; } else if (s.length > 4 && s.charAt(0) == '<') { var s1 = s.substr(1, 3); var s_end = s.substr(s.length - 2, 2); var end_tag = ""; if (s1 == "ass") { var a = s.match(/"; } } else if (s1 == "img") { var a = s.match(/\w+=[^\s>]+/ig); if (!a) continue; for (var j = 0, m = a.length; j < m; j++) { var s2 = a[j].split("="); if (s2.length < 2) continue; if (s2[0] == "src") { str += ""; } } } else { var a = s.match(/\w+=[^\s>]+/ig); if (!a) continue; for (var j = 0, m = a.length; j < m; j++) { var s2 = a[j].split("="); if (s2.length < 2) continue; var s3 = s2[1].replace(/^['"]|['"]$/ig, ''); if (s2[0] == "fontcolor" || s2[0] == "fontColor") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "fontsize") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "click") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "href") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "outline") { var s4 = s2[1].split(","); if (s4.length < 2) continue; var color = "#fffff"; var width = 1; if (s4[0].length > 3) { color = s4[0]; width = s4[1]; } else { color = s4[1]; width = s4[0]; } str += ""; end_tag = "" + end_tag; } } } if (s_end == "/>") { str += end_tag; } else { end_tags.push(end_tag); } } else { str += s; } } return str; }, //处理字符串,返回处理后的string,和资源数组resArr, parseStr: function parseStr(str, handler) { var arr = str.match(/(<.*?>|#\d*|[^<>#]+)/ig); str = ""; var end_tags = []; var arr_1 = []; for (var i = 0, n = arr.length; i < n; i++) { var s = arr[i]; if (s == "") { if (end_tags.length > 0) { str += end_tags.pop(); } } else if (s.length > 1 && s.charAt(0) == "#") { var face = s.substr(1); str += ""; } else if (s.length > 4 && s.charAt(0) == '<') { var s1 = s.substr(1, 3); var s_end = s.substr(s.length - 2, 2); var end_tag = ""; if (s1 == "ass") { var a = s.match(/"; arr_1.push(a[1]); } } else if (s1 == "img") { var a = s.match(/\w+=[^\s>]+/ig); if (!a) continue; for (var j = 0, m = a.length; j < m; j++) { var s2 = a[j].split("="); if (s2.length < 2) continue; if (s2[0] == "src") { str += ""; arr_1.push(s2[1]); } } } else { var a = s.match(/\w+=[^\s>]+/ig); if (!a) continue; for (var j = 0, m = a.length; j < m; j++) { var s2 = a[j].split("="); if (s2.length < 2) continue; var s3 = s2[1].replace(/^['"]|['"]$/ig, ''); if (s2[0] == "fontcolor" || s2[0] == "fontColor") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "fontsize") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "click") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "href") { str += ""; end_tag = "" + end_tag; } else if (s2[0] == "outline") { var s4 = s2[1].split(","); if (s4.length < 2) continue; var color = "#fffff"; var width = 1; if (s4[0].length > 3) { color = s4[0]; width = s4[1]; } else { color = s4[1]; width = s4[0]; } str += ""; end_tag = "" + end_tag; } } } if (s_end == "/>") { str += end_tag; } else { end_tags.push(end_tag); } } else { str += s; } } return { string: str, resArr: arr_1 }; }, // 给文本设置字符串 先做解析处理 richtextSetString: function richtextSetString(richtext, str, handler) { richtext.string = this.parse(str); this.richtextClick(richtext, handler); }, richtextClick: function richtextClick(richtext, handler) { handler = handler || 'handler'; for (var i = 0; i < richtext._labelSegments.length; ++i) { var labelSegment = richtext._labelSegments[i]; if (labelSegment._clickHandler) { labelSegment._clickParam = labelSegment._clickParam || labelSegment._clickHandler; labelSegment._clickHandler = handler; } } }, //拆分成字符 splitStr: function splitStr(str) { var list = {}; }, util_num_chn: ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"], util_num_std: ["零", "十", "百", "千", "万", "亿"], //数字转换成小写中文 numToChinese: function numToChinese(value) { return value; // value = Number(value) || 0; // value_str = String(value); // var array = value_str.split(""); // var length = array.length; // var flag = false; // var str = ""; // var len = 0; // if(length > 13){ // print("只支持13位数字") // return // } // for(var k in array){ // var v = array[k]; // if(v.charAt == "0" && length > 1){ // flag = true; // }else{ // } // } } }; module.exports = StringUtil; cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcdXRpbFxcc3RyaW5nX3V0aWwuanMiXSwibmFtZXMiOlsid2luZG93IiwiU3RyaW5nVXRpbCIsInJlZ2V4IiwicGFyc2UiLCJzdHIiLCJoYW5kbGVyIiwiYXJyIiwibWF0Y2giLCJlbmRfdGFncyIsImkiLCJuIiwibGVuZ3RoIiwicyIsInBvcCIsImNoYXJBdCIsImZhY2UiLCJzdWJzdHIiLCJzMSIsInNfZW5kIiwiZW5kX3RhZyIsImEiLCJqIiwibSIsInMyIiwic3BsaXQiLCJyZXBsYWNlIiwiczMiLCJzNCIsImNvbG9yIiwid2lkdGgiLCJwdXNoIiwicGFyc2VTdHIiLCJhcnJfMSIsInN0cmluZyIsInJlc0FyciIsInJpY2h0ZXh0U2V0U3RyaW5nIiwicmljaHRleHQiLCJyaWNodGV4dENsaWNrIiwiX2xhYmVsU2VnbWVudHMiLCJsYWJlbFNlZ21lbnQiLCJfY2xpY2tIYW5kbGVyIiwiX2NsaWNrUGFyYW0iLCJzcGxpdFN0ciIsImxpc3QiLCJ1dGlsX251bV9jaG4iLCJ1dGlsX251bV9zdGQiLCJudW1Ub0NoaW5lc2UiLCJ2YWx1ZSIsIm1vZHVsZSIsImV4cG9ydHMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFLQTtBQUVBQSxNQUFNLENBQUNDLFVBQVAsR0FBb0I7QUFFaEJDLEVBQUFBLEtBQUssRUFBRSx3QkFGUztBQUloQkMsRUFBQUEsS0FBSyxFQUFFLGVBQVVDLEdBQVYsRUFBZUMsT0FBZixFQUF3QjtBQUMzQjtBQUNBLFdBQU9ELEdBQVA7QUFDQSxRQUFJRSxHQUFHLEdBQUdGLEdBQUcsQ0FBQ0csS0FBSixDQUFVLEtBQUtMLEtBQWYsQ0FBVjtBQUNBRSxJQUFBQSxHQUFHLEdBQUcsRUFBTjtBQUNBLFFBQUlJLFFBQVEsR0FBRyxFQUFmOztBQUNBLFNBQUssSUFBSUMsQ0FBQyxHQUFHLENBQVIsRUFBV0MsQ0FBQyxHQUFHSixHQUFHLENBQUNLLE1BQXhCLEVBQWdDRixDQUFDLEdBQUdD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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDSDtBQTFOZSxDQUFwQjtBQThOQUMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCaEQsVUFBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiDlrZfnrKbkuLLnm7jlhbPlpITnkIZcbiAqIEBhdXRob3Igd2hqaW5nMjAxMkAxNjMuY29tXG4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLy8gIDxkaXY+PGRpdiBmb250Y29sb3I9I3h4eHh4eCBjbGljaz0xfHh4IGhyZWY9Mnx4eD54eHgjMXh4eDxpbWcgc3JjPScnIC8+PC9kaXY+PGFzc2V0cz0xLz48L2Rpdj5cblxud2luZG93LlN0cmluZ1V0aWwgPSB7XG5cbiAgICByZWdleDogLyg8Lio/PnwjXFxkKnxbXjw+I10rKS9pZyxcblxuICAgIHBhcnNlOiBmdW5jdGlvbiAoc3RyLCBoYW5kbGVyKSB7XG4gICAgICAgIC8vIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICdoYW5kbGVyJztcbiAgICAgICAgcmV0dXJuIHN0clxuICAgICAgICB2YXIgYXJyID0gc3RyLm1hdGNoKHRoaXMucmVnZXgpO1xuICAgICAgICBzdHIgPSBcIlwiO1xuICAgICAgICB2YXIgZW5kX3RhZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSBhcnIubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcyA9IGFycltpXTtcbiAgICAgICAgICAgIC8vTG9nLmluZm8oXCI9PT09PlwiLCBzLCBzLmNoYXJBdCgwKSk7XG4gICAgICAgICAgICBpZiAocyA9PSBcIjwvZGl2PlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVuZF90YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IGVuZF90YWdzLnBvcCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAocy5sZW5ndGggPiAxICYmIHMuY2hhckF0KDApID09IFwiI1wiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhY2UgPSBzLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCI8aW1nIHNyYz0nXCIgKyBmYWNlICsgXCInIC8+XCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMubGVuZ3RoID4gNCAmJiBzLmNoYXJBdCgwKSA9PSAnPCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgczEgPSBzLnN1YnN0cigxLCAzKTtcbiAgICAgICAgICAgICAgICB2YXIgc19lbmQgPSBzLnN1YnN0cihzLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgICAgICAgIHZhciBlbmRfdGFnID0gXCJcIjtcbiAgICAgICAgICAgICAgICBpZiAoczEgPT0gXCJhc3NcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goLzxhc3NldHM9KFxcZCspL2kpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYSAmJiBhLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8aW1nIHNyYz0nXCIgKyBhWzFdICsgXCInIC8+XCJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczEgPT0gXCJpbWdcIikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goL1xcdys9W15cXHM+XSsvaWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9IGEubGVuZ3RoOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBhW2pdLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMi5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMlswXSA9PSBcInNyY1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPGltZyBzcmM9J1wiICsgczJbMV0ucmVwbGFjZSgvXlsnXCJdfFsnXCJdJC9pZywgJycpICsgXCInIC8+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goL1xcdys9W15cXHM+XSsvaWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9IGEubGVuZ3RoOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBhW2pdLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMi5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzMyA9IHMyWzFdLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvaWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMlswXSA9PSBcImZvbnRjb2xvclwiIHx8IHMyWzBdID09IFwiZm9udENvbG9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8Y29sb3I9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L2NvbG9yPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJmb250c2l6ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPHNpemU9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L3NpemU+XCIgKyBlbmRfdGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzMlswXSA9PSBcImNsaWNrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJocmVmXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8dT48b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPjwvdT5cIiArIGVuZF90YWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMyWzBdID09IFwib3V0bGluZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHM0ID0gczJbMV0uc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNC5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBcIiNmZmZmZlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoczRbMF0ubGVuZ3RoID4gMyl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gczRbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gczRbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBzNFsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzNFswXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8b3V0bGluZSBjb2xvcj1cIiArIGNvbG9yICsgXCIgd2lkdGg9XCIgKyB3aWR0aCArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L291dGxpbmU+XCIgKyBlbmRfdGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzX2VuZCA9PSBcIi8+XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyICs9IGVuZF90YWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZW5kX3RhZ3MucHVzaChlbmRfdGFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0ciArPSBzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfSxcblxuICAgIC8v5aSE55CG5a2X56ym5Liy77yM6L+U5Zue5aSE55CG5ZCO55qEc3RyaW5n77yM5ZKM6LWE5rqQ5pWw57uEcmVzQXJy77yMXG4gICAgcGFyc2VTdHI6IGZ1bmN0aW9uIChzdHIsIGhhbmRsZXIpIHtcbiAgICAgICAgdmFyIGFyciA9IHN0ci5tYXRjaCgvKDwuKj8+fCNcXGQqfFtePD4jXSspL2lnKTtcbiAgICAgICAgc3RyID0gXCJcIjtcbiAgICAgICAgdmFyIGVuZF90YWdzID0gW107XG4gICAgICAgIHZhciBhcnJfMSA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbiA9IGFyci5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBzID0gYXJyW2ldO1xuICAgICAgICAgICAgaWYgKHMgPT0gXCI8L2Rpdj5cIikge1xuICAgICAgICAgICAgICAgIGlmIChlbmRfdGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBlbmRfdGFncy5wb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHMubGVuZ3RoID4gMSAmJiBzLmNoYXJBdCgwKSA9PSBcIiNcIikge1xuICAgICAgICAgICAgICAgIHZhciBmYWNlID0gcy5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgc3RyICs9IFwiPGltZyBzcmM9J1wiICsgZmFjZSArIFwiJyAvPlwiO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzLmxlbmd0aCA+IDQgJiYgcy5jaGFyQXQoMCkgPT0gJzwnKSB7XG4gICAgICAgICAgICAgICAgdmFyIHMxID0gcy5zdWJzdHIoMSwgMyk7XG4gICAgICAgICAgICAgICAgdmFyIHNfZW5kID0gcy5zdWJzdHIocy5sZW5ndGggLSAyLCAyKTtcbiAgICAgICAgICAgICAgICB2YXIgZW5kX3RhZyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgaWYgKHMxID09IFwiYXNzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBzLm1hdGNoKC88YXNzZXRzPShcXGQrKS9pKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEgJiYgYS5sZW5ndGggPT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPGltZyBzcmM9J1wiICsgYVsxXSArIFwiJyAvPlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJfMS5wdXNoKGFbMV0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMxID09IFwiaW1nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGEgPSBzLm1hdGNoKC9cXHcrPVteXFxzPl0rL2lnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFhKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIG0gPSBhLmxlbmd0aDsgaiA8IG07IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMyID0gYVtqXS5zcGxpdChcIj1cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczIubGVuZ3RoIDwgMikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoczJbMF0gPT0gXCJzcmNcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciArPSBcIjxpbWcgc3JjPSdcIiArIHMyWzFdLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvaWcsICcnKSArIFwiJyAvPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycl8xLnB1c2goczJbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYSA9IHMubWF0Y2goL1xcdys9W15cXHM+XSsvaWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWEpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgbSA9IGEubGVuZ3RoOyBqIDwgbTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgczIgPSBhW2pdLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMi5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzMyA9IHMyWzFdLnJlcGxhY2UoL15bJ1wiXXxbJ1wiXSQvaWcsICcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMlswXSA9PSBcImZvbnRjb2xvclwiIHx8IHMyWzBdID09IFwiZm9udENvbG9yXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8Y29sb3I9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L2NvbG9yPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJmb250c2l6ZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPHNpemU9XCIgKyBzMyArIFwiID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L3NpemU+XCIgKyBlbmRfdGFnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzMlswXSA9PSBcImNsaWNrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoczJbMF0gPT0gXCJocmVmXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgKz0gXCI8dT48b24gY2xpY2s9J1wiICsgKGhhbmRsZXIgfHwgczMpICsgXCInIHBhcmFtPSdcIiArIHMzICsgXCInID5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRfdGFnID0gXCI8L29uPjwvdT5cIiArIGVuZF90YWc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMyWzBdID09IFwib3V0bGluZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHM0ID0gczJbMV0uc3BsaXQoXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzNC5sZW5ndGggPCAyKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sb3IgPSBcIiNmZmZmZlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB3aWR0aCA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHM0WzBdLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgPSBzNFswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBzNFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gczRbMV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoID0gczRbMF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyICs9IFwiPG91dGxpbmUgY29sb3I9XCIgKyBjb2xvciArIFwiIHdpZHRoPVwiICsgd2lkdGggKyBcIiA+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kX3RhZyA9IFwiPC9vdXRsaW5lPlwiICsgZW5kX3RhZztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc19lbmQgPT0gXCIvPlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSBlbmRfdGFnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZF90YWdzLnB1c2goZW5kX3RhZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHIgKz0gcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge3N0cmluZzpzdHIscmVzQXJyOmFycl8xfVxuICAgIH0sXG5cbiAgICAvLyDnu5nmlofmnKzorr7nva7lrZfnrKbkuLIg5YWI5YGa6Kej5p6Q5aSE55CGXG4gICAgcmljaHRleHRTZXRTdHJpbmc6IGZ1bmN0aW9uIChyaWNodGV4dCwgc3RyLCBoYW5kbGVyKSB7XG4gICAgICAgIHJpY2h0ZXh0LnN0cmluZyA9IHRoaXMucGFyc2Uoc3RyKTtcbiAgICAgICAgdGhpcy5yaWNodGV4dENsaWNrKHJpY2h0ZXh0LCBoYW5kbGVyKTtcbiAgICB9LFxuXG4gICAgcmljaHRleHRDbGljazogZnVuY3Rpb24gKHJpY2h0ZXh0LCBoYW5kbGVyKSB7XG4gICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyIHx8ICdoYW5kbGVyJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByaWNodGV4dC5fbGFiZWxTZWdtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgbGV0IGxhYmVsU2VnbWVudCA9IHJpY2h0ZXh0Ll9sYWJlbFNlZ21lbnRzW2ldO1xuICAgICAgICAgICAgaWYgKGxhYmVsU2VnbWVudC5fY2xpY2tIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgbGFiZWxTZWdtZW50Ll9jbGlja1BhcmFtID0gbGFiZWxTZWdtZW50Ll9jbGlja1BhcmFtIHx8IGxhYmVsU2VnbWVudC5fY2xpY2tIYW5kbGVyO1xuICAgICAgICAgICAgICAgIGxhYmVsU2VnbWVudC5fY2xpY2tIYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvL+aLhuWIhuaIkOWtl+esplxuICAgIHNwbGl0U3RyOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgIHZhciBsaXN0ID0ge307XG4gICAgfSxcblxuICAgIHV0aWxfbnVtX2NobjogW1wi6Zu2XCIsIFwi5LiAXCIsIFwi5LqMXCIsIFwi5LiJXCIsIFwi5ZubXCIsIFwi5LqUXCIsIFwi5YWtXCIsIFwi5LiDXCIsIFwi5YWrXCIsIFwi5LmdXCIsIFwi5Y2BXCJdLFxuICAgIHV0aWxfbnVtX3N0ZDogW1wi6Zu2XCIsIFwi5Y2BXCIsIFwi55m+XCIsIFwi5Y2DXCIsIFwi5LiHXCIsIFwi5Lq/XCJdLFxuXG4gICAgLy/mlbDlrZfovazmjaLmiJDlsI/lhpnkuK3mlodcbiAgICBudW1Ub0NoaW5lc2U6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgLy8gdmFsdWUgPSBOdW1iZXIodmFsdWUpIHx8IDA7XG4gICAgICAgIC8vIHZhbHVlX3N0ciA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIC8vIHZhciBhcnJheSA9IHZhbHVlX3N0ci5zcGxpdChcIlwiKTtcbiAgICAgICAgLy8gdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgICAgICAgLy8gdmFyIGZsYWcgPSBmYWxzZTtcbiAgICAgICAgLy8gdmFyIHN0ciA9IFwiXCI7XG4gICAgICAgIC8vIHZhciBsZW4gPSAwO1xuICAgICAgICAvLyBpZihsZW5ndGggPiAxMyl7XG4gICAgICAgIC8vICAgICBwcmludChcIuWPquaUr+aMgTEz5L2N5pWw5a2XXCIpXG4gICAgICAgIC8vICAgICByZXR1cm5cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBmb3IodmFyIGsgaW4gYXJyYXkpe1xuICAgICAgICAvLyAgICAgdmFyIHYgPSBhcnJheVtrXTtcbiAgICAgICAgLy8gICAgIGlmKHYuY2hhckF0ID09IFwiMFwiICYmIGxlbmd0aCA+IDEpe1xuICAgICAgICAvLyAgICAgICAgIGZsYWcgPSB0cnVlO1xuICAgICAgICAvLyAgICAgfWVsc2V7XG5cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgIH1cblxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdHJpbmdVdGlsOyJdfQ==