{"version":3,"sources":["finance.js"],"sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 11);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = {\r\n tabsMoveChange: function (element) {\r\n var $this = $(element);\r\n var setTime = null;\r\n $this.each(function (i) {\r\n var $this = $(this);\r\n var tabsList = $('.tabs_list', $this);\r\n var tabsMoreItem = $('.tabs_more>a', $this);\r\n var tabsPannel = $('.tabs_item', $this);\r\n\r\n tabsList.on('mouseover', 'li', function () {\r\n var that = this;\r\n \r\n setTime = setTimeout(function () {\r\n var index = $(that).index();\r\n var href = $(that).find('a').attr('href');\r\n $(that).addClass('active').siblings().removeClass('active');\r\n if(tabsMoreItem.length > 1){\r\n tabsMoreItem.eq(index).show().siblings().hide();\r\n }else if(tabsMoreItem.length === 1 && href){\r\n tabsMoreItem.eq(0).attr('href',href)\r\n }\r\n tabsPannel.eq(index).fadeIn().addClass('active').siblings().hide().removeClass('active');\r\n }, 200)\r\n\r\n })\r\n tabsList.on('mouseout', 'li', function () {\r\n window.clearTimeout(setTime);\r\n })\r\n })\r\n },\r\n subTabsMove: function (element) {\r\n var $this = $(element);\r\n var setTime = null;\r\n $this.each(function () {\r\n var $this = $(this);\r\n var subTabsList = $('.sub_tabs_header', $this);\r\n var subTabsItem = $('.sub_tabs_item', $this);\r\n\r\n subTabsList.on('mouseover', 'li', function () {\r\n var slef = this;\r\n setTime = setTimeout(function () {\r\n var index = $(slef).index();\r\n $(slef).addClass('active').siblings().removeClass('active');\r\n subTabsItem.eq(index).fadeIn().addClass('active').siblings().hide().removeClass('active');\r\n }, 200)\r\n })\r\n\r\n subTabsList.on('mouseout', 'li', function () {\r\n window.clearTimeout(setTime);\r\n })\r\n })\r\n },\r\n tabsMouseTable:function(eleId,that,callback){\r\n $('#'+ eleId).on('mouseover','.tabs_list li',function(){\r\n if($(this).hasClass(\"active\")){\r\n return\r\n }\r\n var _self =this;\r\n that.setTime = setTimeout(function(){\r\n var id = $(_self).data('id');\r\n var href = $(_self).children(\"a\").attr(\"href\") || \"\";\r\n if(id){\r\n id = id.split('#');\r\n that.fid = id[0];\r\n that.po = id[1] || 0;\r\n that.beforeLoad();\r\n if(that.refresh){\r\n $(_self).addClass('active').siblings().removeClass('active');\r\n callback && callback(href);\r\n that.refresh();\r\n }\r\n }\r\n },200)\r\n })\r\n \r\n $('#'+ id).on('mouseout', '.tabs_list li', function () {\r\n if(that.setTime){\r\n window.clearTimeout(that.setTime);\r\n }\r\n })\r\n },\r\n /**\r\n * 替换id\r\n */\r\n replaceId: function (str, id) {\r\n try {\r\n return str.replace('{{#id#}}', id);\r\n } catch (error) {\r\n return str;\r\n }\r\n\r\n },\r\n getData: function (url, success, fail) {\r\n $.ajax({\r\n type: \"GET\",\r\n url: url,\r\n dataType: \"jsonp\",\r\n // timeout : 1500,\r\n jsonp: 'cb',\r\n success: function (json) {\r\n try {\r\n if (json && json.data && json.data.diff) {\r\n success(json.data.diff)\r\n } else {\r\n fail && fail()\r\n return false;\r\n }\r\n } catch (error) {\r\n fail && fail()\r\n return false;\r\n }\r\n },\r\n error: function (err) {\r\n fail && fail();\r\n return false;\r\n }\r\n })\r\n },\r\n getOldData: function (url, suc, fail) {\r\n $.ajax({\r\n type: \"GET\",\r\n url: url,\r\n dataType: \"jsonp\",\r\n // timeout : 1500,\r\n jsonp: 'cb',\r\n success: function (json) {\r\n try {\r\n if (!!json && json.length >= 1) {\r\n suc(json)\r\n } else {\r\n fail && fail();\r\n return false;\r\n }\r\n } catch (error) {\r\n fail && fail();\r\n return false;\r\n }\r\n },\r\n error: function (err) {\r\n fail && fail();\r\n return false;\r\n }\r\n })\r\n },\r\n /*\r\n *判断值是否非空\r\n */\r\n getTextValOrEmpty: function (value) {\r\n if (value != '' && value != undefined && value != null) {\r\n return value\r\n } else {\r\n return '-'\r\n }\r\n },\r\n /**\r\n * @param {data}字符串 \r\n * @param {num}保留小数点几位\r\n * @param {fix}单位\r\n * @param {divide} 除以多少,eg:10000 ,如果没有则自动填充\r\n */\r\n getColorByDate: function (data, num, fix, divide) {\r\n try {\r\n if (data === '' || data === undefined || data === null || data === '-' || isNaN(data)) {\r\n return '-'\r\n }\r\n data = parseFloat(data);\r\n var retult = '';\r\n\r\n if (!divide) {\r\n retult = this.FixAmt(data, num, fix);\r\n } else {\r\n num = !!parseFloat(num) ? parseFloat(num) : 2;\r\n retult = (data / parseInt(divide)).toFixed(num) + fix;\r\n }\r\n\r\n var color = '';\r\n color = !!data ? (data == 0 ? '' : data > 0 ? 'red' : 'green') : '';\r\n retult = '' + retult + ''\r\n\r\n return retult;\r\n } catch (err) {\r\n return '-'\r\n }\r\n },\r\n /*\r\n *单位自动换算\r\n */\r\n FixAmt: function (str, num, fix, ride) {\r\n try {\r\n if (str === '' || str === undefined || str === null || str === '-' || isNaN(str)) {\r\n return '-';\r\n }\r\n var result;\r\n fix = !!fix ? fix : '';\r\n num = isNaN(parseFloat(num)) ? 2 : parseFloat(num);\r\n ride = !!ride ? ride : 1;\r\n str = parseFloat(str) * parseInt(ride);\r\n var intStr = Math.abs(parseInt(str));\r\n if (intStr.toString().length > 12) {\r\n result = (parseFloat(str) / 1000000000000).toFixed(num) + '万亿' + fix;\r\n } else if (intStr.toString().length > 8) {\r\n result = (parseFloat(str) / 100000000).toFixed(num) + '亿' + fix;\r\n } else if (intStr.toString().length > 4) {\r\n result = (parseFloat(str) / 10000).toFixed(num) + '万' + fix;\r\n } else {\r\n if(parseFloat(str) === parseInt(str)){\r\n result = parseFloat(str) + fix;\r\n }else{\r\n result = parseFloat(str).toFixed(num) + fix;\r\n }\r\n }\r\n // console.log(result)\r\n return result;\r\n } catch (err) {\r\n return '-'\r\n }\r\n },\r\n /*\r\n *单位不自动换算(主要用于价格Price)\r\n */\r\n FixAmtPrice: function (str, num, fix, ride) {\r\n try {\r\n if (str === '' || str === undefined || str === null || str === '-' || isNaN(str)) {\r\n return '-';\r\n }\r\n var result;\r\n fix = !!fix ? fix : '';\r\n num = isNaN(parseFloat(num)) ? 2 : parseFloat(num);\r\n ride = !!ride ? ride : 1;\r\n str = parseFloat(str) * parseInt(ride);\r\n \r\n result = parseFloat(str).toFixed(num) + fix;\r\n \r\n return result;\r\n } catch (err) {\r\n return '-'\r\n }\r\n },\r\n /*\r\n *换算成百分比\r\n */\r\n toPercent: function (data, num) {\r\n if (data === '' || data === undefined || data === null || data === '-' || isNaN(data)) {\r\n return '-';\r\n }\r\n num = isNaN(parseInt(num)) ? 2 : parseInt(num);\r\n return !isNaN(parseFloat(data)) ? parseFloat(data).toFixed(num) + '%' : '-';\r\n },\r\n toFixed: function (data, num) {\r\n if (data === '' || data === undefined || data === null || data === '-' || isNaN(data)) {\r\n return '-';\r\n }\r\n num = isNaN(parseInt(num)) ? 2 : parseInt(num);\r\n return parseFloat(data).toFixed(num);\r\n },\r\n getColor: function (data) {\r\n data = parseFloat(data);\r\n return !!data ? (data == 0 ? '' : data > 0 ? 'red' : 'green') : '';\r\n },\r\n quoteLink: function (code, market) {\r\n return 'http://quote.eastmoney.com/unify/r/' + market + '.' + code + '/';\r\n },\r\n CloneObj: function (common, obj) {\r\n var newObj = $.extend(true, {}, common);\r\n for (var key in obj) {\r\n newObj[key] = obj[key]\r\n }\r\n return newObj;\r\n },\r\n isArray:function(o){\r\n return Object.prototype.toString.call(o) === '[object Array]';\r\n }\r\n}\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nmodule.exports = function (option) {\r\n if (!option.id) return;\r\n var defaultOption = {\r\n tabList: \".tabs_list\",\r\n tabListTarget: \"li\",\r\n tabsMore: '.tabs_more',\r\n tabsMoreTarget: 'a',\r\n tabsItem: \".tabs_item\",\r\n activeClass: \"active\",\r\n touches: \"mouse\",\r\n delayTime: 200,\r\n callback: function () {}\r\n }\r\n option = $.extend(true, defaultOption, option)\r\n var $this = $(option.id);\r\n var tabsList = $(option.tabList, $this);\r\n var tabsMoreItem = $(option.tabsMore, $this).find(option.tabsMoreTarget);\r\n var tabsPannel = $(option.tabsItem, $this);\r\n\r\n if (option.touches === \"click\") {\r\n tabsList.on(\"click\", option.tabListTarget, function () {\r\n if ($(this).hasClass(option.activeClass)) return;\r\n var index = $(this).index();\r\n var href = $(this).find('a').attr('href');\r\n $(this).addClass(option.activeClass).siblings().removeClass(option.activeClass);\r\n if (tabsMoreItem.length > 1) {\r\n tabsMoreItem.eq(index).show().siblings().hide();\r\n } else if (tabsMoreItem.length === 1 && href) {\r\n tabsMoreItem.eq(0).attr('href', href)\r\n }\r\n tabsPannel.eq(index).fadeIn().addClass(option.activeClass).siblings().hide().removeClass(option.activeClass);\r\n option.callback(index);\r\n })\r\n } else if (option.touches === \"mouse\") {\r\n var setTime;\r\n tabsList.on('mouseover', option.tabListTarget, function () {\r\n if ($(this).hasClass(option.activeClass)) return;\r\n var that = this;\r\n setTime = setTimeout(function () {\r\n var index = $(that).index();\r\n var href = $(that).find('a').attr('href');\r\n $(that).addClass(option.activeClass).siblings().removeClass(option.activeClass);\r\n if (tabsMoreItem.length > 1) {\r\n tabsMoreItem.eq(index).show().siblings().hide();\r\n } else if (tabsMoreItem.length === 1 && href) {\r\n tabsMoreItem.eq(0).attr('href', href)\r\n }\r\n tabsPannel.eq(index).fadeIn().addClass(option.activeClass).siblings().hide().removeClass(option.activeClass);\r\n option.callback(index);\r\n }, option.delayTime)\r\n\r\n })\r\n tabsList.on('mouseout', 'li', function () {\r\n window.clearTimeout(setTime);\r\n })\r\n }\r\n}\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n/**\r\n * 快讯\r\n */\r\n\r\nvar $ = jQuery;\r\n\r\nvar kuaixun = (function () {\r\n\r\n function kuaixun(options) {\r\n var defaultoptions = {\r\n refreshbtn : null, //刷新按钮\r\n fontsizebtn : null, //字号按钮\r\n autobtn : null, //自刷按钮\r\n autosec : null, //自刷时间\r\n kxlist : null, //内容容器\r\n kxloading : null, //loading\r\n refreshtime : 60, //刷新时间\r\n kxtype: '102', //快讯类型\r\n kxlink: 'http://kuaixun.eastmoney.com/' //快讯链接\r\n }\r\n this.options = $.extend(defaultoptions, options);\r\n this.cdci = null; //自动刷新\r\n this.isautocd = true; //是否自动刷新\r\n this.iskxshow = true; //快讯是否在展示中\r\n this.fontsize = 12; //当前字号\r\n }\r\n\r\n /**\r\n * 初始化\r\n * @return {[type]} [description]\r\n */\r\n kuaixun.prototype.init = function () {\r\n this.options.autosec.text(this.options.refreshtime);\r\n this.bind();\r\n this.refresh();\r\n this.refreshcd();\r\n };\r\n\r\n /**\r\n * 绑定事件\r\n * @return {[type]} [description]\r\n */\r\n kuaixun.prototype.bind = function (){\r\n var _this = this;\r\n //刷新按钮\r\n this.options.refreshbtn.on('click', function(){\r\n _this.refresh();\r\n return false;\r\n });\r\n //自动刷新按钮\r\n this.options.autobtn.on('click',function () {\r\n var thisbtn = $(this);\r\n if (thisbtn.is('.kx_autoing')) { //暂停\r\n thisbtn.removeClass('kx_autoing');\r\n _this.isautocd = false;\r\n clearInterval(_this.cdci);\r\n _this.options.autosec.text(_this.options.refreshtime);\r\n } else { //开启\r\n thisbtn.addClass('kx_autoing');\r\n _this.isautocd = true;\r\n _this.refreshcd();\r\n }\r\n });\r\n \r\n if( this.options.fontsizebtn ){\r\n this.options.fontsizebtn.on('click', function () { //调整字号\r\n var thisbtn = $(this);\r\n if (_this.fontsize == 12) {\r\n _this.fontsize = 14;\r\n thisbtn.text('小字-');\r\n } else {\r\n _this.fontsize = 12;\r\n thisbtn.text('大字+');\r\n }\r\n _this.options.kxlist.css('font-size', _this.fontsize + 'px');\r\n }); \r\n }\r\n }\r\n\r\n /**\r\n * 刷新倒计时\r\n * @return {[type]} [description]\r\n */\r\n kuaixun.prototype.refreshcd = function (){\r\n var _this = this;\r\n clearInterval(this.cdci);\r\n this.cdci = null;\r\n this.options.autosec.text(this.options.refreshtime);\r\n if (this.isautocd && this.iskxshow) {\r\n this.cdci = setInterval(function () {\r\n var oldTime = _this.options.autosec.text();\r\n if (oldTime == 1) {\r\n _this.refresh();\r\n } else {\r\n _this.options.autosec.text(oldTime - 1);\r\n }\r\n }, 1000);\r\n }\r\n }\r\n \r\n /**\r\n * 停止倒计时\r\n */\r\n kuaixun.prototype.stopRefresh = function(){\r\n clearInterval(this.cdci);\r\n this.options.autosec.text(this.options.refreshtime);\r\n };\r\n\r\n /**\r\n * 刷新内容\r\n * @return {[type]} [description]\r\n */\r\n kuaixun.prototype.refresh = function (){\r\n var _this = this;\r\n this.options.kxloading.show();\r\n \r\n $.ajax({\r\n url: '//newsapi.eastmoney.com/kuaixun/v2/api/list',\r\n type: 'GET',\r\n dataType: 'jsonp',\r\n jsonpCallback: 'ajaxResult_' + _this.options.kxtype,\r\n scriptCharset : 'utf-8',\r\n cache: false,\r\n data: {\r\n column: _this.options.kxtype,\r\n limit: 20,\r\n p: 1,\r\n callback: 'kxall_ajaxResult' + _this.options.kxtype\r\n }\r\n })\r\n .done(function(data) { \r\n data = data.news; \r\n var _kxhtml = [];\r\n _kxhtml.push('
查看更多
');\r\n _this.options.kxlist.html(_kxhtml.join(''));\r\n _this.refreshcd();\r\n _this.options.kxloading.hide(); \r\n })\r\n .fail(function() {\r\n var kx_error = $('
抱歉,数据没有正常显示
')\r\n var handrefreshbtn = $('请点此手动刷新');\r\n kx_error.append(handrefreshbtn);\r\n _this.options.kxlist.html(kx_error);\r\n handrefreshbtn.on('click', function(){\r\n _this.refresh();\r\n });\r\n return false;\r\n })\r\n .always(function() {\r\n \r\n }); \r\n }\r\n\r\n return kuaixun;\r\n})();\r\n\r\nmodule.exports = kuaixun;\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nfunction getWinHeight(){\r\n if(window.innerHeight!= undefined){\r\n return window.innerHeight;\r\n }\r\n else{\r\n var B= document.body, D= document.documentElement;\r\n return Math.min(D.clientHeight, B.clientHeight);\r\n }\r\n}\r\n\r\n\r\nfunction elementInView(element) {\r\n var rect = element.getBoundingClientRect()\r\n \r\n var winHeight = getWinHeight();\r\n\r\n var yInView = rect.top < winHeight && rect.bottom > 0\r\n \r\n // var xInView = rect.left < winHeight && rect.right > 0\r\n \r\n return yInView \r\n }\r\n\r\nfunction lazyLoad(obj){\r\n $('.lazyLoad').each(function(index){\r\n var id = $(this).attr('id');\r\n var $this = $(this);\r\n var isview = elementInView(this);\r\n if(isview){\r\n if (!$this.data('loaded')) {\r\n $this.data('loaded', true)\r\n try {\r\n if(typeof window[id] === 'object'){\r\n if(window[id].init){\r\n window[id].init(id,obj);\r\n }\r\n }else if(typeof window[id] === 'function'){\r\n window[id](id,obj);\r\n \r\n }\r\n } catch (error) {\r\n console.log(error)\r\n }\r\n \r\n }\r\n }\r\n })\r\n}\r\n\r\n\r\nmodule.exports = function(obj){\r\n lazyLoad(obj);\r\n $(window).scroll(function () {\r\n lazyLoad(obj)\r\n })\r\n};\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar tabs = __webpack_require__(1);\r\nvar tool = __webpack_require__(0);\r\nvar newApiOption = {\r\n init: function (id, obj) {\r\n if (!this.display) {\r\n return;\r\n }\r\n var that = this;\r\n that.isTabs = tool.isArray(obj[id]); //判断是否为多标签\r\n that.id = id;\r\n that.obj = obj;\r\n if (this.created) {\r\n this.created();\r\n }\r\n that.refresh();\r\n if (that.isTabs) {\r\n tabs({\r\n id: \"#\" + that.id,\r\n callback: function (index) {\r\n that.refresh(index);\r\n }\r\n })\r\n }\r\n },\r\n refresh: function (index) {\r\n if (index == undefined || index == null) {\r\n index = 0;\r\n }\r\n \r\n var that = this;\r\n if (that.beforeLoad) {\r\n that.beforeLoad();\r\n }\r\n var _url = that.isTabs ? that.obj[that.id][index] : that.obj[that.id];\r\n\r\n tool.getData(_url, function (json) {\r\n var html = \"\";\r\n for (var i = 0; i < json.length; i++) {\r\n var data = json[i];\r\n html += that.display(data,index);\r\n }\r\n if(that.isTabs){\r\n $(\"#\" + that.id + \" table:eq(\" + index + \") tbody\").html(html);\r\n }else{\r\n $(\"#\"+that.id+\" tbody\").html(html);\r\n }\r\n if (that.afterLoad) {\r\n that.afterLoad();\r\n }\r\n that.setTime();\r\n }, function (err) {\r\n console && console.log(err)\r\n })\r\n },\r\n setTime: function () {\r\n var that = this;\r\n if (that.setInter) {\r\n window.clearTimeout(that.setInter)\r\n }\r\n that.setInter = setTimeout(function () {\r\n if(that.isTabs){\r\n var index = $(\"#\" + that.id + \" .tabs_list .active\").index();\r\n that.refresh(index);\r\n }else{\r\n that.refresh();\r\n }\r\n }, 60000)\r\n }\r\n}\r\n\r\nmodule.exports = newApiOption;\n\n/***/ }),\n/* 5 */,\n/* 6 */\n/***/ (function(module, exports) {\n\n\r\nvar count = 0;\r\nvar beijingChuo = '';\r\nvar londonChuo = '';\r\nvar newyorkChuo = '';\r\nvar timer = '';\r\n\r\nvar setTimeFormat = function (num) {\r\n return num >= 10 ? num : '0' + num + ''\r\n}\r\n//str:08:00:00\r\nvar getTimeStamp = function(temp){\r\n try {\r\n var isMinus = false;//是否小于0\r\n if(temp.indexOf(\"-\") >= 0){\r\n isMinus = true\r\n }\r\n var tempArr = temp.split(\":\");\r\n var hour = Math.abs(parseInt(tempArr[0],10));\r\n var minute = parseInt(tempArr[1],10);\r\n var second = parseInt(tempArr[2],10);\r\n\r\n var res = (hour *3600 + minute * 60 + second * 1)* 1000;\r\n\r\n if(isMinus){\r\n return 0 -res;\r\n }\r\n return res;\r\n } catch (error) {\r\n return 0;\r\n }\r\n \r\n}\r\n\r\n\r\nvar DateFormat = function(str,format){\r\n var that = new Date(str);\r\n var o = {\r\n \"M+\": that.getMonth() + 1, //month\r\n \"d+\": that.getDate(), //day\r\n \"h+\": that.getHours(), //hour\r\n \"m+\": that.getMinutes(), //minute\r\n \"s+\": that.getSeconds(), //second\r\n \"q+\": Math.floor((that.getMonth() + 3) / 3), //quarter\r\n \"S\": that.getMilliseconds() //millisecond\r\n }\r\n if (/(y+)/.test(format)) {\r\n format = format.replace(RegExp.$1, (that.getFullYear() + \"\").substr(4 - RegExp.$1.length));\r\n }\r\n for (var k in o) {\r\n if (new RegExp(\"(\" + k + \")\").test(format)) {\r\n format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : (\"00\" + o[k]).substr((\"\" + o[k]).length));\r\n }\r\n }\r\n return format;\r\n}\r\n\r\nvar getGlobalTime = function () {\r\n $.ajax({\r\n url: '//cmsjs.eastmoney.com/TimeZone/Default.aspx?type=utctime&ids=41,2,78,53,16&jn=emutc&rt=1524811989422',\r\n type: 'get',\r\n dataType: 'script',\r\n success: function (data) {\r\n\r\n var UTCTIME = emutc.UTCTIME;\r\n var GMT = emutc.GMT;\r\n var bjshiqu = getTimeStamp(GMT[0]);//北京\r\n var ldshiqu = getTimeStamp(GMT[1]);//伦敦\r\n var nyshiqu = getTimeStamp(GMT[2]);//纽约\r\n var xnshiqu = getTimeStamp(GMT[3]);//悉尼\r\n var djshiqu = getTimeStamp(GMT[4]);//东京\r\n\r\n beijingChuo = UTCTIME\r\n londonChuo = UTCTIME-(bjshiqu-ldshiqu)\r\n newyorkChuo = UTCTIME-(bjshiqu-nyshiqu)\r\n xiniChuo = UTCTIME-(bjshiqu-xnshiqu)\r\n dongjingChuo = UTCTIME-(bjshiqu-djshiqu)\r\n\r\n timer = setInterval(function () {\r\n $('#global_time_beijing').text('北京 ' + DateFormat(beijingChuo,\"MM-dd hh:mm:ss\") + '');\r\n $('#global_time_london').text('伦敦 ' + DateFormat(londonChuo,\"MM-dd hh:mm:ss\") + '');\r\n $('#global_time_newyork').text('纽约 ' + DateFormat(newyorkChuo,\"MM-dd hh:mm:ss\") + '');\r\n $('#global_time_xini').text('悉尼 ' + DateFormat(xiniChuo,\"MM-dd hh:mm:ss\") + '');\r\n $('#global_time_dongjing').text('东京 ' + DateFormat(dongjingChuo,\"MM-dd hh:mm:ss\") + '');\r\n\r\n beijingChuo+=1000;\r\n londonChuo+=1000;\r\n newyorkChuo+=1000;\r\n xiniChuo+=1000;\r\n dongjingChuo+=1000;\r\n\r\n },1000)\r\n \r\n // beijingChuo = emutc.UTCTIME;\r\n // londonChuo = emutc.UTCTIME - 8 * 3600000;\r\n // newyorkChuo = emutc.UTCTIME - 13 * 3600000;\r\n // setTimeData(emutc);\r\n },\r\n\r\n error: function () {\r\n count++;\r\n if (count >= 2) {\r\n return\r\n }\r\n clearInterval(timer);\r\n getGlobalTime();\r\n\r\n },\r\n\r\n complete: function () {\r\n\r\n }\r\n })\r\n}\r\n\r\nmodule.exports = function () {\r\n getGlobalTime();\r\n}\n\n/***/ }),\n/* 7 */,\n/* 8 */,\n/* 9 */,\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar getGlobalTime = __webpack_require__(6);\r\nvar tool =__webpack_require__(0);\r\nvar lazyLoad = __webpack_require__(3);\r\nvar newApiOption = __webpack_require__(4);\r\nvar kuaixun = __webpack_require__(2);\r\nvar kuaixun1 = null;\r\n\r\nvar urlObj = {\r\n globalHq:\"//push2.eastmoney.com/api/qt/clist/get?pi=0&pz=10&po=1&np=1&fields=f1,f2,f3,f4,f12,f13,f14&fltt=2&invt=2&ut=13697a1cc677c8bfa9a496437bfef419&fs=i:1.000001,i:0.399001,i:100.HSI,i:100.N225,i:100.DJIA,i:100.NDX,i:104.CN00Y\",\r\n hyzfb:\"//push2.eastmoney.com/api/qt/clist/get?pn=1&pz=5&po=1&np=1&ut=13697a1cc677c8bfa9a496437bfef419&fltt=2&invt=2&fid=f3&fs=m:90+t:2&fields=f3,f4,f12,f13,f14,f16,f11,f62,f152,f104,f105\",\r\n zjlrb:\"//push2.eastmoney.com/api/qt/clist/get?pn=1&pz=5&po=1&np=1&fltt=2&invt=2&fid=f62&fs=m:90+t:2&fields=f3,f4,f12,f13,f14,f62,f184&ut=13697a1cc677c8bfa9a496437bfef419\"\r\n}\r\n//全球时间\r\nwindow.getGlobalTime = getGlobalTime;\r\n\r\n// 全球行情\r\nwindow.globalHq = {\r\n init:function(){\r\n var that = this;\r\n that.refresh();\r\n setInterval(function(){\r\n that.refresh();\r\n },60000)\r\n $('#globalHq').on(\"click\",\"li\",function(evt){\r\n var _href = $(this).find('.name a').attr(\"href\");\r\n window.open(_href)\r\n if (evt.preventDefault) {\r\n evt.preventDefault(); //非IE浏览器\r\n   } else {\r\n evt.returnValue = false; //在早期的IE版本中\r\n   }\r\n \r\n });\r\n },\r\n refresh:function(){\r\n var that = this;\r\n tool.getData(urlObj.globalHq,function(data){\r\n var html = \"\";\r\n for(var i = 0;i 0){\r\n className = \"stockup\"\r\n _zde = \"+\"+_zde;\r\n _zdf = \"+\"+_zdf;\r\n }else if (_zde < 0){\r\n className = \"stockdown\"\r\n }\r\n var html = '
  • '+\r\n '

    '+_name+'

    '+\r\n '

    '+_price+'';\r\n if(className){\r\n html+='';\r\n }\r\n html+= '

    '+_zde+''+_zdf+'

  • ';\r\n return html;\r\n }\r\n\r\n}\r\n\r\n//快讯\r\nwindow.kxStart = function() {\r\n if (kuaixun1 == null) {\r\n kuaixun1 = new kuaixun({\r\n refreshbtn: $('#kx_refresh_t'),\r\n fontsizebtn: $('#kx_size_t'),\r\n autobtn: $('#kx_auto_t'),\r\n autosec: $('#kx_auto_sec_t'),\r\n kxlist: $('#kx_list_t'),\r\n kxloading: $('#kx_loading_t'),\r\n kxtype: '102',\r\n kxlink: '//js1.eastmoney.com/tg.aspx?ID=3493'\r\n });\r\n kuaixun1.init();\r\n } else {\r\n kuaixun1.refreshcd();\r\n }\r\n }\r\n\r\n//个性推荐\r\nwindow.prf = function(){\r\n new personalRecommendF({\r\n container:'prf',\r\n index2018:false,\r\n width:280,\r\n prbody_height: 460\r\n });\r\n}\r\n\r\n//图片轮播\r\nwindow.video_slide = function(){\r\n // jQuery(\"#img_slide\").slide( { titCell:\".hd \",mainCell:\"ul\",effect:'leftLoop',autoPlay:false,scroll:1,vis:3});\r\n jQuery(\"#video_slide\").slide( { titCell:\".hd \",mainCell:\"ul\",effect:'leftLoop',autoPlay:false,scroll:1,vis:6});\r\n}\r\n\r\n// 行业涨幅榜\r\nvar hyzfbLoad = {\r\n display:function(data){\r\n var color = tool.getColor(data.f4);\r\n var html = ''+\r\n '' + data.f14 + '' +\r\n ' '+ tool.toPercent(data.f3) +''+\r\n ' '+ data.f104 +''+\r\n ' '+ data.f105 +''+\r\n '';\r\n return html;\r\n }\r\n}\r\n\r\n// 资金流入榜\r\nvar zjlrbLoad = {\r\n display:function(data){\r\n var color = tool.getColor(data.f4);\r\n var html = ''+\r\n '' + data.f14 + '' +\r\n ' '+ tool.toPercent(data.f3) +''+\r\n ' '+ tool.FixAmt(data.f62) +''+\r\n ' '+ tool.toPercent(data.f184) +''+\r\n '';\r\n return html;\r\n }\r\n}\r\n\r\n\r\nwindow.hyzfb = tool.CloneObj(newApiOption,hyzfbLoad);\r\nwindow.zjlrb = tool.CloneObj(newApiOption,zjlrbLoad);\r\n\r\n//杂志轮播\r\nwindow.magazine = function(){\r\n jQuery(\".magazine_swiper\").slide( { titCell:\".hd \",mainCell:\"ul.swiper_con\",effect:'leftLoop',autoPlay:true,scroll:1,vis:6});\r\n}\r\n\r\n$(function(){\r\n lazyLoad(urlObj);\r\n\r\n $('.iNews').each(function(i){\r\n var $this = $(this);\r\n var $title = $this.find(\".first .title\");\r\n var $info = $this.find(\".first .info\");\r\n \r\n var title_height = $title.height();\r\n var title_line_height = parseFloat($title.css(\"line-height\"))\r\n if(title_height > title_line_height + 1){\r\n $info.addClass(\"twoline\")\r\n }\r\n\r\n })\r\n\r\n if(typeof suggest2017 != \"undefined\"){\r\n new suggest2017({ //新建实例\r\n inputid: 'code_suggest', //参数部分\r\n shownewtips:true,\r\n offset: {\r\n left: -46,\r\n top: 0\r\n },\r\n newtipsoffset:{left:10, top:1}\r\n })\r\n }\r\n \r\n $(\".pic_swiper\").slide( {\r\n titCell: \".hd ul\",\r\n mainCell: \".bd ul\",\r\n effect: \"leftLoop\",\r\n autoPlay: true,\r\n autoPage: true\r\n });\r\n \r\n})\n\n/***/ })\n/******/ ]);\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgNmU2ODMwNzU2M2Y1ZDQ0MDNiM2IiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy90b29sL2luZGV4LmpzIiwid2VicGFjazovLy8uL2pzL21vZHVsZXMvdGFicy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9qcy9tb2R1bGVzL2t1YWl4dW4vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9sYXp5TG9hZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9qcy9tb2R1bGVzL2xvYWRPcHRpb24vaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9nbG9iYWxUaW1lL2luZGV4LmpzIiwid2VicGFjazovLy8uL2pzL2ZpbmFuY2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQSwyQ0FBMkMsY0FBYzs7UUFFekQ7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSxLQUFLO1FBQ0w7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7UUFFQTtRQUNBOzs7Ozs7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7O0FBRWpCLGFBQWE7QUFDYjtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCLGFBQWE7O0FBRWI7QUFDQTtBQUNBLGFBQWE7QUFDYixTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsV0FBVzs7QUFFWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxNQUFNO0FBQ3hDLFNBQVM7QUFDVDtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxlQUFlLEtBQUs7QUFDcEIsZUFBZSxJQUFJO0FBQ25CLGVBQWUsSUFBSTtBQUNuQixlQUFlLE9BQU87QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQzs7Ozs7O0FDalJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7O0FBRWIsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxDOzs7Ozs7QUN4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QUFFTDtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLDJCQUEyQjtBQUMzQixTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCxDQUFDLEMiLCJmaWxlIjoiZmluYW5jZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gMTEpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDZlNjgzMDc1NjNmNWQ0NDAzYjNiIiwibW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICB0YWJzTW92ZUNoYW5nZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKGVsZW1lbnQpO1xyXG4gICAgICAgIHZhciBzZXRUaW1lID0gbnVsbDtcclxuICAgICAgICAkdGhpcy5lYWNoKGZ1bmN0aW9uIChpKSB7XHJcbiAgICAgICAgICAgIHZhciAkdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgIHZhciB0YWJzTGlzdCA9ICQoJy50YWJzX2xpc3QnLCAkdGhpcyk7XHJcbiAgICAgICAgICAgIHZhciB0YWJzTW9yZUl0ZW0gPSAkKCcudGFic19tb3JlPmEnLCAkdGhpcyk7XHJcbiAgICAgICAgICAgIHZhciB0YWJzUGFubmVsID0gJCgnLnRhYnNfaXRlbScsICR0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHRhYnNMaXN0Lm9uKCdtb3VzZW92ZXInLCAnbGknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgc2V0VGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9ICQodGhhdCkuaW5kZXgoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaHJlZiA9ICQodGhhdCkuZmluZCgnYScpLmF0dHIoJ2hyZWYnKTtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoYXQpLmFkZENsYXNzKCdhY3RpdmUnKS5zaWJsaW5ncygpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0YWJzTW9yZUl0ZW0ubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYnNNb3JlSXRlbS5lcShpbmRleCkuc2hvdygpLnNpYmxpbmdzKCkuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHRhYnNNb3JlSXRlbS5sZW5ndGggPT09IDEgJiYgaHJlZil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhYnNNb3JlSXRlbS5lcSgwKS5hdHRyKCdocmVmJyxocmVmKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0YWJzUGFubmVsLmVxKGluZGV4KS5mYWRlSW4oKS5hZGRDbGFzcygnYWN0aXZlJykuc2libGluZ3MoKS5oaWRlKCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxyXG5cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgdGFic0xpc3Qub24oJ21vdXNlb3V0JywgJ2xpJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzZXRUaW1lKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIHN1YlRhYnNNb3ZlOiBmdW5jdGlvbiAoZWxlbWVudCkge1xyXG4gICAgICAgIHZhciAkdGhpcyA9ICQoZWxlbWVudCk7XHJcbiAgICAgICAgdmFyIHNldFRpbWUgPSBudWxsO1xyXG4gICAgICAgICR0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICB2YXIgc3ViVGFic0xpc3QgPSAkKCcuc3ViX3RhYnNfaGVhZGVyJywgJHRoaXMpO1xyXG4gICAgICAgICAgICB2YXIgc3ViVGFic0l0ZW0gPSAkKCcuc3ViX3RhYnNfaXRlbScsICR0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIHN1YlRhYnNMaXN0Lm9uKCdtb3VzZW92ZXInLCAnbGknLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2xlZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gJChzbGVmKS5pbmRleCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoc2xlZikuYWRkQ2xhc3MoJ2FjdGl2ZScpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YlRhYnNJdGVtLmVxKGluZGV4KS5mYWRlSW4oKS5hZGRDbGFzcygnYWN0aXZlJykuc2libGluZ3MoKS5oaWRlKCkucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwKVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgc3ViVGFic0xpc3Qub24oJ21vdXNlb3V0JywgJ2xpJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzZXRUaW1lKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgICB0YWJzTW91c2VUYWJsZTpmdW5jdGlvbihlbGVJZCx0aGF0LGNhbGxiYWNrKXtcclxuICAgICAgICAkKCcjJysgZWxlSWQpLm9uKCdtb3VzZW92ZXInLCcudGFic19saXN0IGxpJyxmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICBpZigkKHRoaXMpLmhhc0NsYXNzKFwiYWN0aXZlXCIpKXtcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBfc2VsZiA9dGhpcztcclxuICAgICAgICAgICAgdGhhdC5zZXRUaW1lID0gc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGlkID0gJChfc2VsZikuZGF0YSgnaWQnKTtcclxuICAgICAgICAgICAgICAgIHZhciBocmVmID0gICQoX3NlbGYpLmNoaWxkcmVuKFwiYVwiKS5hdHRyKFwiaHJlZlwiKSB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYoaWQpe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkID0gaWQuc3BsaXQoJyMnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LmZpZCA9IGlkWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQucG8gPSBpZFsxXSB8fCAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoYXQuYmVmb3JlTG9hZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoYXQucmVmcmVzaCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAkKF9zZWxmKS5hZGRDbGFzcygnYWN0aXZlJykuc2libGluZ3MoKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhocmVmKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LDIwMClcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgJCgnIycrIGlkKS5vbignbW91c2VvdXQnLCAnLnRhYnNfbGlzdCBsaScsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYodGhhdC5zZXRUaW1lKXtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhhdC5zZXRUaW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiDmm7/mjaJpZFxyXG4gICAgICovXHJcbiAgICByZXBsYWNlSWQ6IGZ1bmN0aW9uIChzdHIsIGlkKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKCd7eyNpZCN9fScsIGlkKTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9LFxyXG4gICAgZ2V0RGF0YTogZnVuY3Rpb24gKHVybCwgc3VjY2VzcywgZmFpbCkge1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICAvLyB0aW1lb3V0IDogMTUwMCxcclxuICAgICAgICAgICAganNvbnA6ICdjYicsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChqc29uICYmIGpzb24uZGF0YSAmJiBqc29uLmRhdGEuZGlmZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzKGpzb24uZGF0YS5kaWZmKVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwgJiYgZmFpbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZhaWwgJiYgZmFpbCgpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgZmFpbCAmJiBmYWlsKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIGdldE9sZERhdGE6IGZ1bmN0aW9uICh1cmwsIHN1YywgZmFpbCkge1xyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiR0VUXCIsXHJcbiAgICAgICAgICAgIHVybDogdXJsLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICAvLyB0aW1lb3V0IDogMTUwMCxcclxuICAgICAgICAgICAganNvbnA6ICdjYicsXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghIWpzb24gJiYganNvbi5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWMoanNvbilcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWlsICYmIGZhaWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFpbCAmJiBmYWlsKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycikge1xyXG4gICAgICAgICAgICAgICAgZmFpbCAmJiBmYWlsKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfSxcclxuICAgIC8qXHJcbiAgICAgKuWIpOaWreWAvOaYr+WQpumdnuepulxyXG4gICAgICovXHJcbiAgICBnZXRUZXh0VmFsT3JFbXB0eTogZnVuY3Rpb24gKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9ICcnICYmIHZhbHVlICE9IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnLSdcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge2RhdGF95a2X56ym5LiyIFxyXG4gICAgICogQHBhcmFtIHtudW195L+d55WZ5bCP5pWw54K55Yeg5L2NXHJcbiAgICAgKiBAcGFyYW0ge2ZpeH3ljZXkvY1cclxuICAgICAqIEBwYXJhbSB7ZGl2aWRlfSDpmaTku6XlpJrlsJHvvIxlZzoxMDAwMCAs5aaC5p6c5rKh5pyJ5YiZ6Ieq5Yqo5aGr5YWFXHJcbiAgICAgKi9cclxuICAgIGdldENvbG9yQnlEYXRlOiBmdW5jdGlvbiAoZGF0YSwgbnVtLCBmaXgsIGRpdmlkZSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhID09PSAnJyB8fCBkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSAnLScgfHwgaXNOYU4oZGF0YSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnPHNwYW4+LTwvc3Bhbj4nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YSA9IHBhcnNlRmxvYXQoZGF0YSk7XHJcbiAgICAgICAgICAgIHZhciByZXR1bHQgPSAnJztcclxuXHJcbiAgICAgICAgICAgIGlmICghZGl2aWRlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1bHQgPSB0aGlzLkZpeEFtdChkYXRhLCBudW0sIGZpeCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBudW0gPSAhIXBhcnNlRmxvYXQobnVtKSA/IHBhcnNlRmxvYXQobnVtKSA6IDI7XHJcbiAgICAgICAgICAgICAgICByZXR1bHQgPSAoZGF0YSAvIHBhcnNlSW50KGRpdmlkZSkpLnRvRml4ZWQobnVtKSArIGZpeDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNvbG9yID0gJyc7XHJcbiAgICAgICAgICAgIGNvbG9yID0gISFkYXRhID8gKGRhdGEgPT0gMCA/ICcnIDogZGF0YSA+IDAgPyAncmVkJyA6ICdncmVlbicpIDogJyc7XHJcbiAgICAgICAgICAgIHJldHVsdCA9ICc8c3BhbiBjbGFzcz1cIicgKyBjb2xvciArICdcIj4nICsgcmV0dWx0ICsgJzwvc3Bhbj4nXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dWx0O1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICByZXR1cm4gJy0nXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8qXHJcbiAgICAgKuWNleS9jeiHquWKqOaNoueul1xyXG4gICAgICovXHJcbiAgICBGaXhBbXQ6IGZ1bmN0aW9uIChzdHIsIG51bSwgZml4LCByaWRlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHN0ciA9PT0gJycgfHwgc3RyID09PSB1bmRlZmluZWQgfHwgc3RyID09PSBudWxsIHx8IHN0ciA9PT0gJy0nIHx8IGlzTmFOKHN0cikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnLSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICAgICAgZml4ID0gISFmaXggPyBmaXggOiAnJztcclxuICAgICAgICAgICAgbnVtID0gaXNOYU4ocGFyc2VGbG9hdChudW0pKSA/IDIgOiBwYXJzZUZsb2F0KG51bSk7XHJcbiAgICAgICAgICAgIHJpZGUgPSAhIXJpZGUgPyByaWRlIDogMTtcclxuICAgICAgICAgICAgc3RyID0gcGFyc2VGbG9hdChzdHIpICogcGFyc2VJbnQocmlkZSk7XHJcbiAgICAgICAgICAgIHZhciBpbnRTdHIgPSBNYXRoLmFicyhwYXJzZUludChzdHIpKTtcclxuICAgICAgICAgICAgaWYgKGludFN0ci50b1N0cmluZygpLmxlbmd0aCA+IDEyKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSAocGFyc2VGbG9hdChzdHIpIC8gMTAwMDAwMDAwMDAwMCkudG9GaXhlZChudW0pICsgJ+S4h+S6vycgKyBmaXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50U3RyLnRvU3RyaW5nKCkubGVuZ3RoID4gOCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHBhcnNlRmxvYXQoc3RyKSAvIDEwMDAwMDAwMCkudG9GaXhlZChudW0pICsgJ+S6vycgKyBmaXg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW50U3RyLnRvU3RyaW5nKCkubGVuZ3RoID4gNCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gKHBhcnNlRmxvYXQoc3RyKSAvIDEwMDAwKS50b0ZpeGVkKG51bSkgKyAn5LiHJyArIGZpeDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmKHBhcnNlRmxvYXQoc3RyKSA9PT0gcGFyc2VJbnQoc3RyKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGbG9hdChzdHIpICsgZml4O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGFyc2VGbG9hdChzdHIpLnRvRml4ZWQobnVtKSArIGZpeDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHQpXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnLSdcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgLypcclxuICAgICAq5Y2V5L2N5LiN6Ieq5Yqo5o2i566X77yI5Li76KaB55So5LqO5Lu35qC8UHJpY2XvvIlcclxuICAgICAqL1xyXG4gICAgRml4QW10UHJpY2U6IGZ1bmN0aW9uIChzdHIsIG51bSwgZml4LCByaWRlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHN0ciA9PT0gJycgfHwgc3RyID09PSB1bmRlZmluZWQgfHwgc3RyID09PSBudWxsIHx8IHN0ciA9PT0gJy0nIHx8IGlzTmFOKHN0cikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnLSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHJlc3VsdDtcclxuICAgICAgICAgICAgZml4ID0gISFmaXggPyBmaXggOiAnJztcclxuICAgICAgICAgICAgbnVtID0gaXNOYU4ocGFyc2VGbG9hdChudW0pKSA/IDIgOiBwYXJzZUZsb2F0KG51bSk7XHJcbiAgICAgICAgICAgIHJpZGUgPSAhIXJpZGUgPyByaWRlIDogMTtcclxuICAgICAgICAgICAgc3RyID0gcGFyc2VGbG9hdChzdHIpICogcGFyc2VJbnQocmlkZSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXN1bHQgPSBwYXJzZUZsb2F0KHN0cikudG9GaXhlZChudW0pICsgZml4O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgcmV0dXJuICctJ1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKlxyXG4gICAgICrmjaLnrpfmiJDnmb7liIbmr5RcclxuICAgICAqL1xyXG4gICAgdG9QZXJjZW50OiBmdW5jdGlvbiAoZGF0YSwgbnVtKSB7XHJcbiAgICAgICAgaWYgKGRhdGEgPT09ICcnIHx8IGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09ICctJyB8fCBpc05hTihkYXRhKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJy0nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBudW0gPSBpc05hTihwYXJzZUludChudW0pKSA/IDIgOiBwYXJzZUludChudW0pO1xyXG4gICAgICAgIHJldHVybiAhaXNOYU4ocGFyc2VGbG9hdChkYXRhKSkgPyBwYXJzZUZsb2F0KGRhdGEpLnRvRml4ZWQobnVtKSArICclJyA6ICctJztcclxuICAgIH0sXHJcbiAgICB0b0ZpeGVkOiBmdW5jdGlvbiAoZGF0YSwgbnVtKSB7XHJcbiAgICAgICAgaWYgKGRhdGEgPT09ICcnIHx8IGRhdGEgPT09IHVuZGVmaW5lZCB8fCBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09ICctJyB8fCBpc05hTihkYXRhKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJy0nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBudW0gPSBpc05hTihwYXJzZUludChudW0pKSA/IDIgOiBwYXJzZUludChudW0pO1xyXG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGRhdGEpLnRvRml4ZWQobnVtKTtcclxuICAgIH0sXHJcbiAgICBnZXRDb2xvcjogZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICBkYXRhID0gcGFyc2VGbG9hdChkYXRhKTtcclxuICAgICAgICByZXR1cm4gISFkYXRhID8gKGRhdGEgPT0gMCA/ICcnIDogZGF0YSA+IDAgPyAncmVkJyA6ICdncmVlbicpIDogJyc7XHJcbiAgICB9LFxyXG4gICAgcXVvdGVMaW5rOiBmdW5jdGlvbiAoY29kZSwgbWFya2V0KSB7XHJcbiAgICAgICAgcmV0dXJuICdodHRwOi8vcXVvdGUuZWFzdG1vbmV5LmNvbS91bmlmeS9yLycgKyBtYXJrZXQgKyAnLicgKyBjb2RlICsgJy8nO1xyXG4gICAgfSxcclxuICAgIENsb25lT2JqOiBmdW5jdGlvbiAoY29tbW9uLCBvYmopIHtcclxuICAgICAgICB2YXIgbmV3T2JqID0gJC5leHRlbmQodHJ1ZSwge30sIGNvbW1vbik7XHJcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9iaikge1xyXG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IG9ialtrZXldXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuZXdPYmo7XHJcbiAgICB9LFxyXG4gICAgaXNBcnJheTpmdW5jdGlvbihvKXtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pID09PSAnW29iamVjdCBBcnJheV0nO1xyXG4gICAgfVxyXG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL3Rvb2wvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb24pIHtcclxuICAgIGlmICghb3B0aW9uLmlkKSByZXR1cm47XHJcbiAgICB2YXIgZGVmYXVsdE9wdGlvbiA9IHtcclxuICAgICAgICB0YWJMaXN0OiBcIi50YWJzX2xpc3RcIixcclxuICAgICAgICB0YWJMaXN0VGFyZ2V0OiBcImxpXCIsXHJcbiAgICAgICAgdGFic01vcmU6ICcudGFic19tb3JlJyxcclxuICAgICAgICB0YWJzTW9yZVRhcmdldDogJ2EnLFxyXG4gICAgICAgIHRhYnNJdGVtOiBcIi50YWJzX2l0ZW1cIixcclxuICAgICAgICBhY3RpdmVDbGFzczogXCJhY3RpdmVcIixcclxuICAgICAgICB0b3VjaGVzOiBcIm1vdXNlXCIsXHJcbiAgICAgICAgZGVsYXlUaW1lOiAyMDAsXHJcbiAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHt9XHJcbiAgICB9XHJcbiAgICBvcHRpb24gPSAkLmV4dGVuZCh0cnVlLCBkZWZhdWx0T3B0aW9uLCBvcHRpb24pXHJcbiAgICB2YXIgJHRoaXMgPSAkKG9wdGlvbi5pZCk7XHJcbiAgICB2YXIgdGFic0xpc3QgPSAkKG9wdGlvbi50YWJMaXN0LCAkdGhpcyk7XHJcbiAgICB2YXIgdGFic01vcmVJdGVtID0gJChvcHRpb24udGFic01vcmUsICR0aGlzKS5maW5kKG9wdGlvbi50YWJzTW9yZVRhcmdldCk7XHJcbiAgICB2YXIgdGFic1Bhbm5lbCA9ICQob3B0aW9uLnRhYnNJdGVtLCAkdGhpcyk7XHJcblxyXG4gICAgaWYgKG9wdGlvbi50b3VjaGVzID09PSBcImNsaWNrXCIpIHtcclxuICAgICAgICB0YWJzTGlzdC5vbihcImNsaWNrXCIsIG9wdGlvbi50YWJMaXN0VGFyZ2V0LCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKG9wdGlvbi5hY3RpdmVDbGFzcykpIHJldHVybjtcclxuICAgICAgICAgICAgdmFyIGluZGV4ID0gJCh0aGlzKS5pbmRleCgpO1xyXG4gICAgICAgICAgICB2YXIgaHJlZiA9ICQodGhpcykuZmluZCgnYScpLmF0dHIoJ2hyZWYnKTtcclxuICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcyhvcHRpb24uYWN0aXZlQ2xhc3MpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3Mob3B0aW9uLmFjdGl2ZUNsYXNzKTtcclxuICAgICAgICAgICAgaWYgKHRhYnNNb3JlSXRlbS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0YWJzTW9yZUl0ZW0uZXEoaW5kZXgpLnNob3coKS5zaWJsaW5ncygpLmhpZGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0YWJzTW9yZUl0ZW0ubGVuZ3RoID09PSAxICYmIGhyZWYpIHtcclxuICAgICAgICAgICAgICAgIHRhYnNNb3JlSXRlbS5lcSgwKS5hdHRyKCdocmVmJywgaHJlZilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0YWJzUGFubmVsLmVxKGluZGV4KS5mYWRlSW4oKS5hZGRDbGFzcyhvcHRpb24uYWN0aXZlQ2xhc3MpLnNpYmxpbmdzKCkuaGlkZSgpLnJlbW92ZUNsYXNzKG9wdGlvbi5hY3RpdmVDbGFzcyk7XHJcbiAgICAgICAgICAgIG9wdGlvbi5jYWxsYmFjayhpbmRleCk7XHJcbiAgICAgICAgfSlcclxuICAgIH0gZWxzZSBpZiAob3B0aW9uLnRvdWNoZXMgPT09IFwibW91c2VcIikge1xyXG4gICAgICAgIHZhciBzZXRUaW1lO1xyXG4gICAgICAgIHRhYnNMaXN0Lm9uKCdtb3VzZW92ZXInLCBvcHRpb24udGFiTGlzdFRhcmdldCwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoJCh0aGlzKS5oYXNDbGFzcyhvcHRpb24uYWN0aXZlQ2xhc3MpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICAgICAgc2V0VGltZSA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gJCh0aGF0KS5pbmRleCgpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGhyZWYgPSAkKHRoYXQpLmZpbmQoJ2EnKS5hdHRyKCdocmVmJyk7XHJcbiAgICAgICAgICAgICAgICAkKHRoYXQpLmFkZENsYXNzKG9wdGlvbi5hY3RpdmVDbGFzcykuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhvcHRpb24uYWN0aXZlQ2xhc3MpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhYnNNb3JlSXRlbS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFic01vcmVJdGVtLmVxKGluZGV4KS5zaG93KCkuc2libGluZ3MoKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRhYnNNb3JlSXRlbS5sZW5ndGggPT09IDEgJiYgaHJlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYnNNb3JlSXRlbS5lcSgwKS5hdHRyKCdocmVmJywgaHJlZilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRhYnNQYW5uZWwuZXEoaW5kZXgpLmZhZGVJbigpLmFkZENsYXNzKG9wdGlvbi5hY3RpdmVDbGFzcykuc2libGluZ3MoKS5oaWRlKCkucmVtb3ZlQ2xhc3Mob3B0aW9uLmFjdGl2ZUNsYXNzKTtcclxuICAgICAgICAgICAgICAgIG9wdGlvbi5jYWxsYmFjayhpbmRleCk7XHJcbiAgICAgICAgICAgIH0sIG9wdGlvbi5kZWxheVRpbWUpXHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgdGFic0xpc3Qub24oJ21vdXNlb3V0JywgJ2xpJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNldFRpbWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMvdGFicy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsIi8qKlxyXG4gKiDlv6vorq9cclxuICovXHJcblxyXG52YXIgJCA9IGpRdWVyeTtcclxuXHJcbnZhciBrdWFpeHVuID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICBmdW5jdGlvbiBrdWFpeHVuKG9wdGlvbnMpIHtcclxuICAgICAgICB2YXIgZGVmYXVsdG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHJlZnJlc2hidG4gOiBudWxsLCAvL+WIt+aWsOaMiemSrlxyXG4gICAgICAgICAgICBmb250c2l6ZWJ0biA6IG51bGwsIC8v5a2X5Y+35oyJ6ZKuXHJcbiAgICAgICAgICAgIGF1dG9idG4gOiBudWxsLCAvL+iHquWIt+aMiemSrlxyXG4gICAgICAgICAgICBhdXRvc2VjIDogbnVsbCwgLy/oh6rliLfml7bpl7RcclxuICAgICAgICAgICAga3hsaXN0IDogbnVsbCwgLy/lhoXlrrnlrrnlmahcclxuICAgICAgICAgICAga3hsb2FkaW5nIDogbnVsbCwgLy9sb2FkaW5nXHJcbiAgICAgICAgICAgIHJlZnJlc2h0aW1lIDogNjAsIC8v5Yi35paw5pe26Ze0XHJcbiAgICAgICAgICAgIGt4dHlwZTogJzEwMicsIC8v5b+r6K6v57G75Z6LXHJcbiAgICAgICAgICAgIGt4bGluazogJ2h0dHA6Ly9rdWFpeHVuLmVhc3Rtb25leS5jb20vJyAvL+W/q+iur+mTvuaOpVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9wdGlvbnMgPSAkLmV4dGVuZChkZWZhdWx0b3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgICAgICAgdGhpcy5jZGNpID0gbnVsbDsgLy/oh6rliqjliLfmlrBcclxuICAgICAgICB0aGlzLmlzYXV0b2NkID0gdHJ1ZTsgLy/mmK/lkKboh6rliqjliLfmlrBcclxuICAgICAgICB0aGlzLmlza3hzaG93ID0gdHJ1ZTsgLy/lv6vorq/mmK/lkKblnKjlsZXnpLrkuK1cclxuICAgICAgICB0aGlzLmZvbnRzaXplID0gMTI7IC8v5b2T5YmN5a2X5Y+3XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliJ3lp4vljJZcclxuICAgICAqIEByZXR1cm4ge1t0eXBlXX0gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBrdWFpeHVuLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5hdXRvc2VjLnRleHQodGhpcy5vcHRpb25zLnJlZnJlc2h0aW1lKTtcclxuICAgICAgICB0aGlzLmJpbmQoKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2hjZCgpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIOe7keWumuS6i+S7tlxyXG4gICAgICogQHJldHVybiB7W3R5cGVdfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGt1YWl4dW4ucHJvdG90eXBlLmJpbmQgPSBmdW5jdGlvbiAoKXtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIC8v5Yi35paw5oyJ6ZKuXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnJlZnJlc2hidG4ub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgX3RoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy/oh6rliqjliLfmlrDmjInpkq5cclxuICAgICAgICB0aGlzLm9wdGlvbnMuYXV0b2J0bi5vbignY2xpY2snLGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHRoaXNidG4gPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICBpZiAodGhpc2J0bi5pcygnLmt4X2F1dG9pbmcnKSkgeyAvL+aaguWBnFxyXG4gICAgICAgICAgICAgICAgdGhpc2J0bi5yZW1vdmVDbGFzcygna3hfYXV0b2luZycpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuaXNhdXRvY2QgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoX3RoaXMuY2RjaSk7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5vcHRpb25zLmF1dG9zZWMudGV4dChfdGhpcy5vcHRpb25zLnJlZnJlc2h0aW1lKTtcclxuICAgICAgICAgICAgfSBlbHNlIHsgLy/lvIDlkK9cclxuICAgICAgICAgICAgICAgIHRoaXNidG4uYWRkQ2xhc3MoJ2t4X2F1dG9pbmcnKTtcclxuICAgICAgICAgICAgICAgIF90aGlzLmlzYXV0b2NkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJlZnJlc2hjZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoIHRoaXMub3B0aW9ucy5mb250c2l6ZWJ0biApe1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZm9udHNpemVidG4ub24oJ2NsaWNrJywgZnVuY3Rpb24gKCkgeyAvL+iwg+aVtOWtl+WPt1xyXG4gICAgICAgICAgICAgICAgdmFyIHRoaXNidG4gPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmZvbnRzaXplID09IDEyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZm9udHNpemUgPSAxNDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzYnRuLnRleHQoJ+Wwj+Wtly0nKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuZm9udHNpemUgPSAxMjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzYnRuLnRleHQoJ+Wkp+WtlysnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIF90aGlzLm9wdGlvbnMua3hsaXN0LmNzcygnZm9udC1zaXplJywgX3RoaXMuZm9udHNpemUgKyAncHgnKTtcclxuICAgICAgICAgICAgfSk7IFxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIt+aWsOWAkuiuoeaXtlxyXG4gICAgICogQHJldHVybiB7W3R5cGVdfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGt1YWl4dW4ucHJvdG90eXBlLnJlZnJlc2hjZCA9IGZ1bmN0aW9uICgpe1xyXG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmNkY2kpO1xyXG4gICAgICAgIHRoaXMuY2RjaSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF1dG9zZWMudGV4dCh0aGlzLm9wdGlvbnMucmVmcmVzaHRpbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzYXV0b2NkICYmIHRoaXMuaXNreHNob3cpIHtcclxuICAgICAgICAgICAgdGhpcy5jZGNpID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIG9sZFRpbWUgPSBfdGhpcy5vcHRpb25zLmF1dG9zZWMudGV4dCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG9sZFRpbWUgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5hdXRvc2VjLnRleHQob2xkVGltZSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICog5YGc5q2i5YCS6K6h5pe2XHJcbiAgICAgKi9cclxuICAgIGt1YWl4dW4ucHJvdG90eXBlLnN0b3BSZWZyZXNoID0gZnVuY3Rpb24oKXtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuY2RjaSk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmF1dG9zZWMudGV4dCh0aGlzLm9wdGlvbnMucmVmcmVzaHRpbWUpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIOWIt+aWsOWGheWuuVxyXG4gICAgICogQHJldHVybiB7W3R5cGVdfSBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIGt1YWl4dW4ucHJvdG90eXBlLnJlZnJlc2ggPSBmdW5jdGlvbiAoKXtcclxuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5reGxvYWRpbmcuc2hvdygpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgIHVybDogJy8vbmV3c2FwaS5lYXN0bW9uZXkuY29tL2t1YWl4dW4vdjIvYXBpL2xpc3QnLFxyXG4gICAgICAgICAgICB0eXBlOiAnR0VUJyxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICdqc29ucCcsXHJcbiAgICAgICAgICAgIGpzb25wQ2FsbGJhY2s6ICdhamF4UmVzdWx0XycgKyBfdGhpcy5vcHRpb25zLmt4dHlwZSxcclxuICAgICAgICAgICAgc2NyaXB0Q2hhcnNldCA6ICd1dGYtOCcsXHJcbiAgICAgICAgICAgIGNhY2hlOiBmYWxzZSxcclxuICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgY29sdW1uOiBfdGhpcy5vcHRpb25zLmt4dHlwZSxcclxuICAgICAgICAgICAgICAgIGxpbWl0OiAyMCxcclxuICAgICAgICAgICAgICAgIHA6IDEsXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjazogJ2t4YWxsX2FqYXhSZXN1bHQnICsgX3RoaXMub3B0aW9ucy5reHR5cGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmRvbmUoZnVuY3Rpb24oZGF0YSkgeyAgIFxyXG4gICAgICAgICAgICBkYXRhID0gZGF0YS5uZXdzOyAgICAgICAgIFxyXG4gICAgICAgICAgICB2YXIgX2t4aHRtbCA9IFtdO1xyXG4gICAgICAgICAgICBfa3hodG1sLnB1c2goJzx1bD4nKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIGF1cmwgPSBkYXRhW2ldLnVybF93XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXS51cmxfdW5pcXVlICYmIGRhdGFbaV0udXJsX3VuaXF1ZS5pbmRleE9mKCdodHRwJykgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF1cmwgPSBkYXRhW2ldLnVybF91bmlxdWVcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBfa3hodG1sLnB1c2goJzxsaT4nKTtcclxuICAgICAgICAgICAgICAgIF9reGh0bWwucHVzaCgnPHNwYW4gY2xhc3M9XCJreF9pdGltZVwiPicgKyBkYXRhW2ldLnNob3d0aW1lLnN1YnN0cmluZygxMSwxNikgKyAnPC9zcGFuPicpO1xyXG4gICAgICAgICAgICAgICAgX2t4aHRtbC5wdXNoKCc8c3BhbiBjbGFzcz1cImt4X2l0aW1lX2VuZFwiPnw8L3NwYW4+Jyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX2t4X2RpZ2VzdCA9IGRhdGFbaV0uZGlnZXN0O1xyXG4gICAgICAgICAgICAgICAgaWYoX2t4X2RpZ2VzdD09JycpX2t4X2RpZ2VzdD1kYXRhW2ldLnRpdGxlO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFbaV0ubmV3c3R5cGUgPT0gXCIxXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVtpXS50b3BpYyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9reF9kaWdlc3QgPSAnPGEgaHJlZj1cIicgKyBkYXRhW2ldLnRvcGljLkFzX1VSTCArICdcIj4nICsgX2t4X2RpZ2VzdCArICc8L2E+PHNwYW4gY2xhc3M9XCJiZF9pX3p0XCI+5LiT6aKYPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICBfa3hfZGlnZXN0ID0gJzxhIGhyZWY9XCInICsgYXVybCArICdcIj4nICsgX2t4X2RpZ2VzdCArICdb54K55Ye75p+l55yL5YWo5paHXTwvYT4nO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB2YXIgX2t4X3N0eWxlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YVtpXS50aXRsZXN0eWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIjFcIjpcclxuICAgICAgICAgICAgICAgICAgICAgIF9reF9zdHlsZSA9IFwiIGJvbGRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCIyXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBfa3hfc3R5bGUgPSBcIiByZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCIzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICBfa3hfc3R5bGUgPSBcIiBib2xkIHJlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBfa3hodG1sLnB1c2goJzxzcGFuIGNsYXNzPVwiYmRfaV90eHQnICsgX2t4X3N0eWxlICsgJ1wiPicgKyBfa3hfZGlnZXN0ICsgJzwvc3Bhbj4nKTtcclxuICAgICAgICAgICAgICAgIF9reGh0bWwucHVzaCgnPC9saT4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfa3hodG1sLnB1c2goJzwvdWw+PGRpdiBjbGFzcz1cImt4X21vcmVfZVwiPjxhIGhyZWY9XCInICsgX3RoaXMub3B0aW9ucy5reGxpbmsgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+5p+l55yL5pu05aSaPC9hPjwvZGl2PicpO1xyXG4gICAgICAgICAgICBfdGhpcy5vcHRpb25zLmt4bGlzdC5odG1sKF9reGh0bWwuam9pbignJykpO1xyXG4gICAgICAgICAgICBfdGhpcy5yZWZyZXNoY2QoKTtcclxuICAgICAgICAgICAgX3RoaXMub3B0aW9ucy5reGxvYWRpbmcuaGlkZSgpOyAgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZhaWwoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIHZhciBreF9lcnJvciA9ICQoJzxkaXYgY2xhc3M9XCJreF9lcnJvclwiPuaKseatie+8jOaVsOaNruayoeacieato+W4uOaYvuekujxicj48L2Rpdj4nKVxyXG4gICAgICAgICAgICB2YXIgaGFuZHJlZnJlc2hidG4gPSAkKCc8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgdGFyZ2V0PVwiX3NlbGZcIiBjbGFzcz1cImhhbmRyZWZyZXNoYnRuXCI+6K+354K55q2k5omL5Yqo5Yi35pawPC9hPicpO1xyXG4gICAgICAgICAgICBreF9lcnJvci5hcHBlbmQoaGFuZHJlZnJlc2hidG4pO1xyXG4gICAgICAgICAgICBfdGhpcy5vcHRpb25zLmt4bGlzdC5odG1sKGt4X2Vycm9yKTtcclxuICAgICAgICAgICAgaGFuZHJlZnJlc2hidG4ub24oJ2NsaWNrJywgZnVuY3Rpb24oKXtcclxuICAgICAgICAgICAgICAgIF90aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hbHdheXMoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH0pOyAgIFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBrdWFpeHVuO1xyXG59KSgpO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBrdWFpeHVuO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMva3VhaXh1bi9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAgMSIsImZ1bmN0aW9uIGdldFdpbkhlaWdodCgpe1xyXG4gICAgaWYod2luZG93LmlubmVySGVpZ2h0IT0gdW5kZWZpbmVkKXtcclxuICAgICAgICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgICB2YXIgQj0gZG9jdW1lbnQuYm9keSwgRD0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbihELmNsaWVudEhlaWdodCwgQi5jbGllbnRIZWlnaHQpO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxuZnVuY3Rpb24gZWxlbWVudEluVmlldyhlbGVtZW50KSB7XHJcbiAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcclxuICAgIFxyXG4gICAgdmFyIHdpbkhlaWdodCA9IGdldFdpbkhlaWdodCgpO1xyXG5cclxuICAgIHZhciB5SW5WaWV3ID0gcmVjdC50b3AgPCB3aW5IZWlnaHQgJiYgcmVjdC5ib3R0b20gPiAwXHJcbiAgXHJcbiAgICAvLyB2YXIgeEluVmlldyA9IHJlY3QubGVmdCA8IHdpbkhlaWdodCAmJiByZWN0LnJpZ2h0ID4gMFxyXG4gIFxyXG4gICAgcmV0dXJuIHlJblZpZXcgXHJcbiAgfVxyXG5cclxuZnVuY3Rpb24gbGF6eUxvYWQob2JqKXtcclxuICAgICQoJy5sYXp5TG9hZCcpLmVhY2goZnVuY3Rpb24oaW5kZXgpe1xyXG4gICAgICAgIHZhciBpZCA9ICQodGhpcykuYXR0cignaWQnKTtcclxuICAgICAgICB2YXIgJHRoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgIHZhciBpc3ZpZXcgPSBlbGVtZW50SW5WaWV3KHRoaXMpO1xyXG4gICAgICAgIGlmKGlzdmlldyl7XHJcbiAgICAgICAgICAgIGlmICghJHRoaXMuZGF0YSgnbG9hZGVkJykpIHtcclxuICAgICAgICAgICAgICAgICR0aGlzLmRhdGEoJ2xvYWRlZCcsIHRydWUpXHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiB3aW5kb3dbaWRdID09PSAnb2JqZWN0Jyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvd1tpZF0uaW5pdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dbaWRdLmluaXQoaWQsb2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZiB3aW5kb3dbaWRdID09PSAnZnVuY3Rpb24nKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93W2lkXShpZCxvYmopO1xyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcilcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KVxyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmope1xyXG4gICAgbGF6eUxvYWQob2JqKTtcclxuICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxhenlMb2FkKG9iailcclxuICAgIH0pXHJcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL2xhenlMb2FkL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSAzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCAxIiwidmFyIHRhYnMgPSByZXF1aXJlKCcuLi90YWJzJyk7XHJcbnZhciB0b29sID0gcmVxdWlyZSgnLi4vdG9vbCcpO1xyXG52YXIgbmV3QXBpT3B0aW9uID0ge1xyXG4gICAgaW5pdDogZnVuY3Rpb24gKGlkLCBvYmopIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzcGxheSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICB0aGF0LmlzVGFicyA9IHRvb2wuaXNBcnJheShvYmpbaWRdKTsgLy/liKTmlq3mmK/lkKbkuLrlpJrmoIfnrb5cclxuICAgICAgICB0aGF0LmlkID0gaWQ7XHJcbiAgICAgICAgdGhhdC5vYmogPSBvYmo7XHJcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhhdC5yZWZyZXNoKCk7XHJcbiAgICAgICAgaWYgKHRoYXQuaXNUYWJzKSB7XHJcbiAgICAgICAgICAgIHRhYnMoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IFwiI1wiICsgdGhhdC5pZCxcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGF0LnJlZnJlc2goaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICByZWZyZXNoOiBmdW5jdGlvbiAoaW5kZXgpIHtcclxuICAgICAgICBpZiAoaW5kZXggPT0gdW5kZWZpbmVkIHx8IGluZGV4ID09IG51bGwpIHtcclxuICAgICAgICAgICAgaW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgaWYgKHRoYXQuYmVmb3JlTG9hZCkge1xyXG4gICAgICAgICAgICB0aGF0LmJlZm9yZUxvYWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIF91cmwgPSB0aGF0LmlzVGFicyA/IHRoYXQub2JqW3RoYXQuaWRdW2luZGV4XSA6IHRoYXQub2JqW3RoYXQuaWRdO1xyXG5cclxuICAgICAgICB0b29sLmdldERhdGEoX3VybCwgZnVuY3Rpb24gKGpzb24pIHtcclxuICAgICAgICAgICAgdmFyIGh0bWwgPSBcIlwiO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGpzb24ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBkYXRhID0ganNvbltpXTtcclxuICAgICAgICAgICAgICAgIGh0bWwgKz0gdGhhdC5kaXNwbGF5KGRhdGEsaW5kZXgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoYXQuaXNUYWJzKXtcclxuICAgICAgICAgICAgICAgICQoXCIjXCIgKyB0aGF0LmlkICsgXCIgdGFibGU6ZXEoXCIgKyBpbmRleCArIFwiKSB0Ym9keVwiKS5odG1sKGh0bWwpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICQoXCIjXCIrdGhhdC5pZCtcIiB0Ym9keVwiKS5odG1sKGh0bWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGF0LmFmdGVyTG9hZCkge1xyXG4gICAgICAgICAgICAgICAgdGhhdC5hZnRlckxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGF0LnNldFRpbWUoKTtcclxuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUgJiYgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgc2V0VGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcclxuICAgICAgICBpZiAodGhhdC5zZXRJbnRlcikge1xyXG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoYXQuc2V0SW50ZXIpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoYXQuc2V0SW50ZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYodGhhdC5pc1RhYnMpe1xyXG4gICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gJChcIiNcIiArIHRoYXQuaWQgKyBcIiAudGFic19saXN0IC5hY3RpdmVcIikuaW5kZXgoKTtcclxuICAgICAgICAgICAgICAgIHRoYXQucmVmcmVzaChpbmRleCk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdGhhdC5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCA2MDAwMClcclxuICAgIH1cclxufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBuZXdBcGlPcHRpb247XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL2xvYWRPcHRpb24vaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIDEiLCJcclxudmFyIGNvdW50ID0gMDtcclxudmFyIGJlaWppbmdDaHVvID0gJyc7XHJcbnZhciBsb25kb25DaHVvID0gJyc7XHJcbnZhciBuZXd5b3JrQ2h1byA9ICcnO1xyXG52YXIgdGltZXIgPSAnJztcclxuXHJcbnZhciBzZXRUaW1lRm9ybWF0ID0gZnVuY3Rpb24gKG51bSkge1xyXG4gICAgcmV0dXJuIG51bSA+PSAxMCA/IG51bSA6ICcwJyArIG51bSArICcnXHJcbn1cclxuLy9zdHI6MDg6MDA6MDBcclxudmFyIGdldFRpbWVTdGFtcCA9IGZ1bmN0aW9uKHRlbXApe1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB2YXIgaXNNaW51cyA9IGZhbHNlOy8v5piv5ZCm5bCP5LqOMFxyXG4gICAgICAgIGlmKHRlbXAuaW5kZXhPZihcIi1cIikgPj0gMCl7XHJcbiAgICAgICAgICAgIGlzTWludXMgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0ZW1wQXJyID0gdGVtcC5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgdmFyIGhvdXIgPSAgTWF0aC5hYnMocGFyc2VJbnQodGVtcEFyclswXSwxMCkpO1xyXG4gICAgICAgIHZhciBtaW51dGUgPSBwYXJzZUludCh0ZW1wQXJyWzFdLDEwKTtcclxuICAgICAgICB2YXIgc2Vjb25kID0gcGFyc2VJbnQodGVtcEFyclsyXSwxMCk7XHJcblxyXG4gICAgICAgIHZhciByZXMgPSAoaG91ciAqMzYwMCArIG1pbnV0ZSAqIDYwICArIHNlY29uZCAqIDEpKiAxMDAwO1xyXG5cclxuICAgICAgICBpZihpc01pbnVzKXtcclxuICAgICAgICAgICAgcmV0dXJuIDAgLXJlcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5cclxuXHJcbnZhciBEYXRlRm9ybWF0ID0gZnVuY3Rpb24oc3RyLGZvcm1hdCl7XHJcbiAgICB2YXIgdGhhdCA9IG5ldyBEYXRlKHN0cik7XHJcbiAgICB2YXIgbyA9IHtcclxuICAgICAgICBcIk0rXCI6IHRoYXQuZ2V0TW9udGgoKSArIDEsIC8vbW9udGhcclxuICAgICAgICBcImQrXCI6IHRoYXQuZ2V0RGF0ZSgpLCAvL2RheVxyXG4gICAgICAgIFwiaCtcIjogdGhhdC5nZXRIb3VycygpLCAvL2hvdXJcclxuICAgICAgICBcIm0rXCI6IHRoYXQuZ2V0TWludXRlcygpLCAvL21pbnV0ZVxyXG4gICAgICAgIFwicytcIjogdGhhdC5nZXRTZWNvbmRzKCksIC8vc2Vjb25kXHJcbiAgICAgICAgXCJxK1wiOiBNYXRoLmZsb29yKCh0aGF0LmdldE1vbnRoKCkgKyAzKSAvIDMpLCAvL3F1YXJ0ZXJcclxuICAgICAgICBcIlNcIjogdGhhdC5nZXRNaWxsaXNlY29uZHMoKSAvL21pbGxpc2Vjb25kXHJcbiAgICB9XHJcbiAgICBpZiAoLyh5KykvLnRlc3QoZm9ybWF0KSkge1xyXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFJlZ0V4cC4kMSwgKHRoYXQuZ2V0RnVsbFllYXIoKSArIFwiXCIpLnN1YnN0cig0IC0gUmVnRXhwLiQxLmxlbmd0aCkpO1xyXG4gICAgfVxyXG4gICAgZm9yICh2YXIgayBpbiBvKSB7XHJcbiAgICAgICAgaWYgKG5ldyBSZWdFeHAoXCIoXCIgKyBrICsgXCIpXCIpLnRlc3QoZm9ybWF0KSkge1xyXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShSZWdFeHAuJDEsIFJlZ0V4cC4kMS5sZW5ndGggPT0gMSA/IG9ba10gOiAoXCIwMFwiICsgb1trXSkuc3Vic3RyKChcIlwiICsgb1trXSkubGVuZ3RoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdDtcclxufVxyXG5cclxudmFyIGdldEdsb2JhbFRpbWUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAkLmFqYXgoe1xyXG4gICAgICAgIHVybDogJy8vY21zanMuZWFzdG1vbmV5LmNvbS9UaW1lWm9uZS9EZWZhdWx0LmFzcHg/dHlwZT11dGN0aW1lJmlkcz00MSwyLDc4LDUzLDE2JmpuPWVtdXRjJnJ0PTE1MjQ4MTE5ODk0MjInLFxyXG4gICAgICAgIHR5cGU6ICdnZXQnLFxyXG4gICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcclxuICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG5cclxuICAgICAgICAgICAgdmFyIFVUQ1RJTUUgPSBlbXV0Yy5VVENUSU1FO1xyXG4gICAgICAgICAgICB2YXIgR01UID0gZW11dGMuR01UO1xyXG4gICAgICAgICAgICB2YXIgYmpzaGlxdSA9IGdldFRpbWVTdGFtcChHTVRbMF0pOy8v5YyX5LqsXHJcbiAgICAgICAgICAgIHZhciBsZHNoaXF1ID0gZ2V0VGltZVN0YW1wKEdNVFsxXSk7Ly/kvKbmlaZcclxuICAgICAgICAgICAgdmFyIG55c2hpcXUgPSBnZXRUaW1lU3RhbXAoR01UWzJdKTsvL+e6vee6plxyXG4gICAgICAgICAgICB2YXIgeG5zaGlxdSA9IGdldFRpbWVTdGFtcChHTVRbM10pOy8v5oKJ5bC8XHJcbiAgICAgICAgICAgIHZhciBkanNoaXF1ID0gZ2V0VGltZVN0YW1wKEdNVFs0XSk7Ly/kuJzkuqxcclxuXHJcbiAgICAgICAgICAgIGJlaWppbmdDaHVvID0gVVRDVElNRVxyXG4gICAgICAgICAgICBsb25kb25DaHVvID0gVVRDVElNRS0oYmpzaGlxdS1sZHNoaXF1KVxyXG4gICAgICAgICAgICBuZXd5b3JrQ2h1byA9IFVUQ1RJTUUtKGJqc2hpcXUtbnlzaGlxdSlcclxuICAgICAgICAgICAgeGluaUNodW8gPSBVVENUSU1FLShianNoaXF1LXhuc2hpcXUpXHJcbiAgICAgICAgICAgIGRvbmdqaW5nQ2h1byA9IFVUQ1RJTUUtKGJqc2hpcXUtZGpzaGlxdSlcclxuXHJcbiAgICAgICAgICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgJCgnI2dsb2JhbF90aW1lX2JlaWppbmcnKS50ZXh0KCfljJfkuqwgJyArIERhdGVGb3JtYXQoYmVpamluZ0NodW8sXCJNTS1kZCBoaDptbTpzc1wiKSArICcnKTtcclxuICAgICAgICAgICAgICAgICQoJyNnbG9iYWxfdGltZV9sb25kb24nKS50ZXh0KCfkvKbmlaYgJyArIERhdGVGb3JtYXQobG9uZG9uQ2h1byxcIk1NLWRkIGhoOm1tOnNzXCIpICsgJycpO1xyXG4gICAgICAgICAgICAgICAgJCgnI2dsb2JhbF90aW1lX25ld3lvcmsnKS50ZXh0KCfnur3nuqYgJyArIERhdGVGb3JtYXQobmV3eW9ya0NodW8sXCJNTS1kZCBoaDptbTpzc1wiKSArICcnKTtcclxuICAgICAgICAgICAgICAgICQoJyNnbG9iYWxfdGltZV94aW5pJykudGV4dCgn5oKJ5bC8ICcgKyBEYXRlRm9ybWF0KHhpbmlDaHVvLFwiTU0tZGQgaGg6bW06c3NcIikgKyAnJyk7XHJcbiAgICAgICAgICAgICAgICAkKCcjZ2xvYmFsX3RpbWVfZG9uZ2ppbmcnKS50ZXh0KCfkuJzkuqwgJyArIERhdGVGb3JtYXQoZG9uZ2ppbmdDaHVvLFwiTU0tZGQgaGg6bW06c3NcIikgKyAnJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgYmVpamluZ0NodW8rPTEwMDA7XHJcbiAgICAgICAgICAgICAgICBsb25kb25DaHVvKz0xMDAwO1xyXG4gICAgICAgICAgICAgICAgbmV3eW9ya0NodW8rPTEwMDA7XHJcbiAgICAgICAgICAgICAgICB4aW5pQ2h1bys9MTAwMDtcclxuICAgICAgICAgICAgICAgIGRvbmdqaW5nQ2h1bys9MTAwMDtcclxuXHJcbiAgICAgICAgICAgIH0sMTAwMClcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIGJlaWppbmdDaHVvID0gZW11dGMuVVRDVElNRTtcclxuICAgICAgICAgICAgLy8gbG9uZG9uQ2h1byA9IGVtdXRjLlVUQ1RJTUUgLSA4ICogMzYwMDAwMDtcclxuICAgICAgICAgICAgLy8gbmV3eW9ya0NodW8gPSBlbXV0Yy5VVENUSU1FIC0gMTMgKiAzNjAwMDAwO1xyXG4gICAgICAgICAgICAvLyBzZXRUaW1lRGF0YShlbXV0Yyk7XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgZXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgY291bnQrKztcclxuICAgICAgICAgICAgaWYgKGNvdW50ID49IDIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xyXG4gICAgICAgICAgICBnZXRHbG9iYWxUaW1lKCk7XHJcblxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgZ2V0R2xvYmFsVGltZSgpO1xyXG59XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL2dsb2JhbFRpbWUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDZcbi8vIG1vZHVsZSBjaHVua3MgPSAxIiwidmFyIGdldEdsb2JhbFRpbWUgPSByZXF1aXJlKCcuLi9qcy9tb2R1bGVzL2dsb2JhbFRpbWUnKTtcclxudmFyIHRvb2wgPXJlcXVpcmUoJy4vbW9kdWxlcy90b29sJyk7XHJcbnZhciBsYXp5TG9hZCA9IHJlcXVpcmUoJy4vbW9kdWxlcy9sYXp5TG9hZCcpO1xyXG52YXIgbmV3QXBpT3B0aW9uID0gcmVxdWlyZSgnLi9tb2R1bGVzL2xvYWRPcHRpb24vaW5kZXgnKTtcclxudmFyIGt1YWl4dW4gID0gcmVxdWlyZSgnLi9tb2R1bGVzL2t1YWl4dW4nKTtcclxudmFyIGt1YWl4dW4xID0gbnVsbDtcclxuXHJcbnZhciB1cmxPYmogPSB7XHJcbiAgICBnbG9iYWxIcTpcIi8vcHVzaDIuZWFzdG1vbmV5LmNvbS9hcGkvcXQvY2xpc3QvZ2V0P3BpPTAmcHo9MTAmcG89MSZucD0xJmZpZWxkcz1mMSxmMixmMyxmNCxmMTIsZjEzLGYxNCZmbHR0PTImaW52dD0yJnV0PTEzNjk3YTFjYzY3N2M4YmZhOWE0OTY0MzdiZmVmNDE5JmZzPWk6MS4wMDAwMDEsaTowLjM5OTAwMSxpOjEwMC5IU0ksaToxMDAuTjIyNSxpOjEwMC5ESklBLGk6MTAwLk5EWCxpOjEwNC5DTjAwWVwiLFxyXG4gICAgaHl6ZmI6XCIvL3B1c2gyLmVhc3Rtb25leS5jb20vYXBpL3F0L2NsaXN0L2dldD9wbj0xJnB6PTUmcG89MSZucD0xJnV0PTEzNjk3YTFjYzY3N2M4YmZhOWE0OTY0MzdiZmVmNDE5JmZsdHQ9MiZpbnZ0PTImZmlkPWYzJmZzPW06OTArdDoyJmZpZWxkcz1mMyxmNCxmMTIsZjEzLGYxNCxmMTYsZjExLGY2MixmMTUyLGYxMDQsZjEwNVwiLFxyXG4gICAgempscmI6XCIvL3B1c2gyLmVhc3Rtb25leS5jb20vYXBpL3F0L2NsaXN0L2dldD9wbj0xJnB6PTUmcG89MSZucD0xJmZsdHQ9MiZpbnZ0PTImZmlkPWY2MiZmcz1tOjkwK3Q6MiZmaWVsZHM9ZjMsZjQsZjEyLGYxMyxmMTQsZjYyLGYxODQmdXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTlcIlxyXG59XHJcbi8v5YWo55CD5pe26Ze0XHJcbndpbmRvdy5nZXRHbG9iYWxUaW1lID0gZ2V0R2xvYmFsVGltZTtcclxuXHJcbi8vIOWFqOeQg+ihjOaDhVxyXG53aW5kb3cuZ2xvYmFsSHEgPSB7XHJcbiAgICBpbml0OmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIHRoYXQucmVmcmVzaCgpO1xyXG4gICAgICAgIHNldEludGVydmFsKGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgICAgIHRoYXQucmVmcmVzaCgpO1xyXG4gICAgICAgIH0sNjAwMDApXHJcbiAgICAgICAgJCgnI2dsb2JhbEhxJykub24oXCJjbGlja1wiLFwibGlcIixmdW5jdGlvbihldnQpe1xyXG4gICAgICAgICAgICB2YXIgX2hyZWYgPSAkKHRoaXMpLmZpbmQoJy5uYW1lIGEnKS5hdHRyKFwiaHJlZlwiKTtcclxuICAgICAgICAgICAgd2luZG93Lm9wZW4oX2hyZWYpXHJcbiAgICAgICAgICAgIGlmIChldnQucHJldmVudERlZmF1bHQpIHtcclxuICAgICAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpOyAvL+mdnklF5rWP6KeI5ZmoXHJcbiAgICAgICAgIOOAgOOAgH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBldnQucmV0dXJuVmFsdWUgPSBmYWxzZTsgLy/lnKjml6nmnJ/nmoRJReeJiOacrOS4rVxyXG4gICAgICAgIOOAgOOAgH1cclxuICAgICAgICAgICBcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICByZWZyZXNoOmZ1bmN0aW9uKCl7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIHRvb2wuZ2V0RGF0YSh1cmxPYmouZ2xvYmFsSHEsZnVuY3Rpb24oZGF0YSl7XHJcbiAgICAgICAgICAgIHZhciBodG1sID0gXCJcIjtcclxuICAgICAgICAgICAgZm9yKHZhciBpID0gMDtpPGRhdGEubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICBodG1sICs9IHRoYXQubG9hZERhdGEoZGF0YVtpXSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkKCcjZ2xvYmFsSHEnKS5odG1sKGh0bWwpO1xyXG4gICAgICAgIH0sZnVuY3Rpb24oZXJyKXtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKVxyXG4gICAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgbG9hZERhdGE6ZnVuY3Rpb24oaXRlbSl7XHJcbiAgICAgICAgdmFyIF9wcmljZSA9IHRvb2wudG9GaXhlZChpdGVtW1wiZjJcIl0saXRlbVtcImYxXCJdKTsvL+acgOaWsOS7t1xyXG4gICAgICAgIHZhciBfemRmID0gdG9vbC50b1BlcmNlbnQoaXRlbVtcImYzXCJdKTsvL+a2qOi3jOW5hVxyXG4gICAgICAgIHZhciBfemRlID0gdG9vbC50b0ZpeGVkKGl0ZW1bXCJmNFwiXSxpdGVtW1wiZjFcIl0pOy8v5rao6LeM6aKdXHJcbiAgICAgICAgdmFyIF9jb2RlID0gaXRlbVtcImYxMlwiXTsvL+S7o+eggVxyXG4gICAgICAgIHZhciBfbWFya2V0ID0gaXRlbVtcImYxM1wiXTsvL+W4guWcuuWPt1xyXG4gICAgICAgIHZhciBfbmFtZSA9IGl0ZW1bXCJmMTRcIl07Ly/lkI3np7BcclxuICAgICAgICB2YXIgX2xpbmsgPSB0b29sLnF1b3RlTGluayhfY29kZSxfbWFya2V0KTtcclxuICAgICAgICBzd2l0Y2goX2NvZGUpe1xyXG4gICAgICAgICAgICBjYXNlIFwiMDAwMDAxXCI6IF9uYW1lID0gXCLkuIror4HmjIfmlbBcIjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCIzOTkwMDFcIjogX25hbWUgPSBcIua3seivgeaIkOaMh1wiO2JyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiSFNJXCI6IF9uYW1lID0gXCLmgZLnlJ/mjIfmlbBcIjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJOMjI1XCI6IF9uYW1lID0gXCLml6Xnu4/mjIfmlbBcIjsgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJESklBXCI6IF9uYW1lID0gXCLpgZPnkLzmlq/mjIfmlbBcIjsgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiTkRYXCI6IF9uYW1lID0gXCLnurPmlq/ovr7lhYvnu7zlkIjmjIfmlbBcIjsgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiQ04wMFlcIjogX25hbWUgPSBcIkE1MOacn+aMh1wiOyBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGNsYXNzTmFtZSA9IFwiXCI7XHJcbiAgICAgICAgaWYoX3pkZSA+IDApe1xyXG4gICAgICAgICAgICBjbGFzc05hbWUgPSBcInN0b2NrdXBcIlxyXG4gICAgICAgICAgICBfemRlID0gXCIrXCIrX3pkZTtcclxuICAgICAgICAgICAgX3pkZiA9IFwiK1wiK196ZGY7XHJcbiAgICAgICAgfWVsc2UgaWYgKF96ZGUgPCAwKXtcclxuICAgICAgICAgICAgY2xhc3NOYW1lID0gXCJzdG9ja2Rvd25cIlxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaHRtbCA9ICc8bGk+PGRpdj4nK1xyXG4gICAgICAgICAgICAnPHAgY2xhc3M9XCJuYW1lXCI+PGEgaHJlZj1cIicrX2xpbmsrJ1wiIHRhcmdldD1cIl9ibGFua1wiPicrX25hbWUrJzwvYT48L3A+JytcclxuICAgICAgICAgICAgJzxwIGNsYXNzPVwicG9pbnRcIj48c3BhbiBjbGFzcz1cIicrY2xhc3NOYW1lKydcIj4nK19wcmljZSsnPC9zcGFuPic7XHJcbiAgICAgICAgICAgIGlmKGNsYXNzTmFtZSl7XHJcbiAgICAgICAgICAgICAgICBodG1sKz0nPHNwYW4gY2xhc3M9XCJpY29uIGljb25fJytjbGFzc05hbWUrJyB6aGlzaHVpY29uXCI+PC9zcGFuPic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaHRtbCs9ICc8L3A+PHAgY2xhc3M9XCJudW1iZXJcIj48c3BhbiBjbGFzcz1cIm51bSAnK2NsYXNzTmFtZSsnXCI+JytfemRlKyc8L3NwYW4+PHNwYW4gY2xhc3M9XCJwZXJjZW50ICcrY2xhc3NOYW1lKydcIj4nK196ZGYrJzwvc3Bhbj48L3A+PC9kaXY+PC9saT4nO1xyXG4gICAgICAgIHJldHVybiBodG1sO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuLy/lv6vorq9cclxud2luZG93Lmt4U3RhcnQgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmIChrdWFpeHVuMSA9PSBudWxsKSB7XHJcbiAgICAgICAga3VhaXh1bjEgPSBuZXcga3VhaXh1bih7XHJcbiAgICAgICAgICAgIHJlZnJlc2hidG46ICQoJyNreF9yZWZyZXNoX3QnKSxcclxuICAgICAgICAgICAgZm9udHNpemVidG46ICQoJyNreF9zaXplX3QnKSxcclxuICAgICAgICAgICAgYXV0b2J0bjogJCgnI2t4X2F1dG9fdCcpLFxyXG4gICAgICAgICAgICBhdXRvc2VjOiAkKCcja3hfYXV0b19zZWNfdCcpLFxyXG4gICAgICAgICAgICBreGxpc3Q6ICQoJyNreF9saXN0X3QnKSxcclxuICAgICAgICAgICAga3hsb2FkaW5nOiAkKCcja3hfbG9hZGluZ190JyksXHJcbiAgICAgICAgICAgIGt4dHlwZTogJzEwMicsXHJcbiAgICAgICAgICAgIGt4bGluazogJy8vanMxLmVhc3Rtb25leS5jb20vdGcuYXNweD9JRD0zNDkzJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICAgIGt1YWl4dW4xLmluaXQoKTtcclxuICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAga3VhaXh1bjEucmVmcmVzaGNkKCk7XHJcbiAgICAgICB9XHJcbiAgIH1cclxuXHJcbi8v5Liq5oCn5o6o6I2QXHJcbndpbmRvdy5wcmYgPSBmdW5jdGlvbigpe1xyXG4gICAgbmV3IHBlcnNvbmFsUmVjb21tZW5kRih7XHJcbiAgICAgICAgY29udGFpbmVyOidwcmYnLFxyXG4gICAgICAgIGluZGV4MjAxODpmYWxzZSxcclxuICAgICAgICB3aWR0aDoyODAsXHJcbiAgICAgICAgcHJib2R5X2hlaWdodDogNDYwXHJcbiAgICB9KTtcclxufVxyXG5cclxuLy/lm77niYfova7mkq1cclxud2luZG93LnZpZGVvX3NsaWRlID0gZnVuY3Rpb24oKXtcclxuICAgIC8vIGpRdWVyeShcIiNpbWdfc2xpZGVcIikuc2xpZGUoIHsgdGl0Q2VsbDpcIi5oZCBcIixtYWluQ2VsbDpcInVsXCIsZWZmZWN0OidsZWZ0TG9vcCcsYXV0b1BsYXk6ZmFsc2Usc2Nyb2xsOjEsdmlzOjN9KTtcclxuICAgIGpRdWVyeShcIiN2aWRlb19zbGlkZVwiKS5zbGlkZSggeyB0aXRDZWxsOlwiLmhkIFwiLG1haW5DZWxsOlwidWxcIixlZmZlY3Q6J2xlZnRMb29wJyxhdXRvUGxheTpmYWxzZSxzY3JvbGw6MSx2aXM6Nn0pO1xyXG59XHJcblxyXG4vLyDooYzkuJrmtqjluYXmppxcclxudmFyIGh5emZiTG9hZCA9IHtcclxuICAgIGRpc3BsYXk6ZnVuY3Rpb24oZGF0YSl7XHJcbiAgICAgICAgdmFyIGNvbG9yID0gdG9vbC5nZXRDb2xvcihkYXRhLmY0KTtcclxuICAgICAgICB2YXIgaHRtbCA9ICc8dHI+JytcclxuICAgICAgICAnPHRkPjxhIGhyZWY9XCInK3Rvb2wucXVvdGVMaW5rKGRhdGEuZjEyLGRhdGEuZjEzKSsnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArIGRhdGEuZjE0ICsgJzwvYT48L3RkPicgK1xyXG4gICAgICAgICc8dGQ+IDxzcGFuIGNsYXNzPVwiJytjb2xvcisnXCI+JysgIHRvb2wudG9QZXJjZW50KGRhdGEuZjMpICsnPC9zcGFuPjwvdGQ+JytcclxuICAgICAgICAnPHRkPiA8c3BhbiBjbGFzcz1cInJlZFwiPicrICBkYXRhLmYxMDQgKyc8L3NwYW4+PC90ZD4nK1xyXG4gICAgICAgICc8dGQ+IDxzcGFuIGNsYXNzPVwiZ3JlZW5cIj4nKyAgZGF0YS5mMTA1ICsnPC9zcGFuPjwvdGQ+JytcclxuICAgICAgICAnPC90cj4nO1xyXG4gICAgICAgIHJldHVybiBodG1sO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyDotYTph5HmtYHlhaXmppxcclxudmFyIHpqbHJiTG9hZCA9IHtcclxuICAgIGRpc3BsYXk6ZnVuY3Rpb24oZGF0YSl7XHJcbiAgICAgICAgdmFyIGNvbG9yID0gdG9vbC5nZXRDb2xvcihkYXRhLmY0KTtcclxuICAgICAgICB2YXIgaHRtbCA9ICc8dHI+JytcclxuICAgICAgICAnPHRkPjxhIGhyZWY9XCInK3Rvb2wucXVvdGVMaW5rKGRhdGEuZjEyLGRhdGEuZjEzKSsnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArIGRhdGEuZjE0ICsgJzwvYT48L3RkPicgK1xyXG4gICAgICAgICc8dGQ+IDxzcGFuIGNsYXNzPVwiJytjb2xvcisnXCI+JysgIHRvb2wudG9QZXJjZW50KGRhdGEuZjMpICsnPC9zcGFuPjwvdGQ+JytcclxuICAgICAgICAnPHRkPiA8c3Bhbj4nKyAgdG9vbC5GaXhBbXQoZGF0YS5mNjIpICsnPC9zcGFuPjwvdGQ+JytcclxuICAgICAgICAnPHRkPiA8c3Bhbj4nKyB0b29sLnRvUGVyY2VudChkYXRhLmYxODQpICsnPC9zcGFuPjwvdGQ+JytcclxuICAgICAgICAnPC90cj4nO1xyXG4gICAgICAgIHJldHVybiBodG1sO1xyXG4gICAgfVxyXG59XHJcblxyXG5cclxud2luZG93Lmh5emZiID0gdG9vbC5DbG9uZU9iaihuZXdBcGlPcHRpb24saHl6ZmJMb2FkKTtcclxud2luZG93LnpqbHJiID0gdG9vbC5DbG9uZU9iaihuZXdBcGlPcHRpb24sempscmJMb2FkKTtcclxuXHJcbi8v5p2C5b+X6L2u5pKtXHJcbndpbmRvdy5tYWdhemluZSA9IGZ1bmN0aW9uKCl7XHJcbiAgICBqUXVlcnkoXCIubWFnYXppbmVfc3dpcGVyXCIpLnNsaWRlKCB7IHRpdENlbGw6XCIuaGQgXCIsbWFpbkNlbGw6XCJ1bC5zd2lwZXJfY29uXCIsZWZmZWN0OidsZWZ0TG9vcCcsYXV0b1BsYXk6dHJ1ZSxzY3JvbGw6MSx2aXM6Nn0pO1xyXG59XHJcblxyXG4kKGZ1bmN0aW9uKCl7XHJcbiAgICBsYXp5TG9hZCh1cmxPYmopO1xyXG5cclxuICAgICQoJy5pTmV3cycpLmVhY2goZnVuY3Rpb24oaSl7XHJcbiAgICAgICAgdmFyICR0aGlzID0gJCh0aGlzKTtcclxuICAgICAgICB2YXIgJHRpdGxlID0gJHRoaXMuZmluZChcIi5maXJzdCAudGl0bGVcIik7XHJcbiAgICAgICAgdmFyICRpbmZvID0gJHRoaXMuZmluZChcIi5maXJzdCAuaW5mb1wiKTtcclxuICAgICAgICBcclxuICAgICAgICB2YXIgdGl0bGVfaGVpZ2h0ID0gJHRpdGxlLmhlaWdodCgpO1xyXG4gICAgICAgIHZhciB0aXRsZV9saW5lX2hlaWdodCA9IHBhcnNlRmxvYXQoJHRpdGxlLmNzcyhcImxpbmUtaGVpZ2h0XCIpKVxyXG4gICAgICAgIGlmKHRpdGxlX2hlaWdodCA+IHRpdGxlX2xpbmVfaGVpZ2h0ICsgMSl7XHJcbiAgICAgICAgICAgICRpbmZvLmFkZENsYXNzKFwidHdvbGluZVwiKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9KVxyXG5cclxuICAgIGlmKHR5cGVvZiBzdWdnZXN0MjAxNyAhPSBcInVuZGVmaW5lZFwiKXtcclxuICAgICAgICBuZXcgc3VnZ2VzdDIwMTcoeyAvL+aWsOW7uuWunuS+i1xyXG4gICAgICAgICAgICBpbnB1dGlkOiAnY29kZV9zdWdnZXN0JywgLy/lj4LmlbDpg6jliIZcclxuICAgICAgICAgICAgc2hvd25ld3RpcHM6dHJ1ZSxcclxuICAgICAgICAgICAgb2Zmc2V0OiB7XHJcbiAgICAgICAgICAgICAgICBsZWZ0OiAtNDYsXHJcbiAgICAgICAgICAgICAgICB0b3A6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbmV3dGlwc29mZnNldDp7bGVmdDoxMCwgdG9wOjF9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICAgIFxyXG4gICAgJChcIi5waWNfc3dpcGVyXCIpLnNsaWRlKCB7XHJcbiAgICAgICAgdGl0Q2VsbDogXCIuaGQgdWxcIixcclxuICAgICAgICBtYWluQ2VsbDogXCIuYmQgdWxcIixcclxuICAgICAgICBlZmZlY3Q6IFwibGVmdExvb3BcIixcclxuICAgICAgICBhdXRvUGxheTogdHJ1ZSxcclxuICAgICAgICBhdXRvUGFnZTogdHJ1ZVxyXG4gICAgfSk7XHJcbiAgICBcclxufSlcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL2ZpbmFuY2UuanNcbi8vIG1vZHVsZSBpZCA9IDExXG4vLyBtb2R1bGUgY2h1bmtzID0gMSJdLCJzb3VyY2VSb290IjoiIn0="],"names":["modules","installedModules","__webpack_require__","moduleId","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","tabsMoveChange","element","$this","$","setTime","each","this","tabsList","tabsMoreItem","tabsPannel","on","that","setTimeout","index","href","find","attr","addClass","siblings","removeClass","length","eq","show","hide","fadeIn","window","clearTimeout","subTabsMove","subTabsList","subTabsItem","slef","tabsMouseTable","eleId","callback","_self","hasClass","id","data","children","split","fid","po","beforeLoad","refresh","replaceId","str","replace","error","getData","url","success","fail","ajax","type","dataType","jsonp","json","diff","err","getOldData","suc","getTextValOrEmpty","undefined","getColorByDate","num","fix","divide","isNaN","parseFloat","retult","parseInt","toFixed","FixAmt","ride","intStr","Math","abs","toString","FixAmtPrice","toPercent","getColor","quoteLink","code","market","CloneObj","common","obj","key","newObj","extend","isArray","option","tabList","tabListTarget","tabsMore","tabsMoreTarget","tabsItem","activeClass","touches","delayTime","jQuery","kuaixun","init","options","autosec","text","refreshtime","bind","refreshcd","_this","refreshbtn","autobtn","thisbtn","is","isautocd","clearInterval","cdci","fontsizebtn","fontsize","kxlist","css","iskxshow","setInterval","oldTime","stopRefresh","kxloading","jsonpCallback","kxtype","scriptCharset","cache","column","limit","done","news","_kxhtml","push","aurl","url_w","url_unique","indexOf","showtime","substring","_kx_digest","digest","title","newstype","topic","As_URL","_kx_style","titlestyle","kxlink","html","join","kx_error","handrefreshbtn","append","always","elementInView","rect","getBoundingClientRect","winHeight","innerHeight","B","document","body","D","documentElement","min","clientHeight","getWinHeight","top","bottom","lazyLoad","isview","scroll","tabs","tool","newApiOption","display","isTabs","created","_url","afterLoad","console","setInter","count","beijingChuo","londonChuo","newyorkChuo","timer","getTimeStamp","temp","isMinus","tempArr","res","DateFormat","format","k","Date","M+","getMonth","d+","getDate","h+","getHours","m+","getMinutes","s+","getSeconds","q+","floor","S","getMilliseconds","test","RegExp","$1","getFullYear","substr","getGlobalTime","UTCTIME","emutc","GMT","bjshiqu","ldshiqu","nyshiqu","xnshiqu","djshiqu","xiniChuo","dongjingChuo","complete","kuaixun1","urlObj","globalHq","hyzfb","zjlrb","evt","_href","open","preventDefault","returnValue","loadData","item","_price","_zdf","_zde","_code","_market","_name","_link","className","kxStart","prf","personalRecommendF","container","index2018","width","prbody_height","video_slide","slide","titCell","mainCell","effect","autoPlay","vis","hyzfbLoad","color","f4","f12","f13","f14","f3","f104","f105","zjlrbLoad","f62","f184","magazine","$title","$info","title_height","height","suggest2017","inputid","shownewtips","offset","left","newtipsoffset","autoPage"],"mappings":"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"}