269 lines
36 KiB
JavaScript
269 lines
36 KiB
JavaScript
|
|
(function() {
|
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
|
var __module = nodeEnv ? module : {exports:{}};
|
|
var __filename = 'preview-scripts/assets/Script/tool/GameTool.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, 'ddac3ZC+9pHQr0Fs9IIhw4a', 'GameTool');
|
|
// Script/tool/GameTool.ts
|
|
|
|
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.GameTool = void 0;
|
|
var GameData_1 = require("../GameData");
|
|
//最大工具类
|
|
var GameTool = {
|
|
_startTime: 0,
|
|
_endTime: 0,
|
|
_totalTime: 0,
|
|
getSeedRandom: function (min, max) {
|
|
max = max || 1;
|
|
min = min || 0;
|
|
GameData_1.default._instance.GM_INFO.currSeed = (GameData_1.default._instance.GM_INFO.currSeed * 9301 + 49297) % 233280;
|
|
var rnd = GameData_1.default._instance.GM_INFO.currSeed / 233280.0;
|
|
var tmp = min + rnd * (max - min);
|
|
return Math.floor(tmp);
|
|
},
|
|
getSetScreenResolutionFlag: function () {
|
|
var size = cc.winSize;
|
|
var width = size.width;
|
|
var height = size.height;
|
|
if ((height / width) > (16.2 / 9))
|
|
return false;
|
|
return true;
|
|
},
|
|
//判断全面屏适配
|
|
setFit: function (canvas) {
|
|
var flag = GameTool.getSetScreenResolutionFlag();
|
|
if (flag) {
|
|
// console.log("不是全面屏");
|
|
// canvas.fitWidth = false;
|
|
// canvas.fitHeight = true;
|
|
}
|
|
else {
|
|
// console.log("是全面屏");
|
|
// canvas.fitWidth = true;
|
|
// canvas.fitHeight = false;
|
|
}
|
|
return flag;
|
|
},
|
|
getTip: function () {
|
|
var index = Math.floor(Math.random() * 4) + 1;
|
|
switch (index) {
|
|
case 1: {
|
|
return "根据小球的位置,合理晃动手机,确保小球不掉出木板。";
|
|
}
|
|
case 2: {
|
|
return "根据小球位置控制晃动幅度,过大或过小都不是个好选择。";
|
|
}
|
|
case 3: {
|
|
return "不要被天上掉落的障碍吓到,有时候它反而会帮你保持平衡。";
|
|
}
|
|
case 4: {
|
|
return "尝试着顶开掉落的障碍,是个很酷的玩法。";
|
|
}
|
|
}
|
|
},
|
|
beginTiming: function () {
|
|
this._startTime = new Date().getTime();
|
|
},
|
|
endTiming: function () {
|
|
this._endTime = new Date().getTime();
|
|
// this._totalTime = endTime - this._startTime;
|
|
},
|
|
//如果是判断时常的游戏 调用此方法
|
|
updateScoreTime: function () {
|
|
var endTime = new Date().getTime();
|
|
var tempTime = endTime - this._startTime;
|
|
if (tempTime < 0 || tempTime > 500) {
|
|
tempTime = Math.round(cc.director.getAnimationInterval() * 1000);
|
|
}
|
|
this._endTime += tempTime / 1000;
|
|
this._totalTime = this._endTime.toFixed(2);
|
|
GameData_1.default._instance.GM_INFO.currScore = this._totalTime;
|
|
this._startTime = endTime;
|
|
},
|
|
//倒计时调用此方法
|
|
countDown: function () {
|
|
this._endTime = new Date().getTime();
|
|
this._totalTime = Math.floor((this._endTime - this._startTime) / 1000);
|
|
GameData_1.default._instance.GM_INFO.remainingTime = GameData_1.default._instance.GM_INFO.totalTime - this._totalTime;
|
|
},
|
|
getGameInfo: function (node) {
|
|
var jg = false;
|
|
return jg;
|
|
},
|
|
//根据服务器数据重置所需要所有数据
|
|
reset: function () {
|
|
console.log("本地数据丢失,重新启动游戏");
|
|
cc.director.loadScene('LoadScene');
|
|
},
|
|
setGameInfo: function (pd) {
|
|
},
|
|
//输入秒,返回需要展示时间格式
|
|
getTimeMargin: function (second) {
|
|
var total = second;
|
|
var hour = Math.floor(total / (60 * 60)); //计算整数小时数
|
|
var afterHour = total - hour * 60 * 60; //取得算出小时数后剩余的秒数
|
|
var min = Math.floor(afterHour / 60); //计算整数分
|
|
var afterMin = total - hour * 60 * 60 - min * 60; //取得算出分后剩余的秒数
|
|
return '剩余:' + hour + ':' + min + ':' + afterMin;
|
|
},
|
|
getTimeMargin2: function (second) {
|
|
var total = second;
|
|
var min = null;
|
|
var afterMin = null;
|
|
var hour = Math.floor(total / (60 * 60)); //计算整数小时数
|
|
var afterHour = total - hour * 60 * 60; //取得算出小时数后剩余的秒数
|
|
min = Math.floor(afterHour / 60); //计算整数分
|
|
if (min < 10)
|
|
min = "0" + min;
|
|
afterMin = total - hour * 60 * 60 - min * 60; //取得算出分后剩余的秒数
|
|
if (afterMin < 10)
|
|
afterMin = "0" + afterMin;
|
|
return '剩余:' + min + ':' + afterMin;
|
|
},
|
|
setFrindBlock: function (userid) {
|
|
},
|
|
//将时间转换为59:23
|
|
getTime: function (time) {
|
|
var label = "";
|
|
var number_1 = null;
|
|
var number_2 = null;
|
|
number_1 = Math.floor(time / 60);
|
|
number_2 = time - number_1 * 60;
|
|
if (number_1 < 10) {
|
|
number_1 = "0" + number_1;
|
|
}
|
|
if (number_2 < 10) {
|
|
number_2 = "0" + number_2;
|
|
}
|
|
label = number_1 + ":" + number_2;
|
|
return label;
|
|
},
|
|
//number 为传进来的数值,type为最多显示几位数
|
|
getNumber: function (number, type) {
|
|
// console.log(type,"需要转换的数字为:",number);
|
|
var count = 1000;
|
|
var place = type - 3;
|
|
if (number > Math.pow(count, 8) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 8) < 100)
|
|
number = Math.floor(number / Math.pow(count, 8) * 10) / 10 + "S";
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 8)) + "S";
|
|
}
|
|
else if (number > Math.pow(count, 7) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 7) < 100)
|
|
number = Math.floor(number / Math.pow(count, 7) * 10) / 10 + "s";
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 7)) + "s";
|
|
}
|
|
else if (number > Math.pow(count, 6) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 6) < 100)
|
|
number = Math.floor(number / Math.pow(count, 6) * 10) / 10 + "Q";
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 6)) + "Q";
|
|
}
|
|
else if (number > Math.pow(count, 5) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 5) < 100)
|
|
number = Math.floor(number / Math.pow(count, 5) * 10) / 10 + "q";
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 5)) + "q";
|
|
}
|
|
else if (number > Math.pow(count, 4) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 4) < 100)
|
|
number = Math.floor(number / Math.pow(count, 4) * 10) / 10 + "t";
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 4)) + "t";
|
|
}
|
|
else if (number > Math.pow(count, 3) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 3) < 100)
|
|
number = Math.floor(number / Math.pow(count, 3) * 10) / 10 + "b";
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 3)) + "b";
|
|
}
|
|
else if (number > Math.pow(count, 2) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 2) < 100)
|
|
number = Math.floor(number / Math.pow(count, 2) * 10) / 10 + "m";
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 2)) + "m";
|
|
}
|
|
else if (number > Math.pow(count, 1) * Math.pow(10, place)) {
|
|
if (number / Math.pow(count, 1) < 100) {
|
|
number = Math.floor(number / Math.pow(count, 1) * 10) / 10 + "k";
|
|
}
|
|
else
|
|
number = Math.floor(number / Math.pow(count, 1)) + "k";
|
|
}
|
|
else {
|
|
number = Math.floor(number / Math.pow(count, 0)) + "";
|
|
}
|
|
// console.log("结果为"+type+"位数",number);
|
|
return number;
|
|
},
|
|
begainTiming: function () {
|
|
this._startTime = new Date().getTime();
|
|
},
|
|
endTiming2: function () {
|
|
var endTime = new Date().getTime();
|
|
this._endTime = endTime;
|
|
this._totalTime = endTime - this._startTime;
|
|
},
|
|
getScoreTime: function () {
|
|
var endTime = new Date().getTime();
|
|
var tempTime = endTime - this._startTime;
|
|
if (tempTime < 0 || tempTime > 500) {
|
|
tempTime = Math.round(cc.director.getAnimationInterval() * 1000);
|
|
}
|
|
GameData_1.default._instance.GM_INFO.currScore += tempTime;
|
|
this._startTime = endTime;
|
|
},
|
|
getFormatTime: function (time) {
|
|
var date = new Date();
|
|
date.setTime(time);
|
|
var ms = date.getMilliseconds();
|
|
// let msString = date.getMilliseconds();
|
|
var msString = null;
|
|
var secondString = null;
|
|
var minString = null;
|
|
msString = Math.floor(ms / 10) % 100;
|
|
secondString = date.getSeconds();
|
|
minString = date.getMinutes();
|
|
if (msString < 10) {
|
|
msString = "0" + msString;
|
|
}
|
|
if (secondString < 10) {
|
|
secondString = "0" + secondString;
|
|
}
|
|
secondString = secondString + ":";
|
|
if (minString < 10) {
|
|
minString = "0" + minString;
|
|
}
|
|
minString = minString + ":";
|
|
return minString + secondString + msString;
|
|
},
|
|
pushLister: function () {
|
|
},
|
|
removeAllLister: function () {
|
|
},
|
|
};
|
|
exports.GameTool = GameTool;
|
|
|
|
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFx0b29sXFxHYW1lVG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx3Q0FBbUM7QUFFbkMsT0FBTztBQUNQLElBQUksUUFBUSxHQUFHO0lBQ1gsVUFBVSxFQUFFLENBQUM7SUFDYixRQUFRLEVBQUUsQ0FBQztJQUNYLFVBQVUsRUFBRSxDQUFDO0lBQ2IsYUFBYSxFQUFFLFVBQVUsR0FBRyxFQUFFLEdBQUc7UUFDN0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDZixHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNmLGtCQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsQ0FBQyxrQkFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDcEcsSUFBSSxHQUFHLEdBQUcsa0JBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDekQsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVELDBCQUEwQixFQUFFO1FBQ3hCLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDdEIsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN2QixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDaEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUNE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LENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBQyxLQUFLLENBQUMsRUFBQztZQUM3QyxJQUFHLE1BQU0sR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsR0FBRyxHQUFHO2dCQUM3QixNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEdBQUMsRUFBRSxDQUFDLEdBQUMsRUFBRSxHQUFDLEdBQUcsQ0FBQzs7Z0JBRXhELE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLEdBQUcsQ0FBQztTQUN6RDthQUNJLElBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFDLEtBQUssQ0FBQyxFQUFDO1lBQ2xELElBQUcsTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUc7Z0JBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUMsR0FBQyxFQUFFLEdBQUMsR0FBRyxDQUFDOztnQkFFeEQsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsR0FBRyxDQUFDO1NBQ3pEO2FBQ0ksSUFBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLEdBQUcs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LENBQUMsVUFBVSxFQUFFLENBQUM7UUFDakMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUM5QixJQUFJLFFBQVEsR0FBRyxFQUFFLEVBQUU7WUFDZixRQUFRLEdBQUcsR0FBRyxHQUFHLFFBQVEsQ0FBQztTQUM3QjtRQUNELElBQUksWUFBWSxHQUFHLEVBQUUsRUFBRTtZQUNuQixZQUFZLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQztTQUNyQztRQUNELFlBQVksR0FBRyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBRWxDLElBQUksU0FBUyxHQUFHLEVBQUUsRUFBRTtZQUNoQixTQUFTLEdBQUcsR0FBRyxHQUFHLFNBQVMsQ0FBQztTQUMvQjtRQUNELFNBQVMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQzVCLE9BQU8sU0FBUyxHQUFHLFlBQVksR0FBRyxRQUFRLENBQUM7SUFFL0MsQ0FBQztJQUNELFVBQVUsRUFBQztJQUVYLENBQUM7SUFDRCxlQUFlLEVBQUM7SUFFaEIsQ0FBQztDQUVKLENBQUM7QUFDTyw0QkFBUSIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHYW1lRGF0YSBmcm9tIFwiLi4vR2FtZURhdGFcIjtcclxuaW1wb3J0IHsgU3RvcmFnZU1lc3NhZ2UgfSBmcm9tIFwiLi9TdG9yYWdlXCI7XHJcbi8v5pyA5aSn5bel5YW357G7XHJcbnZhciBHYW1lVG9vbCA9IHtcclxuICAgIF9zdGFydFRpbWU6IDAsXHJcbiAgICBfZW5kVGltZTogMCxcclxuICAgIF90b3RhbFRpbWU6IDAsXHJcbiAgICBnZXRTZWVkUmFuZG9tOiBmdW5jdGlvbiAobWluLCBtYXgpIHsvL+WMheWQq21pbiDkuI3ljIXlkKttYXhcclxuICAgICAgICBtYXggPSBtYXggfHwgMTtcclxuICAgICAgICBtaW4gPSBtaW4gfHwgMDtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5jdXJyU2VlZCA9IChHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5jdXJyU2VlZCAqIDkzMDEgKyA0OTI5NykgJSAyMzMyODA7XHJcbiAgICAgICAgbGV0IHJuZCA9IEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmN1cnJTZWVkIC8gMjMzMjgwLjA7XHJcbiAgICAgICAgbGV0IHRtcCA9IG1pbiArIHJuZCAqIChtYXggLSBtaW4pO1xyXG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRtcCk7XHJcbiAgICB9LFxyXG4gICAgXHJcbiAgICBnZXRTZXRTY3JlZW5SZXNvbHV0aW9uRmxhZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBzaXplID0gY2Mud2luU2l6ZTtcclxuICAgICAgICBsZXQgd2lkdGggPSBzaXplLndpZHRoO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSBzaXplLmhlaWdodDtcclxuICAgICAgICBpZiAoKGhlaWdodCAvIHdpZHRoKSA+ICgxNi4yIC8gOSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0sXHJcbiAgICAvL+WIpOaWreWFqOmdouWxj+mAgumFjVxyXG4gICAgc2V0Rml0OiBmdW5jdGlvbiAoY2FudmFzKSB7XHJcbiAgICAgICAgbGV0IGZsYWcgPSBHYW1lVG9vbC5nZXRTZXRTY3JlZW5SZXNvbHV0aW9uRmxhZygpO1xyXG4gICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgXHQvLyBjb25zb2xlLmxvZyhcIuS4jeaYr+WFqOmdouWxj1wiKTtcclxuICAgICAgICAgICAgLy8gY2FudmFzLmZpdFdpZHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIGNhbnZhcy5maXRIZWlnaHQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHQvLyBjb25zb2xlLmxvZyhcIuaYr+WFqOmdouWxj1wiKTtcclxuICAgICAgICAgICAgLy8gY2FudmFzLmZpdFdpZHRoID0gdHJ1ZTtcclxuICAgICAgICAgICAgLy8gY2FudmFzLmZpdEhlaWdodCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmxhZztcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0VGlwOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCkgKyAxO1xyXG4gICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcclxuICAgICAgICAgICAgY2FzZSAxOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCLmoLnmja7lsI/nkIPnmoTkvY3nva7vvIzlkIjnkIbmmYPliqjmiYvmnLrvvIznoa7kv53lsI/nkIPkuI3mjonlh7rmnKjmnb/jgIJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgMjoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwi5qC55o2u5bCP55CD5L2N572u5o6n5Yi25pmD5Yqo5bmF5bqm77yM6L+H5aSn5oiW6L+H5bCP6YO95LiN5piv5Liq5aW96YCJ5oup44CCXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIDM6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIuS4jeimgeiiq+WkqeS4iuaOieiQveeahOmanOeijeWQk+WIsO+8jOacieaXtuWAmeWug+WPjeiAjOS8muW4ruS9oOS/neaMgeW5s+ihoeOAglwiXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSA0OiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCLlsJ3or5XnnYDpobblvIDmjonokL3nmoTpmpznoo3vvIzmmK/kuKrlvojphbfnmoTnjqnms5XjgIJcIlxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICBiZWdpblRpbWluZzogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRoaXMuX3N0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgfSxcclxuXHJcbiAgICBlbmRUaW1pbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9lbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgLy8gdGhpcy5fdG90YWxUaW1lID0gZW5kVGltZSAtIHRoaXMuX3N0YXJ0VGltZTtcclxuICAgIH0sXHJcbiAgICAvL+WmguaenOaYr+WIpOaWreaXtuW4uOeahOa4uOaIjyDosIPnlKjmraTmlrnms5VcclxuICAgIHVwZGF0ZVNjb3JlVGltZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgbGV0IHRlbXBUaW1lID0gZW5kVGltZSAtIHRoaXMuX3N0YXJ0VGltZTtcclxuICAgICAgICBpZiAodGVtcFRpbWUgPCAwIHx8IHRlbXBUaW1lID4gNTAwKSB7XHJcbiAgICAgICAgICAgIHRlbXBUaW1lID0gTWF0aC5yb3VuZChjYy5kaXJlY3Rvci5nZXRBbmltYXRpb25JbnRlcnZhbCgpICogMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2VuZFRpbWUgKz0gdGVtcFRpbWUgLyAxMDAwO1xyXG4gICAgICAgIHRoaXMuX3RvdGFsVGltZSA9IHRoaXMuX2VuZFRpbWUudG9GaXhlZCgyKTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5jdXJyU2NvcmUgPSB0aGlzLl90b3RhbFRpbWU7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gZW5kVGltZTtcclxuICAgIH0sXHJcbiAgICAvL+WAkuiuoeaXtuiwg+eUqOatpOaWueazlVxyXG4gICAgY291bnREb3duOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdGhpcy5fZW5kVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIHRoaXMuX3RvdGFsVGltZSA9IE1hdGguZmxvb3IoKHRoaXMuX2VuZFRpbWUgLSB0aGlzLl9zdGFydFRpbWUpIC8gMTAwMCk7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ucmVtYWluaW5nVGltZSA9IEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnRvdGFsVGltZSAtIHRoaXMuX3RvdGFsVGltZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0R2FtZUluZm86IGZ1bmN0aW9uKG5vZGUpe1xyXG4gICAgICAgIHZhciBqZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBqZztcclxuICAgIH0sXHJcbiAgICAvL+agueaNruacjeWKoeWZqOaVsOaNrumHjee9ruaJgOmcgOimgeaJgOacieaVsOaNrlxyXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKCl7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCLmnKzlnLDmlbDmja7kuKLlpLEs6YeN5paw5ZCv5Yqo5ri45oiPXCIpO1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZSgnTG9hZFNjZW5lJyk7XHJcbiAgICB9LFxyXG5cclxuICAgIHNldEdhbWVJbmZvOiBmdW5jdGlvbihwZCl7XHJcbiAgIFxyXG4gICAgfSxcclxuICAgIC8v6L6T5YWl56eSLOi/lOWbnumcgOimgeWxleekuuaXtumXtOagvOW8j1xyXG4gICAgZ2V0VGltZU1hcmdpbjooc2Vjb25kKSA9PiB7XHJcbiAgICAgICAgbGV0IHRvdGFsID0gc2Vjb25kO1xyXG4gICAgICAgIGxldCBob3VyID0gTWF0aC5mbG9vcih0b3RhbCAvICg2MCAqIDYwKSk7Ly/orqHnrpfmlbTmlbDlsI/ml7bmlbBcclxuICAgICAgICBsZXQgYWZ0ZXJIb3VyID0gdG90YWwgLSBob3VyICogNjAgKiA2MDsvL+WPluW+l+eul+WHuuWwj+aXtuaVsOWQjuWJqeS9meeahOenkuaVsFxyXG4gICAgICAgIGxldCBtaW4gPSBNYXRoLmZsb29yKGFmdGVySG91ciAvIDYwKTsvL+iuoeeul+aVtOaVsOWIhlxyXG4gICAgICAgIGxldCBhZnRlck1pbiA9IHRvdGFsIC0gaG91ciAqIDYwICogNjAgLSBtaW4gKiA2MDsvL+WPluW+l+eul+WHuuWIhuWQjuWJqeS9meeahOenkuaVsFxyXG4gICAgICAgIHJldHVybiAn5Ymp5L2ZOicgKyBob3VyICsgJzonICsgbWluICsgJzonICsgYWZ0ZXJNaW5cclxuICAgIH0sXHJcblxyXG4gICAgZ2V0VGltZU1hcmdpbjI6KHNlY29uZCkgPT4ge1xyXG4gICAgICAgIGxldCB0b3RhbCA9IHNlY29uZDtcclxuICAgICAgICBsZXQgbWluID0gbnVsbDtcclxuICAgICAgICBsZXQgYWZ0ZXJNaW4gPSBudWxsO1xyXG4gICAgICAgIGxldCBob3VyID0gTWF0aC5mbG9vcih0b3RhbCAvICg2MCAqIDYwKSk7Ly/orqHnrpfmlbTmlbDlsI/ml7bmlbBcclxuICAgICAgICBsZXQgYWZ0ZXJIb3VyID0gdG90YWwgLSBob3VyICogNjAgKiA2MDsvL+WPluW+l+eul+WHuuWwj+aXtuaVsOWQjuWJqeS9meeahOenkuaVsFxyXG4gICAgICAgIG1pbiA9IE1hdGguZmxvb3IoYWZ0ZXJIb3VyIC8gNjApOy8v6K6h566X5pW05pWw5YiGXHJcbiAgICAgICAgaWYobWluIDwgMTApIG1pbiA9IFwiMFwiK21pbjtcclxuICAgICAgICBhZnRlck1pbiA9IHRvdGFsIC0gaG91ciAqIDYwICogNjAgLSBtaW4gKiA2MDsvL+WPluW+l+eul+WHuuWIhuWQjuWJqeS9meeahOenkuaVsFxyXG4gICAgICAgIGlmKGFmdGVyTWluIDwgMTApIGFmdGVyTWluID0gXCIwXCIgKyBhZnRlck1pbjtcclxuICAgICAgICByZXR1cm4gJ+WJqeS9mTonICArIG1pbiArICc6JyArIGFmdGVyTWluXHJcbiAgICB9LFxyXG5cclxuICAgIHNldEZyaW5kQmxvY2s6IGZ1bmN0aW9uKHVzZXJpZCl7XHJcblxyXG4gICAgfSxcclxuICAgIC8v5bCG5pe26Ze06L2s5o2i5Li6NTk6MjNcclxuICAgIGdldFRpbWU6IGZ1bmN0aW9uKHRpbWUpe1xyXG4gICAgICAgIHZhciBsYWJlbCA9IFwiXCI7XHJcbiAgICAgICAgdmFyIG51bWJlcl8xID0gbnVsbDtcclxuICAgICAgICB2YXIgbnVtYmVyXzIgPSBudWxsO1xyXG4gICAgICAgIG51bWJlcl8xID0gTWF0aC5mbG9vcih0aW1lLzYwKVxyXG4gICAgICAgIG51bWJlcl8yID0gdGltZS1udW1iZXJfMSo2MDtcclxuICAgICAgICBpZihudW1iZXJfMSA8IDEwKXtcclxuICAgICAgICAgICAgbnVtYmVyXzEgPSBcIjBcIitudW1iZXJfMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYobnVtYmVyXzIgPCAxMCl7XHJcbiAgICAgICAgICAgIG51bWJlcl8yID0gXCIwXCIrbnVtYmVyXzI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxhYmVsID0gbnVtYmVyXzEgKyBcIjpcIiArIG51bWJlcl8yO1xyXG4gICAgICAgIHJldHVybiBsYWJlbDtcclxuICAgIH0sXHJcbiAgICAvL251bWJlciDkuLrkvKDov5vmnaXnmoTmlbDlgLwsdHlwZeS4uuacgOWkmuaYvuekuuWHoOS9jeaVsFxyXG4gICAgZ2V0TnVtYmVyOiBmdW5jdGlvbihudW1iZXIsdHlwZSl7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codHlwZSxcIumcgOimgei9rOaNoueahOaVsOWtl+S4ujpcIixudW1iZXIpO1xyXG4gICAgICAgIHZhciBjb3VudCA9IDEwMDA7XHJcbiAgICAgICAgdmFyIHBsYWNlID0gdHlwZSAtIDM7XHJcbiAgICAgICAgaWYobnVtYmVyID4gTWF0aC5wb3coY291bnQsOCkqTWF0aC5wb3coMTAscGxhY2UpKXtcclxuICAgICAgICAgICAgaWYobnVtYmVyL01hdGgucG93KGNvdW50LDgpIDwgMTAwKVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsOCkqMTApLzEwK1wiU1wiO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBNYXRoLmZsb29yKG51bWJlci9NYXRoLnBvdyhjb3VudCw4KSkrXCJTXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYobnVtYmVyID4gTWF0aC5wb3coY291bnQsNykqTWF0aC5wb3coMTAscGxhY2UpKXtcclxuICAgICAgICAgICAgaWYobnVtYmVyL01hdGgucG93KGNvdW50LDcpIDwgMTAwKVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsNykqMTApLzEwK1wic1wiO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBNYXRoLmZsb29yKG51bWJlci9NYXRoLnBvdyhjb3VudCw3KSkrXCJzXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYobnVtYmVyID4gTWF0aC5wb3coY291bnQsNikqTWF0aC5wb3coMTAscGxhY2UpKXtcclxuICAgICAgICAgICAgaWYobnVtYmVyL01hdGgucG93KGNvdW50LDYpIDwgMTAwKVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsNikqMTApLzEwK1wiUVwiO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBNYXRoLmZsb29yKG51bWJlci9NYXRoLnBvdyhjb3VudCw2KSkrXCJRXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYobnVtYmVyID4gTWF0aC5wb3coY291bnQsNSkqTWF0aC5wb3coMTAscGxhY2UpKXtcclxuICAgICAgICAgICAgaWYobnVtYmVyL01hdGgucG93KGNvdW50LDUpIDwgMTAwKVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsNSkqMTApLzEwK1wicVwiO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBNYXRoLmZsb29yKG51bWJlci9NYXRoLnBvdyhjb3VudCw1KSkrXCJxXCI7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKG51bWJlciA+IE1hdGgucG93KGNvdW50LDQpKk1hdGgucG93KDEwLHBsYWNlKSl7XHJcbiAgICAgICAgICAgIGlmKG51bWJlci9NYXRoLnBvdyhjb3VudCw0KSA8IDEwMClcclxuICAgICAgICAgICAgICAgIG51bWJlciA9IE1hdGguZmxvb3IobnVtYmVyL01hdGgucG93KGNvdW50LDQpKjEwKS8xMCtcInRcIjtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsNCkpK1widFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKG51bWJlciA+IE1hdGgucG93KGNvdW50LDMpKk1hdGgucG93KDEwLHBsYWNlKSl7XHJcbiAgICAgICAgICAgIGlmKG51bWJlci9NYXRoLnBvdyhjb3VudCwzKSA8IDEwMClcclxuICAgICAgICAgICAgICAgIG51bWJlciA9IE1hdGguZmxvb3IobnVtYmVyL01hdGgucG93KGNvdW50LDMpKjEwKS8xMCtcImJcIjtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsMykpK1wiYlwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKG51bWJlciA+IE1hdGgucG93KGNvdW50LDIpKk1hdGgucG93KDEwLHBsYWNlKSl7XHJcbiAgICAgICAgICAgIGlmKG51bWJlci9NYXRoLnBvdyhjb3VudCwyKSA8IDEwMClcclxuICAgICAgICAgICAgICAgIG51bWJlciA9IE1hdGguZmxvb3IobnVtYmVyL01hdGgucG93KGNvdW50LDIpKjEwKS8xMCtcIm1cIjtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsMikpK1wibVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKG51bWJlciA+IE1hdGgucG93KGNvdW50LDEpKk1hdGgucG93KDEwLHBsYWNlKSl7XHJcbiAgICAgICAgICAgIGlmKG51bWJlci9NYXRoLnBvdyhjb3VudCwxKSA8IDEwMCl7XHJcbiAgICAgICAgICAgICAgICBudW1iZXIgPSBNYXRoLmZsb29yKG51bWJlci9NYXRoLnBvdyhjb3VudCwxKSoxMCkvMTArXCJrXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgbnVtYmVyID0gTWF0aC5mbG9vcihudW1iZXIvTWF0aC5wb3coY291bnQsMSkpK1wia1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBudW1iZXIgPSBNYXRoLmZsb29yKG51bWJlci9NYXRoLnBvdyhjb3VudCwwKSkrXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLnu5PmnpzkuLpcIit0eXBlK1wi5L2N5pWwXCIsbnVtYmVyKTtcclxuICAgICAgICByZXR1cm4gbnVtYmVyO1xyXG4gICAgfSxcclxuXHJcbiAgICBiZWdhaW5UaW1pbmc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0aGlzLl9zdGFydFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZW5kVGltaW5nMjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBlbmRUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgdGhpcy5fZW5kVGltZSA9IGVuZFRpbWU7XHJcbiAgICAgICAgdGhpcy5fdG90YWxUaW1lID0gZW5kVGltZSAtIHRoaXMuX3N0YXJ0VGltZTtcclxuICAgIH0sXHJcbiAgICBnZXRTY29yZVRpbWU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBsZXQgZW5kVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGxldCB0ZW1wVGltZSA9IGVuZFRpbWUgLSB0aGlzLl9zdGFydFRpbWU7XHJcbiAgICAgICAgaWYgKHRlbXBUaW1lIDwgMCB8fCB0ZW1wVGltZSA+IDUwMCkge1xyXG4gICAgICAgICAgICB0ZW1wVGltZSA9IE1hdGgucm91bmQoY2MuZGlyZWN0b3IuZ2V0QW5pbWF0aW9uSW50ZXJ2YWwoKSAqIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5jdXJyU2NvcmUgKz0gdGVtcFRpbWU7XHJcbiAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0gZW5kVGltZTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0Rm9ybWF0VGltZTogZnVuY3Rpb24gKHRpbWUpIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgZGF0ZS5zZXRUaW1lKHRpbWUpO1xyXG4gICAgICAgIGxldCBtcyA9IGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCk7XHJcbiAgICAgICAgLy8gbGV0IG1zU3RyaW5nID0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKTtcclxuICAgICAgICBsZXQgbXNTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIGxldCBzZWNvbmRTdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIGxldCBtaW5TdHJpbmcgPSBudWxsO1xyXG4gICAgICAgIG1zU3RyaW5nID0gTWF0aC5mbG9vcihtcyAvIDEwKSAlIDEwMDtcclxuICAgICAgICBzZWNvbmRTdHJpbmcgPSBkYXRlLmdldFNlY29uZHMoKTtcclxuICAgICAgICBtaW5TdHJpbmcgPSBkYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICBpZiAobXNTdHJpbmcgPCAxMCkge1xyXG4gICAgICAgICAgICBtc1N0cmluZyA9IFwiMFwiICsgbXNTdHJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzZWNvbmRTdHJpbmcgPCAxMCkge1xyXG4gICAgICAgICAgICBzZWNvbmRTdHJpbmcgPSBcIjBcIiArIHNlY29uZFN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Vjb25kU3RyaW5nID0gc2Vjb25kU3RyaW5nICsgXCI6XCI7XHJcblxyXG4gICAgICAgIGlmIChtaW5TdHJpbmcgPCAxMCkge1xyXG4gICAgICAgICAgICBtaW5TdHJpbmcgPSBcIjBcIiArIG1pblN0cmluZztcclxuICAgICAgICB9XHJcbiAgICAgICAgbWluU3RyaW5nID0gbWluU3RyaW5nICsgXCI6XCI7XHJcbiAgICAgICAgcmV0dXJuIG1pblN0cmluZyArIHNlY29uZFN0cmluZyArIG1zU3RyaW5nO1xyXG5cclxuICAgIH0sXHJcbiAgICBwdXNoTGlzdGVyOmZ1bmN0aW9uICgpIHtcclxuICAgICAgICBcclxuICAgIH0sXHJcbiAgICByZW1vdmVBbGxMaXN0ZXI6ZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIFxyXG4gICAgfSxcclxuXHJcbn07XHJcbmV4cG9ydCB7IEdhbWVUb29sIH07Il19
|