LockDiagram/temp/quick-scripts/dst/assets/Script/GameManager.js
2024-10-30 15:21:35 +08:00

558 lines
79 KiB
JavaScript

(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Script/GameManager.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, 'b0432BA295DjIOcuitdGKO1', 'GameManager');
// Script/GameManager.ts
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
Object.defineProperty(exports, "__esModule", { value: true });
// 主游戏控制类
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
var GameManager = /** @class */ (function (_super) {
__extends(GameManager, _super);
function GameManager() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.kuang1_Prefab = null;
_this.kuang2_Prefab = null;
_this.Block = null;
_this.TimeLabel = null;
_this.LevelLabel = null;
_this.Guide = null;
_this.progress = null; //-95 640
_this.Top = null; //80 -725
return _this;
}
GameManager.prototype.onLoad = function () {
this.guide_State = false;
this.level = cc.fx.GameConfig.GM_INFO.level;
this.guide_Level = cc.fx.GameConfig.GM_INFO.guide_Level;
this.LevelLabel.string = (this.level + 1) + "";
this.progress.fillRange = cc.fx.GameConfig.GM_INFO.score / 24;
if (this.progress.fillRange >= 0.2)
this.Top.getChildByName("star1").active = true;
if (this.progress.fillRange >= 0.5)
this.Top.getChildByName("star2").active = true;
if (this.progress.fillRange >= 0.8)
this.Top.getChildByName("star3").active = true;
if ((this.level == 0 && this.guide_Level == 4) ||
(this.level == 4 && this.guide_Level == 3) ||
(this.level == 8 && this.guide_Level == 1)) {
this.openGuide(false);
}
else {
this.LevelLabel.node.active = true;
this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "第 轮";
this.init();
}
};
GameManager.prototype.init = function () {
var _this = this;
if (this.level == 4 && this.guide_Level == 2) {
cc.fx.GameConfig.GM_INFO.guide_Level -= 1;
this.guide_State = true;
this.LevelLabel.node.active = false;
this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习";
// this.node.getChildByName("tip").active = true;
}
this.result = 0;
this.countTime = 6;
this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime);
this.createBlock();
setTimeout(function () {
_this.createCustom();
}, 1000);
};
GameManager.prototype.openGuide = function (type) {
this.Guide.active = true;
this.guide_State = true;
// this.node.getChildByName("tip").active = true;
if (!type)
cc.fx.GameConfig.GM_INFO.guide_Level -= 1;
this.Guide.getChildByName("one").active = false;
this.Guide.getChildByName("two").active = false;
this.Guide.getChildByName("three").active = false;
this.Guide.getChildByName("four").active = false;
var name = "one";
if (this.level == 0) {
name = "one";
this.LevelLabel.node.active = false;
this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习";
}
else if (this.level == 4) {
name = "two";
this.LevelLabel.node.active = false;
this.node.getChildByName("Top").getChildByName("lianxi").getComponent(cc.Label).string = "练 习";
}
else if (this.level == 8) {
name = "three";
this.guide_State = false;
}
if (type)
name = "four";
this.Guide.getChildByName(name).active = true;
cc.tween(this.Guide.getChildByName(name))
.to(0.5, { opacity: 255 })
.start();
};
GameManager.prototype.closeGuide = function () {
if (this.Guide.getChildByName("four").active) {
this.Guide.active = false;
cc.director.loadScene("GameScene");
}
else {
this.Guide.active = false;
this.init();
}
//
};
//创建方块地图
GameManager.prototype.createBlock = function () {
this.outside_Array = [];
this.inside_Array = [];
this.outside = [];
this.inside = [];
for (var i = 0; i < 16; i++) {
var block = cc.instantiate(this.kuang1_Prefab);
block.getComponent("Block").setId(i);
block.parent = this.Block.getChildByName("outside");
var x = void 0, y = 0;
if (i < 5) {
x = -284 + 142 * i;
y = 259;
}
else if (i < 9) {
x = 284;
y = 259 - (i - 4) * 142;
}
else if (i < 13) {
x = 284 - (i - 8) * 142;
y = -309;
}
else if (i < 16) {
x = -284;
y = -309 + (i - 12) * 142;
}
block.setPosition(x, y);
this.outside_Array.push(block);
}
for (var j = 3; j < 12; j++) {
var block = cc.instantiate(this.kuang2_Prefab);
block.getComponent("Block").setId(j);
block.parent = this.Block.getChildByName("inside");
block.setPosition(-132 + j % 3 * 132, 239 - parseInt(j / 3 + "") * 132);
this.inside_Array.push(block);
}
};
//创建关卡
GameManager.prototype.createCustom = function () {
//初始化关卡配置数据
this.level = cc.fx.GameConfig.GM_INFO.level;
this.LevelLabel.string = (this.level + 1) + "";
this.config = cc.fx.GameConfig.LEVEL_INFO[this.level];
if (this.level == 4 && this.guide_Level == 2) {
this.config = cc.fx.GameConfig.LEVEL_INFO[6];
}
this.pass = false;
//放正确答案和错误答案
this.answerInsideTexture = Math.floor(Math.random() * 14 + 1);
//内圈错误答案随机
this.insideTexture = [];
this.outsideTexture = [];
for (var k = 0; k < 14; k++) {
if ((k + 1) != this.answerInsideTexture) {
this.insideTexture.push(k + 1);
}
}
cc.fx.GameTool.shuffleArray(this.insideTexture);
this.answerOutsideTexture = this.insideTexture[11];
//分配正确答案和错误答案位置
if (this.config["inside"] > 0) {
this.result += 1;
var random = Math.random() * 100;
var arrayTemp = [0, 1, 2, 3, 5, 6, 7, 8];
if (this.config["insideType"] == 1) {
if (random >= 50)
this.inside = [0, 1, 2];
else
this.inside = [6, 7, 8];
}
else if (this.config["insideType"] == 2) {
if (random >= 50)
this.inside = [0, 3, 6];
else
this.inside = [2, 5, 8];
}
else {
this.inside = cc.fx.GameTool.shuffleArray(arrayTemp);
this.inside.splice(this.config["inside"], this.inside.length - this.config["inside"]);
}
this.answerInside = this.inside[Math.floor(Math.random() * this.inside.length)];
}
//分配外圈正确答案和错误答案位置
if (this.config["outside"] > 0) {
this.result += 1;
if (this.config["outsideType"] == 1) {
this.outside = [1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15];
}
else if (this.config["outsideType"] == 2) {
this.outside = [0, 4, 8, 12];
}
else {
this.outside = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
}
cc.fx.GameTool.shuffleArray(this.outside);
this.answerOutside = this.outside[Math.floor(Math.random() * this.outside.length)];
if (this.config["outside"] == 2) {
for (var j = 0; j < 15; j++) {
this.outsideTexture.push(this.insideTexture[3]);
}
}
else if (this.config["outside"] == 3) {
this.outsideTexture = [this.insideTexture[5], this.insideTexture[6], this.insideTexture[5], this.insideTexture[6], this.insideTexture[5]];
for (var j = 0; j < 10; j++) {
var randomTemp = Math.random() * 100;
if (randomTemp > 50)
this.outsideTexture.push(this.insideTexture[5]);
else
this.outsideTexture.push(this.insideTexture[6]);
}
cc.fx.GameTool.shuffleArray(this.outsideTexture);
}
else if (this.config["outside"] == 4) {
this.outsideTexture = [this.insideTexture[2], this.insideTexture[4], this.insideTexture[6],
this.insideTexture[2], this.insideTexture[4], this.insideTexture[6]];
for (var j = 0; j < 9; j++) {
var randomTemp = Math.random() * 100;
if (randomTemp < 33)
this.outsideTexture.push(this.insideTexture[2]);
else if (randomTemp < 66)
this.outsideTexture.push(this.insideTexture[4]);
else
this.outsideTexture.push(this.insideTexture[6]);
}
cc.fx.GameTool.shuffleArray(this.outsideTexture);
}
}
this.runBlock();
};
//块执行图片出现消失动画
GameManager.prototype.runBlock = function () {
var _this = this;
if (this.config["inside"] > 0) {
this.inside_Array[4].getComponent("Block").answerShow(this.answerInsideTexture);
setTimeout(function () {
var insideNumber = 0;
for (var i = 0; i < _this.inside.length; i++) {
if (_this.inside[i] == _this.answerInside)
_this.inside_Array[_this.inside[i]].getComponent("Block").show(true, true, _this.answerInsideTexture);
else {
_this.inside_Array[_this.inside[i]].getComponent("Block").show(false, true, _this.insideTexture[insideNumber]);
insideNumber += 1;
}
}
}, this.config["showTime"] * 1000);
}
if (this.config["outside"] > 0) {
this.outside_Array[this.answerOutside].getComponent("Block").answerShow(this.answerOutsideTexture);
if (this.config["outside"] > 1) {
var outsideNumber = 0;
for (var i = 0; i < this.outside_Array.length; i++) {
if (i == this.answerOutside)
this.outside_Array[i].getComponent("Block").show(true, false, this.answerOutsideTexture);
else {
this.outside_Array[i].getComponent("Block").show(false, false, this.outsideTexture[outsideNumber]);
outsideNumber += 1;
}
}
}
setTimeout(function () {
var outsideNumber = 0;
for (var i = 0; i < _this.outside_Array.length; i++) {
if (i == _this.answerOutside)
_this.outside_Array[i].getComponent("Block").lockShow(true, false);
else {
_this.outside_Array[i].getComponent("Block").lockShow(false, false);
outsideNumber += 1;
}
}
}, this.config["showTime"] * 1000);
}
setTimeout(function () {
if (!_this.guide_State) {
_this.startTime = cc.fx.GameTool.getTime();
_this.schedule(_this.updateCountDownTime, 1);
}
}, this.config["showTime"] * 1000);
};
//正确
GameManager.prototype.openResult = function (result) {
var _this = this;
this.result -= 1;
//非引导状态
if (!this.guide_State) {
this.flipBlock(result);
if (this.result == 0) {
this.unschedule(this.updateCountDownTime);
setTimeout(function () {
_this.setData(result);
}, 1000);
setTimeout(function () {
if (cc.fx.GameConfig.GM_INFO.level < cc.fx.GameConfig.LEVEL_INFO.length - 1) {
cc.fx.GameConfig.GM_INFO.level += 1;
cc.director.loadScene("GameScene");
}
}, 2000);
}
}
//引导状态下
else {
if (result.result) {
this.flipBlock(result);
setTimeout(function () {
if (_this.level == 4 && cc.fx.GameConfig.GM_INFO.guide_Level == 2) {
cc.director.loadScene("GameScene");
}
else
_this.openGuide(true);
}, 1000);
}
}
};
//翻转形状变成问号
GameManager.prototype.flipBlock = function (result) {
if (result.type) {
var pos = this.changePos(true, result.id);
if (!this.guide_State)
cc.fx.GameConfig.CLICK_DATA.userChoiceInner.push(pos.x, pos.y);
for (var i = 0; i < this.inside.length; i++) {
if (this.inside[i] == this.answerInside) {
this.inside_Array[4].getChildByName("texture").active = true;
this.inside_Array[4].getChildByName("texture").opacity = 255;
this.inside_Array[this.inside[i]].getChildByName("yes").active = true;
var pos_1 = this.changePos(true, this.inside_Array[this.inside[i]].getComponent("Block")._idNumber);
if (!this.guide_State)
cc.fx.GameConfig.CLICK_DATA.rightChoiceInner.push(pos_1.x, pos_1.y);
}
this.inside_Array[this.inside[i]].getComponent("Block")._touch = false;
}
if (result.result) {
this.addScore();
}
}
else {
var pos = this.changePos(false, result.id);
if (!this.guide_State)
cc.fx.GameConfig.CLICK_DATA.userChoiceOuter.push(pos.x, pos.y);
for (var i = 0; i < this.outside_Array.length; i++) {
this.outside_Array[i].getComponent("Block").lockHide();
this.outside_Array[i].getChildByName("texture").active = true;
if (i == this.answerOutside) {
this.outside_Array[i].getChildByName("yes").active = true;
this.outside_Array[i].getComponent("Block").show(true, false, this.answerOutsideTexture);
var pos_2 = this.changePos(false, this.outside_Array[i].getComponent("Block")._idNumber);
if (!this.guide_State)
cc.fx.GameConfig.CLICK_DATA.rightChoiceOuter.push(pos_2.x, pos_2.y);
}
}
if (result.result) {
this.addScore();
}
}
};
//加分 加进度条,加星星
GameManager.prototype.addScore = function () {
var _this = this;
if (!this.guide_State) {
cc.fx.GameConfig.GM_INFO.score += 1;
var progress = cc.fx.GameConfig.GM_INFO.score / 24;
if (progress >= 1)
progress = 1;
cc.tween(this.progress)
.to(0.2, { fillRange: progress })
.call(function () {
if (_this.Top.getChildByName("star1").active == false && progress >= 0.2) {
_this.Top.getChildByName("star1").active = true;
_this.Top.getChildByName("star1").opacity = 0;
_this.Top.getChildByName("star1").scale = 0.1;
cc.tween(_this.Top.getChildByName("star1"))
.to(0.3, { opacity: 255, scale: 1.1 })
.to(0.1, { opacity: 255, scale: 0.9 })
.to(0.1, { opacity: 255, scale: 1 })
.start();
}
if (_this.Top.getChildByName("star2").active == false && progress >= 0.5) {
_this.Top.getChildByName("star2").active = true;
_this.Top.getChildByName("star2").opacity = 0;
_this.Top.getChildByName("star2").scale = 0.1;
cc.tween(_this.Top.getChildByName("star2"))
.to(0.3, { opacity: 255, scale: 1.1 })
.to(0.1, { opacity: 255, scale: 0.9 })
.to(0.1, { opacity: 255, scale: 1 })
.start();
}
if (_this.Top.getChildByName("star3").active == false && progress >= 0.8) {
_this.Top.getChildByName("star3").active = true;
_this.Top.getChildByName("star3").opacity = 0;
_this.Top.getChildByName("star3").scale = 0.1;
cc.tween(_this.Top.getChildByName("star3"))
.to(0.3, { opacity: 255, scale: 1.1 })
.to(0.1, { opacity: 255, scale: 0.9 })
.to(0.1, { opacity: 255, scale: 1 })
.start();
}
})
.start();
}
};
//返回首页
GameManager.prototype.backScene = function () {
cc.director.loadScene("LoadScene");
};
//重新开始
GameManager.prototype.reStart = function () {
};
//获取时间戳
GameManager.prototype.getTime = function () {
var timestamp = new Date().getTime();
return timestamp;
};
//获胜
GameManager.prototype.passLevel = function () {
};
//失败
GameManager.prototype.loseLevel = function (type) {
};
GameManager.prototype.changePos = function (type, num) {
var x = 0;
var y = 0;
//内部
if (type) {
y = parseInt(num / 3 + "");
x = num % 3;
}
//外部
else {
if (num < 5) {
y = 0;
x = num;
}
else if (num < 9) {
x = 5;
y = num - 4;
}
else if (num < 13) {
y = 4;
x = 12 - num;
}
else if (num < 16) {
x = 0;
y = 16 - num;
}
}
var jg = cc.v2(x, y);
return jg;
};
//如果是倒计时 调用此方法
GameManager.prototype.updateCountDownTime = function () {
if (this.countTime > 0) {
this.countTime -= 1;
// this.TimeLabel.string =this.countTime + "";
this.TimeLabel.string = cc.fx.GameTool.getTimeMargin(this.countTime);
if (this.countTime <= 0) {
this.unschedule(this.updateCountDownTime);
this.node.getChildByName("Mask").active = true;
var data = { "result": false, "type": true, "id": null };
if (this.config["inside"] > 0)
cc.fx.Notifications.emit("result", data);
var data2 = { "result": false, "type": false, "id": null };
if (this.config["outside"] > 0)
cc.fx.Notifications.emit("result", data2);
}
}
};
//上传每次操作数据
GameManager.prototype.setData = function (result) {
cc.fx.GameConfig.CLICK_DATA.success = result.result;
cc.fx.GameConfig.CLICK_DATA.round = (cc.fx.GameConfig.GM_INFO.level + 1);
cc.fx.GameConfig.CLICK_DATA.duration = new Date().getTime() - this.startTime - 1000;
cc.fx.GameTool.setGameData();
};
GameManager.prototype.onEnable = function () {
cc.fx.Notifications.on("result", this.openResult, this);
};
GameManager.prototype.onDisable = function () {
cc.fx.Notifications.off("result", this.openResult, this);
};
GameManager.prototype.update = function (dt) {
};
__decorate([
property(cc.Prefab)
], GameManager.prototype, "kuang1_Prefab", void 0);
__decorate([
property(cc.Prefab)
], GameManager.prototype, "kuang2_Prefab", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Block", void 0);
__decorate([
property(cc.Label)
], GameManager.prototype, "TimeLabel", void 0);
__decorate([
property(cc.Label)
], GameManager.prototype, "LevelLabel", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Guide", void 0);
__decorate([
property(cc.Sprite)
], GameManager.prototype, "progress", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Top", void 0);
GameManager = __decorate([
ccclass
], GameManager);
return GameManager;
}(cc.Component));
exports.default = GameManager;
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxTQUFTO0FBQ0gsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUM7SUFBeUMsK0JBQVk7SUFBckQ7UUFBQSxxRUE4ZUM7UUE1ZUcsbUJBQWEsR0FBYyxJQUFJLENBQUM7UUFFaEMsbUJBQWEsR0FBYyxJQUFJLENBQUM7UUFFaEMsV0FBSyxHQUFZLElBQUksQ0FBQztRQUV0QixlQUFTLEdBQWEsSUFBSSxDQUFDO1FBRTNCLGdCQUFVLEdBQWEsSUFBSSxDQUFDO1FBRTVCLFdBQUssR0FBWSxJQUFJLENBQUM7UUFHdEIsY0FBUSxHQUFjLElBQUksQ0FBQyxDQUFDLFNBQVM7UUFFckMsU0FBRyxHQUFZLElBQUksQ0FBQyxDQUFBLFNBQVM7O0lBNmRqQyxDQUFDO0lBbmNHLDRCQUFNLEdBQU47UUFDSSxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3hELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBQyxDQUFDLENBQUMsR0FBQyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBQyxFQUFFLENBQUM7UUFDNUQsSUFBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFB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SUFFRCw4QkFBUSxHQUFSO1FBQ0ksRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRTVELENBQUM7SUFDRCwrQkFBUyxHQUFUO1FBQ0ksRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFDRCw0QkFBTSxHQUFOLFVBQVEsRUFBRTtJQUVWLENBQUM7SUEzZUQ7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztzREFDWTtJQUVoQztRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO3NEQUNZO0lBRWhDO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7OENBQ0k7SUFFdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztrREFDUTtJQUUzQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO21EQUNTO0lBRTVCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7OENBQ0k7SUFHdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQztpREFDTztJQUUzQjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRDQUNFO0lBakJILFdBQVc7UUFEL0IsT0FBTztPQUNhLFdBQVcsQ0E4ZS9CO0lBQUQsa0JBQUM7Q0E5ZUQsQUE4ZUMsQ0E5ZXdDLEVBQUUsQ0FBQyxTQUFTLEdBOGVwRDtrQkE5ZW9CLFdBQVciLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyDkuLvmuLjmiI/mjqfliLbnsbtcclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVNYW5hZ2VyIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuICAgIEBwcm9wZXJ0eShjYy5QcmVmYWIpXHJcbiAgICBrdWFuZzFfUHJlZmFiOiBjYy5QcmVmYWIgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLlByZWZhYilcclxuICAgIGt1YW5nMl9QcmVmYWI6IGNjLlByZWZhYiA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIEJsb2NrOiBjYy5Ob2RlID0gbnVsbDtcclxuICAgIEBwcm9wZXJ0eShjYy5MYWJlbClcclxuICAgIFRpbWVMYWJlbDogY2MuTGFiZWwgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLkxhYmVsKVxyXG4gICAgTGV2ZWxMYWJlbDogY2MuTGFiZWwgPSBudWxsO1xyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBHdWlkZTogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLlNwcml0ZSlcclxuICAgIHByb2dyZXNzOiBjYy5TcHJpdGUgPSBudWxsOyAvLy05NSA2NDBcclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKSAgXHJcbiAgICBUb3A6IGNjLk5vZGUgPSBudWxsOy8vODAgLTcyNVxyXG5cclxuICAgIGNvdW50VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5oC7ZGFvamlzaGlcclxuICAgIHN0YXJ0VGltZTogbnVtYmVyOyAgICAgIC8v5ri45oiP5byA5aeL5pe26Ze077yM5pe26Ze05oizXHJcbiAgICBwYXVzZTogYm9vbGVhbiA7ICAgICAgICAvL+a4uOaIj+aaguWBnFxyXG4gICAgZ2FtZU92ZXI6IGJvb2xlYW4gOyAgICAgLy/muLjmiI/nu5PmnZ9cclxuICAgIHJlc3VsdDogbnVtYmVyOyAgICAgICAgIC8v5b2T5YmN5bCP5bGA57uT5p2f5qCH5p2GXHJcblxyXG4gICAgb3V0c2lkZV9BcnJheTogYW55OyAgICAgLy/lhoXlnIjmlbDnu4RcclxuICAgIGluc2lkZV9BcnJheTogYW55OyAgICAgIC8v5aSW5ZyI5pWw57uEXHJcbiAgICBsZXZlbDogbnVtYmVyOyAgICAgICAgICAvL+WFs+WNoeetiee6p1xyXG4gICAgZ3VpZGVfTGV2ZWw6IG51bWJlcjsgICAgLy/lvJXlr7znrYnnuqdcclxuICAgIGd1aWRlX1N0YXRlOiBib29sZWFuOyAgICAvL+W8leWvvOetiee6p1xyXG4gICAgY29uZmlnOiB7fTsgICAgICAgICAgICAgLy/lvZPliY3lhbPljaHphY3nva5cclxuICAgIGFuc3dlckluc2lkZTogbnVtYmVyOyAgIC8v5q2j56Gu562U5qGI5L2N572uXHJcbiAgICBhbnN3ZXJPdXRzaWRlOiBudW1iZXI7ICAvL+ato+ehruetlOahiOS9jee9rlxyXG4gICAgcGFzczogYm9vbGVhbjsgICAgICAgICAgLy/mmK/lkKbpgJrlhbNcclxuICAgIG91dHNpZGU6IGFueTsgICAgICAgICAgIC8v5aSW5ZyI5a6e6ZmF5omn6KGM5pWw57uEXHJcbiAgICBpbnNpZGU6IGFueTsgICAgICAgICAgICAvL+WGheWciOWunumZheaJp+ihjOaVsOe7hFxyXG4gICAgYW5zd2VySW5zaWRlVGV4dHVyZTogbnVtYmVyOyAgLy/kuonlj5bnrZTmoYjlm77niYdcclxuICAgIGFuc3dlck91dHNpZGVUZXh0dXJlOiBudW1iZXI7ICAvL+S6ieWPluetlOahiOWbvueJh1xyXG4gICAgaW5zaWRlVGV4dHVyZTogbnVtYmVyW107ICAgLy/plJnor6/nrZTmoYjmlbDnu4RcclxuICAgIG91dHNpZGVUZXh0dXJlOiBudW1iZXJbXTsgICAvL+mUmeivr+etlOahiOaVsOe7hFxyXG4gICAgXHJcbiAgXHJcblxyXG4gICAgb25Mb2FkICgpIHtcclxuICAgICAgICB0aGlzLmd1aWRlX1N0YXRlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZXZlbCA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbDtcclxuICAgICAgICB0aGlzLmd1aWRlX0xldmVsID0gY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmd1aWRlX0xldmVsO1xyXG4gICAgICAgIHRoaXMuTGV2ZWxMYWJlbC5zdHJpbmcgPSAodGhpcy5sZXZlbCsxKStcIlwiO1xyXG4gICAgICAgIHRoaXMucHJvZ3Jlc3MuZmlsbFJhbmdlID0gY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnNjb3JlLzI0O1xyXG4gICAgICAgIGlmKHRoaXMucHJvZ3Jlc3MuZmlsbFJhbmdlPj0gMC4yKSB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodGhpcy5wcm9ncmVzcy5maWxsUmFuZ2U+PSAwLjUpIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICBpZih0aGlzLnByb2dyZXNzLmZpbGxSYW5nZT49IDAuOCkgdGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyM1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGlmKCh0aGlzLmxldmVsID09IDAgJiYgdGhpcy5ndWlkZV9MZXZlbCA9PSA0KSB8fFxyXG4gICAgICAgICh0aGlzLmxldmVsID09IDQgJiYgdGhpcy5ndWlkZV9MZXZlbCA9PSAzKSB8fFxyXG4gICAgICAgICh0aGlzLmxldmVsID09IDggJiYgdGhpcy5ndWlkZV9MZXZlbCA9PSAxKSl7XHJcbiAgICAgICAgICAgIHRoaXMub3Blbkd1aWRlKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5MZXZlbExhYmVsLm5vZGUuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiVG9wXCIpLmdldENoaWxkQnlOYW1lKFwibGlhbnhpXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCLnrKwgICAgICAgIOi9rlwiO1xyXG4gICAgICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpe1xyXG4gICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gNCAmJiB0aGlzLmd1aWRlX0xldmVsID09IDIpIHtcclxuICAgICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZ3VpZGVfTGV2ZWwgLT0gMTtcclxuICAgICAgICAgICB0aGlzLmd1aWRlX1N0YXRlID0gdHJ1ZTtcclxuICAgICAgICAgICB0aGlzLkxldmVsTGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJUb3BcIikuZ2V0Q2hpbGRCeU5hbWUoXCJsaWFueGlcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKS5zdHJpbmcgPSBcIue7gyAgIOS5oFwiO1xyXG4gICAgICAgIC8vICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXN1bHQgPSAwO1xyXG4gICAgICAgIHRoaXMuY291bnRUaW1lID0gNjtcclxuICAgICAgICB0aGlzLlRpbWVMYWJlbC5zdHJpbmcgPSAgY2MuZnguR2FtZVRvb2wuZ2V0VGltZU1hcmdpbih0aGlzLmNvdW50VGltZSk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVCbG9jaygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUN1c3RvbSgpO1xyXG4gICAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5HdWlkZSh0eXBlKXtcclxuICAgICAgICB0aGlzLkd1aWRlLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ndWlkZV9TdGF0ZSA9IHRydWU7XHJcbiAgICAgICAgLy8gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgaWYoIXR5cGUpIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5ndWlkZV9MZXZlbCAtPSAxO1xyXG4gICAgICAgIHRoaXMuR3VpZGUuZ2V0Q2hpbGRCeU5hbWUoXCJvbmVcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5HdWlkZS5nZXRDaGlsZEJ5TmFtZShcInR3b1wiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLkd1aWRlLmdldENoaWxkQnlOYW1lKFwidGhyZWVcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5HdWlkZS5nZXRDaGlsZEJ5TmFtZShcImZvdXJcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IG5hbWUgPSBcIm9uZVwiO1xyXG4gICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gMCl7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcIm9uZVwiO1xyXG4gICAgICAgICAgICB0aGlzLkxldmVsTGFiZWwubm9kZS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiVG9wXCIpLmdldENoaWxkQnlOYW1lKFwibGlhbnhpXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nID0gXCLnu4MgICDkuaBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLmxldmVsID09IDQpe1xyXG4gICAgICAgICAgICBuYW1lID0gXCJ0d29cIjtcclxuICAgICAgICAgICAgdGhpcy5MZXZlbExhYmVsLm5vZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlRvcFwiKS5nZXRDaGlsZEJ5TmFtZShcImxpYW54aVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwi57uDICAg5LmgXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5sZXZlbCA9PSA4KXtcclxuICAgICAgICAgICAgbmFtZSA9IFwidGhyZWVcIjtcclxuICAgICAgICAgICAgdGhpcy5ndWlkZV9TdGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0eXBlKSBuYW1lID0gXCJmb3VyXCI7XHJcbiAgICAgICAgdGhpcy5HdWlkZS5nZXRDaGlsZEJ5TmFtZShuYW1lKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMuR3VpZGUuZ2V0Q2hpbGRCeU5hbWUobmFtZSkpXHJcbiAgICAgICAgLnRvKDAuNSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlR3VpZGUoKXtcclxuICAgICAgICBpZih0aGlzLkd1aWRlLmdldENoaWxkQnlOYW1lKFwiZm91clwiKS5hY3RpdmUpe1xyXG4gICAgICAgICAgICB0aGlzLkd1aWRlLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIHRoaXMuR3VpZGUuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy/liJvlu7rmlrnlnZflnLDlm75cclxuICAgIGNyZWF0ZUJsb2NrKCl7XHJcbiAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5ID0gW107XHJcbiAgICAgICAgdGhpcy5pbnNpZGVfQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLm91dHNpZGUgPSBbXTtcclxuICAgICAgICB0aGlzLmluc2lkZSA9IFtdO1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPDE2OyBpKyspe1xyXG4gICAgICAgICAgICBsZXQgYmxvY2sgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmt1YW5nMV9QcmVmYWIpO1xyXG4gICAgICAgICAgICBibG9jay5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5zZXRJZChpKTtcclxuICAgICAgICAgICAgYmxvY2sucGFyZW50ID0gdGhpcy5CbG9jay5nZXRDaGlsZEJ5TmFtZShcIm91dHNpZGVcIik7XHJcbiAgICAgICAgICAgIGxldCB4LHkgPSAwO1xyXG4gICAgICAgICAgICBpZihpIDwgNSl7XHJcbiAgICAgICAgICAgICAgICB4ID0gLTI4NCArIDE0MippOyB5ID0gMjU5O1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKGkgPCA5KXtcclxuICAgICAgICAgICAgICAgIHggPSAyODQ7IHkgPSAyNTkgLSAoaS00KSoxNDI7XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgICAgIGVsc2UgaWYoaSA8IDEzKXsgICAgXHJcbiAgICAgICAgICAgICAgICB4ID0gMjg0IC0gKGktOCkqMTQyOyB5ID0gLTMwOTtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgZWxzZSBpZihpIDwgMTYpe1xyXG4gICAgICAgICAgICAgICAgeCA9IC0yODQ7IHkgPSAtMzA5ICsgKGktMTIpKjE0MjtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oeCx5KTtcclxuICAgICAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5LnB1c2goYmxvY2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IGo9MzsgajwxMjsgaisrKXtcclxuICAgICAgICAgICAgbGV0IGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5rdWFuZzJfUHJlZmFiKTtcclxuICAgICAgICAgICAgYmxvY2suZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2V0SWQoaik7XHJcbiAgICAgICAgICAgIGJsb2NrLnBhcmVudCA9IHRoaXMuQmxvY2suZ2V0Q2hpbGRCeU5hbWUoXCJpbnNpZGVcIik7XHJcbiAgICAgICAgICAgIGJsb2NrLnNldFBvc2l0aW9uKC0xMzIraiUzKjEzMiwyMzktcGFyc2VJbnQoai8zICsgXCJcIikqMTMyKTtcclxuICAgICAgICAgICAgdGhpcy5pbnNpZGVfQXJyYXkucHVzaChibG9jayk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8v5Yib5bu65YWz5Y2hXHJcbiAgICBjcmVhdGVDdXN0b20oKXtcclxuICAgICAgICAvL+WIneWni+WMluWFs+WNoemFjee9ruaVsOaNrlxyXG4gICAgICAgIHRoaXMubGV2ZWwgPSBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWw7XHJcbiAgICAgICAgdGhpcy5MZXZlbExhYmVsLnN0cmluZyA9ICh0aGlzLmxldmVsKzEpK1wiXCI7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBjYy5meC5HYW1lQ29uZmlnLkxFVkVMX0lORk9bdGhpcy5sZXZlbF07XHJcbiAgICAgICAgaWYodGhpcy5sZXZlbCA9PSA0ICYmIHRoaXMuZ3VpZGVfTGV2ZWwgPT0gMikge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGNjLmZ4LkdhbWVDb25maWcuTEVWRUxfSU5GT1s2XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXNzID0gZmFsc2U7XHJcbiAgICAgICAgLy/mlL7mraPnoa7nrZTmoYjlkozplJnor6/nrZTmoYhcclxuICAgICAgICB0aGlzLmFuc3dlckluc2lkZVRleHR1cmUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTQgKyAxKTtcclxuICAgICAgICAvL+WGheWciOmUmeivr+etlOahiOmaj+aculxyXG4gICAgICAgIHRoaXMuaW5zaWRlVGV4dHVyZSA9IFtdO1xyXG4gICAgICAgIHRoaXMub3V0c2lkZVRleHR1cmUgPSBbXTtcclxuICAgICAgICBmb3IobGV0IGs9MDsgazwxNDsgaysrKXtcclxuICAgICAgICAgICAgaWYoKGsrMSkgIT0gdGhpcy5hbnN3ZXJJbnNpZGVUZXh0dXJlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlVGV4dHVyZS5wdXNoKGsrMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2MuZnguR2FtZVRvb2wuc2h1ZmZsZUFycmF5KHRoaXMuaW5zaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgdGhpcy5hbnN3ZXJPdXRzaWRlVGV4dHVyZSA9IHRoaXMuaW5zaWRlVGV4dHVyZVsxMV07XHJcblxyXG4gICAgICAgIC8v5YiG6YWN5q2j56Gu562U5qGI5ZKM6ZSZ6K+v562U5qGI5L2N572uXHJcbiAgICAgICAgaWYodGhpcy5jb25maWdbXCJpbnNpZGVcIl0gPiAwKXtcclxuICAgICAgICAgICAgdGhpcy5yZXN1bHQgKz0gMTtcclxuICAgICAgICAgICAgbGV0IHJhbmRvbSA9IE1hdGgucmFuZG9tKCkqMTAwO1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlUZW1wID0gWzAsMSwyLDMsNSw2LDcsOF07XHJcbiAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLmNvbmZpZ1tcImluc2lkZVR5cGVcIl0gPT0gMSl7XHJcbiAgICAgICAgICAgICAgICBpZihyYW5kb20gPj0gNTApIHRoaXMuaW5zaWRlID0gIFswLDEsMl07XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXMuaW5zaWRlID0gWzYsNyw4XTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMuY29uZmlnW1wiaW5zaWRlVHlwZVwiXSA9PSAyKXtcclxuICAgICAgICAgICAgICAgIGlmKHJhbmRvbSA+PSA1MCkgdGhpcy5pbnNpZGUgPSAgWzAsMyw2XTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5pbnNpZGUgPSBbMiw1LDhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc2lkZSA9IGNjLmZ4LkdhbWVUb29sLnNodWZmbGVBcnJheShhcnJheVRlbXApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNpZGUuc3BsaWNlKHRoaXMuY29uZmlnW1wiaW5zaWRlXCJdLHRoaXMuaW5zaWRlLmxlbmd0aC10aGlzLmNvbmZpZ1tcImluc2lkZVwiXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5hbnN3ZXJJbnNpZGUgPSB0aGlzLmluc2lkZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqdGhpcy5pbnNpZGUubGVuZ3RoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5YiG6YWN5aSW5ZyI5q2j56Gu562U5qGI5ZKM6ZSZ6K+v562U5qGI5L2N572uXHJcbiAgICAgICAgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMucmVzdWx0ICs9IDE7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnW1wib3V0c2lkZVR5cGVcIl0gPT0gMSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGUgPSBbMSwyLDMsNSw2LDcsOSwxMCwxMSwxMywxNCwxNV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLmNvbmZpZ1tcIm91dHNpZGVUeXBlXCJdID09IDIpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlID0gWzAsNCw4LDEyXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlID0gWzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTVdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNjLmZ4LkdhbWVUb29sLnNodWZmbGVBcnJheSh0aGlzLm91dHNpZGUpO1xyXG4gICAgICAgICAgICB0aGlzLmFuc3dlck91dHNpZGUgPSB0aGlzLm91dHNpZGVbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKnRoaXMub3V0c2lkZS5sZW5ndGgpXTtcclxuICAgICAgICAgICAgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID09IDIpe1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqPTA7IGo8MTU7IGorKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlVGV4dHVyZS5wdXNoKHRoaXMuaW5zaWRlVGV4dHVyZVszXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLmNvbmZpZ1tcIm91dHNpZGVcIl0gPT0gMyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVUZXh0dXJlID0gW3RoaXMuaW5zaWRlVGV4dHVyZVs1XSx0aGlzLmluc2lkZVRleHR1cmVbNl0sdGhpcy5pbnNpZGVUZXh0dXJlWzVdLHRoaXMuaW5zaWRlVGV4dHVyZVs2XSx0aGlzLmluc2lkZVRleHR1cmVbNV1dO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqPTA7IGo8MTA7IGorKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhbmRvbVRlbXAgPSBNYXRoLnJhbmRvbSgpKjEwMDtcclxuICAgICAgICAgICAgICAgICAgICBpZihyYW5kb21UZW1wPjUwKSB0aGlzLm91dHNpZGVUZXh0dXJlLnB1c2godGhpcy5pbnNpZGVUZXh0dXJlWzVdKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHRoaXMub3V0c2lkZVRleHR1cmUucHVzaCh0aGlzLmluc2lkZVRleHR1cmVbNl0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2MuZnguR2FtZVRvb2wuc2h1ZmZsZUFycmF5KHRoaXMub3V0c2lkZVRleHR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID09IDQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlVGV4dHVyZSA9IFt0aGlzLmluc2lkZVRleHR1cmVbMl0sdGhpcy5pbnNpZGVUZXh0dXJlWzRdLHRoaXMuaW5zaWRlVGV4dHVyZVs2XSxcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlVGV4dHVyZVsyXSx0aGlzLmluc2lkZVRleHR1cmVbNF0sdGhpcy5pbnNpZGVUZXh0dXJlWzZdXTtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaj0wOyBqPDk7IGorKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJhbmRvbVRlbXAgPSBNYXRoLnJhbmRvbSgpKjEwMDtcclxuICAgICAgICAgICAgICAgICAgICBpZihyYW5kb21UZW1wPDMzKSB0aGlzLm91dHNpZGVUZXh0dXJlLnB1c2godGhpcy5pbnNpZGVUZXh0dXJlWzJdKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJhbmRvbVRlbXA8NjYpIHRoaXMub3V0c2lkZVRleHR1cmUucHVzaCh0aGlzLmluc2lkZVRleHR1cmVbNF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5vdXRzaWRlVGV4dHVyZS5wdXNoKHRoaXMuaW5zaWRlVGV4dHVyZVs2XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYy5meC5HYW1lVG9vbC5zaHVmZmxlQXJyYXkodGhpcy5vdXRzaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ydW5CbG9jaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5Z2X5omn6KGM5Zu+54mH5Ye6546w5raI5aSx5Yqo55S7XHJcbiAgICBydW5CbG9jaygpe1xyXG4gICAgICAgIGlmKHRoaXMuY29uZmlnW1wiaW5zaWRlXCJdID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5WzRdLmdldENvbXBvbmVudChcIkJsb2NrXCIpLmFuc3dlclNob3codGhpcy5hbnN3ZXJJbnNpZGVUZXh0dXJlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5zaWRlTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuaW5zaWRlLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuaW5zaWRlW2ldID09IHRoaXMuYW5zd2VySW5zaWRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2lkZV9BcnJheVt0aGlzLmluc2lkZVtpXV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyh0cnVlLHRydWUsdGhpcy5hbnN3ZXJJbnNpZGVUZXh0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2lkZV9BcnJheVt0aGlzLmluc2lkZVtpXV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyhmYWxzZSx0cnVlLHRoaXMuaW5zaWRlVGV4dHVyZVtpbnNpZGVOdW1iZXJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zaWRlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLmNvbmZpZ1tcInNob3dUaW1lXCJdKjEwMDApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5jb25maWdbXCJvdXRzaWRlXCJdID4gMCl7XHJcbiAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVt0aGlzLmFuc3dlck91dHNpZGVdLmdldENvbXBvbmVudChcIkJsb2NrXCIpLmFuc3dlclNob3codGhpcy5hbnN3ZXJPdXRzaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnW1wib3V0c2lkZVwiXSA+IDEpe1xyXG4gICAgICAgICAgICAgICAgbGV0IG91dHNpZGVOdW1iZXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8dGhpcy5vdXRzaWRlX0FycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKGkgPT0gdGhpcy5hbnN3ZXJPdXRzaWRlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyh0cnVlLGZhbHNlLHRoaXMuYW5zd2VyT3V0c2lkZVRleHR1cmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuc2hvdyhmYWxzZSxmYWxzZSx0aGlzLm91dHNpZGVUZXh0dXJlW291dHNpZGVOdW1iZXJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0c2lkZU51bWJlciArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBvdXRzaWRlTnVtYmVyID0gMDtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMub3V0c2lkZV9BcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihpID09IHRoaXMuYW5zd2VyT3V0c2lkZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5W2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLmxvY2tTaG93KHRydWUsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm91dHNpZGVfQXJyYXlbaV0uZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikubG9ja1Nob3coZmFsc2UsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRzaWRlTnVtYmVyICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCB0aGlzLmNvbmZpZ1tcInNob3dUaW1lXCJdKjEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ3VpZGVfU3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydFRpbWUgPSBjYy5meC5HYW1lVG9vbC5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSwxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgfSwgdGhpcy5jb25maWdbXCJzaG93VGltZVwiXSoxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvL+ato+ehrlxyXG4gICAgb3BlblJlc3VsdChyZXN1bHQpe1xyXG4gICAgICAgIHRoaXMucmVzdWx0IC09IDE7XHJcbiAgICAgICAgLy/pnZ7lvJXlr7znirbmgIFcclxuICAgICAgICBpZighdGhpcy5ndWlkZV9TdGF0ZSl7XHJcbiAgICAgICAgICAgIHRoaXMuZmxpcEJsb2NrKHJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucmVzdWx0ID09IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsIDwgY2MuZnguR2FtZUNvbmZpZy5MRVZFTF9JTkZPLmxlbmd0aC0xKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LCAyMDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvL+W8leWvvOeKtuaAgeS4i1xyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKHJlc3VsdC5yZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mbGlwQmxvY2socmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gNCAmJiBjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8uZ3VpZGVfTGV2ZWwgPT0gMil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB0aGlzLm9wZW5HdWlkZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgXHJcbiAgICB9XHJcblxyXG4gICAgLy/nv7vovazlvaLnirblj5jmiJDpl67lj7dcclxuICAgIGZsaXBCbG9jayhyZXN1bHQpe1xyXG4gICAgICAgIGlmKHJlc3VsdC50eXBlKXtcclxuICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuY2hhbmdlUG9zKHRydWUscmVzdWx0LmlkKTtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ3VpZGVfU3RhdGUpIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS51c2VyQ2hvaWNlSW5uZXIucHVzaChwb3MueCxwb3MueSk7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMuaW5zaWRlLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5pbnNpZGVbaV0gPT0gdGhpcy5hbnN3ZXJJbnNpZGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5WzRdLmdldENoaWxkQnlOYW1lKFwidGV4dHVyZVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5WzRdLmdldENoaWxkQnlOYW1lKFwidGV4dHVyZVwiKS5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5W3RoaXMuaW5zaWRlW2ldXS5nZXRDaGlsZEJ5TmFtZShcInllc1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3MgPSB0aGlzLmNoYW5nZVBvcyh0cnVlLHRoaXMuaW5zaWRlX0FycmF5W3RoaXMuaW5zaWRlW2ldXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5faWROdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLmd1aWRlX1N0YXRlKSBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEucmlnaHRDaG9pY2VJbm5lci5wdXNoKHBvcy54LHBvcy55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zaWRlX0FycmF5W3RoaXMuaW5zaWRlW2ldXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5fdG91Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXN1bHQucmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NvcmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5jaGFuZ2VQb3MoZmFsc2UscmVzdWx0LmlkKTtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZ3VpZGVfU3RhdGUpIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS51c2VyQ2hvaWNlT3V0ZXIucHVzaChwb3MueCxwb3MueSk7XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPHRoaXMub3V0c2lkZV9BcnJheS5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5sb2NrSGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRzaWRlX0FycmF5W2ldLmdldENoaWxkQnlOYW1lKFwidGV4dHVyZVwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgaWYoaSA9PSB0aGlzLmFuc3dlck91dHNpZGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDaGlsZEJ5TmFtZShcInllc1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5zaG93KHRydWUsZmFsc2UsdGhpcy5hbnN3ZXJPdXRzaWRlVGV4dHVyZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvcyA9IHRoaXMuY2hhbmdlUG9zKGZhbHNlLHRoaXMub3V0c2lkZV9BcnJheVtpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5faWROdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF0aGlzLmd1aWRlX1N0YXRlKSBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEucmlnaHRDaG9pY2VPdXRlci5wdXNoKHBvcy54LHBvcy55KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihyZXN1bHQucmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkU2NvcmUoKTtcclxuICAgICAgICAgICAgfSBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgLy/liqDliIYg5Yqg6L+b5bqm5p2h77yM5Yqg5pif5pifXHJcbiAgICBhZGRTY29yZSgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmd1aWRlX1N0YXRlKXtcclxuICAgICAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLnNjb3JlICs9IDE7XHJcbiAgICAgICAgICAgIHZhciBwcm9ncmVzcyA9IGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5zY29yZS8yNDtcclxuICAgICAgICAgICAgaWYocHJvZ3Jlc3MgPj0gMSkgcHJvZ3Jlc3MgPSAxO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLnByb2dyZXNzKVxyXG4gICAgICAgICAgICAudG8oMC4yLHtmaWxsUmFuZ2U6cHJvZ3Jlc3N9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKT0+e1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMVwiKS5hY3RpdmUgPT0gZmFsc2UgJiYgcHJvZ3Jlc3M+PSAwLjIpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLm9wYWNpdHkgPSAwOyB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLnNjYWxlID0gMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eToyNTUsc2NhbGU6MS4xfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjI1NSxzY2FsZTowLjl9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50bygwLjEse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMlwiKS5hY3RpdmUgPT0gZmFsc2UgJiYgcHJvZ3Jlc3M+PSAwLjUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLm9wYWNpdHkgPSAwOyB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLnNjYWxlID0gMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eToyNTUsc2NhbGU6MS4xfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjI1NSxzY2FsZTowLjl9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50bygwLjEse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5Ub3AuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyM1wiKS5hY3RpdmUgPT0gZmFsc2UgJiYgcHJvZ3Jlc3M+PSAwLjgpe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLm9wYWNpdHkgPSAwOyB0aGlzLlRvcC5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLnNjYWxlID0gMC4xO1xyXG4gICAgICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVG9wLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKDAuMyx7b3BhY2l0eToyNTUsc2NhbGU6MS4xfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjI1NSxzY2FsZTowLjl9KVxyXG4gICAgICAgICAgICAgICAgICAgIC50bygwLjEse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy/ov5Tlm57pppbpobVcclxuICAgIGJhY2tTY2VuZSgpe1xyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkxvYWRTY2VuZVwiKTtcclxuICAgIH1cclxuICAgIC8v6YeN5paw5byA5aeLXHJcbiAgICByZVN0YXJ0KCl7XHJcblxyXG4gICAgfVxyXG4gICAgLy/ojrflj5bml7bpl7TmiLNcclxuICAgIGdldFRpbWUoKXtcclxuICAgICAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICAgICAgcmV0dXJuIHRpbWVzdGFtcDtcclxuICAgIH1cclxuICAgIC8v6I636IOcXHJcbiAgICBwYXNzTGV2ZWwoKXtcclxuXHJcbiAgICB9XHJcbiAgICAvL+Wksei0pVxyXG4gICAgbG9zZUxldmVsKHR5cGUpe1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVBvcyh0eXBlLG51bSl7XHJcbiAgICAgICAgdmFyIHggPSAwOyB2YXIgeSA9IDA7XHJcbiAgICAgICAgLy/lhoXpg6hcclxuICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgeSA9IHBhcnNlSW50KG51bS8zK1wiXCIpO1xyXG4gICAgICAgICAgICB4ID0gbnVtJTM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5aSW6YOoXHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYobnVtIDwgNSl7XHJcbiAgICAgICAgICAgICAgICB5PTA7IHg9bnVtO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKG51bSA8IDkpe1xyXG4gICAgICAgICAgICAgICAgeD01OyB5PW51bS00O1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKG51bSA8IDEzKXsgICAgXHJcbiAgICAgICAgICAgICAgICB5PTQ7IHg9MTItbnVtO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIGlmKG51bSA8IDE2KXtcclxuICAgICAgICAgICAgICAgIHg9MDsgeT0xNi1udW07XHJcbiAgICAgICAgICAgIH0gXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBqZyA9IGNjLnYyKHgseSk7XHJcbiAgICAgICAgcmV0dXJuIGpnO1xyXG4gICAgfVxyXG4gICAgLy/lpoLmnpzmmK/lgJLorqHml7Yg6LCD55So5q2k5pa55rOVXHJcbiAgICB1cGRhdGVDb3VudERvd25UaW1lICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb3VudFRpbWUgPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRUaW1lIC09IDE7XHJcbiAgICAgICAgICAgIC8vIHRoaXMuVGltZUxhYmVsLnN0cmluZyA9dGhpcy5jb3VudFRpbWUgKyBcIlwiO1xyXG4gICAgICAgICAgICB0aGlzLlRpbWVMYWJlbC5zdHJpbmcgPSAgY2MuZnguR2FtZVRvb2wuZ2V0VGltZU1hcmdpbih0aGlzLmNvdW50VGltZSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY291bnRUaW1lIDw9IDApe1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJNYXNrXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IHtcInJlc3VsdFwiOmZhbHNlLFwidHlwZVwiOnRydWUsXCJpZFwiOm51bGx9O1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5jb25maWdbXCJpbnNpZGVcIl0gPiAwKSBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoXCJyZXN1bHRcIixkYXRhKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhMiA9IHtcInJlc3VsdFwiOmZhbHNlLFwidHlwZVwiOmZhbHNlLFwiaWRcIjpudWxsfTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuY29uZmlnW1wib3V0c2lkZVwiXSA+IDApIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChcInJlc3VsdFwiLGRhdGEyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v5LiK5Lyg5q+P5qyh5pON5L2c5pWw5o2uXHJcbiAgICBzZXREYXRhKHJlc3VsdCl7XHJcbiAgICAgICAgY2MuZnguR2FtZUNvbmZpZy5DTElDS19EQVRBLnN1Y2Nlc3MgPSByZXN1bHQucmVzdWx0O1xyXG4gICAgICAgIGNjLmZ4LkdhbWVDb25maWcuQ0xJQ0tfREFUQS5yb3VuZCA9IChjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgKyAxKTtcclxuICAgICAgICBjYy5meC5HYW1lQ29uZmlnLkNMSUNLX0RBVEEuZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuc3RhcnRUaW1lIC0gMTAwMDtcclxuICAgICAgICBjYy5meC5HYW1lVG9vbC5zZXRHYW1lRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRW5hYmxlICgpIHtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9uKFwicmVzdWx0XCIsIHRoaXMub3BlblJlc3VsdCwgdGhpcyk7XHJcblxyXG4gICAgfVxyXG4gICAgb25EaXNhYmxlICgpIHtcclxuICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLm9mZihcInJlc3VsdFwiLCB0aGlzLm9wZW5SZXN1bHQsIHRoaXMpO1xyXG4gICAgfVxyXG4gICAgdXBkYXRlIChkdCkge1xyXG5cclxuICAgIH1cclxufVxyXG4iXX0=