FlyUp/temp/quick-scripts/dst/assets/Script/GameManager.js
2024-06-21 18:41:20 +08:00

854 lines
117 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, 'b26a49RCSFPT4C+F7xAd62t', 'GameManager');
// Script/GameManager.ts
"use strict";
// Learn TypeScript:
// - https://docs.cocos.com/creator/manual/en/scripting/typescript.html
// Learn Attribute:
// - https://docs.cocos.com/creator/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
// - https://docs.cocos.com/creator/manual/en/scripting/life-cycle-callbacks.html
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 GameData_1 = require("./GameData");
var GameTool_1 = require("./tool/GameTool");
var Notification_1 = require("./tool/Notification");
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.Camera = null;
_this.topUI = null;
_this.Player = null;
_this.Ground = null;
_this.Xin = null;
_this.time = null;
_this.GameOver = null;
_this.Tip = null;
_this.blockPrefab = [];
return _this;
}
GameManager_1 = GameManager;
// LIFE-CYCLE CALLBACKS:
GameManager.prototype.onLoad = function () {
// cc.game.setFrameRate(59.9);
// 示例使用
var manager = cc.director.getCollisionManager();
manager.enabled = true;
// manager.enabledDebugDraw = true;
GameManager_1._instance = this;
// GameData._instance.GM_INFO.probation = false;
this.Air = [];
this.Air2 = [];
};
GameManager.prototype.onEnable = function () {
Notification_1.Notification.on("createBlock", this.createBlock, this);
Notification_1.Notification.on("addScore", this.addScore, this);
Notification_1.Notification.on("createCrackBlock", this.createCrackBlock, this);
Notification_1.Notification.on("showGround", this.showGround, this);
Notification_1.Notification.on("death", this.getDeath, this);
Notification_1.Notification.on("jump", this.jump, this);
Notification_1.Notification.on("setData", this.setData, this);
};
GameManager.prototype.onDestroy = function () {
Notification_1.Notification.off("createBlock", this.createBlock);
Notification_1.Notification.off("addScore", this.addScore);
Notification_1.Notification.off("createCrackBlock", this.createCrackBlock);
Notification_1.Notification.off("death", this.getDeath);
Notification_1.Notification.off("jump", this.jump);
Notification_1.Notification.off("showGround", this.showGround);
Notification_1.Notification.off("setData", this.setData);
};
//根据是否全面屏,做独立适配方面
GameManager.prototype.fit = function () {
this.node.getChildByName("bg2").y = -2167.675;
var jg = this.setFit();
if (!jg) {
this.node.getChildByName("bg2").y = -2100;
this.topUI.y = 660;
}
};
//判断全面屏
GameManager.prototype.getSetScreenResolutionFlag = function () {
var size = cc.winSize;
var width = size.width;
var height = size.height;
if ((height / width) > (16.2 / 9))
return false;
return true;
};
//判断全面屏适配
GameManager.prototype.setFit = function () {
var flag = this.getSetScreenResolutionFlag();
if (flag) {
}
else {
}
return flag;
};
GameManager.prototype.init = function () {
this.drop = this.topUI.y - this.Camera.node.y;
this.score = 0;
this.oldSpeed = 10;
this.guide = -1;
this.begin = true;
this.over = false;
this.interfere = false;
this.round = 0;
this.level = 0;
GameData_1.default._instance.GM_INFO.levelMax = 1;
GameData_1.default._instance.GM_INFO.difficultyMax = 1;
GameData_1.default._instance.GM_INFO.life = 3;
this.blockArray = [];
this.difficultyArray = 0;
this.cameraMove = false;
this.countTime = 180;
this.topUI.getChildByName("xin1").active = true;
this.topUI.getChildByName("xin2").active = true;
this.topUI.getChildByName("xin3").active = true;
this.topUI.getChildByName("star1").active = false;
this.topUI.getChildByName("star2").active = false;
this.topUI.getChildByName("star3").active = false;
GameData_1.default._instance.LEVEL_init();
this.schedule(this.updateCountDownTime, 1);
};
GameManager.prototype.start = function () {
var _this = this;
// this.node.on(cc.Node.EventType.TOUCH_START, this.jump, this);
this.fit();
this.init();
// GameData._instance.GM_INFO.probation = false;
if (GameData_1.default._instance.GM_INFO.probation) {
this.Player.getComponent("Player").jumpPause = true;
var tip = this.Tip.getChildByName("tip");
this.tipShow(tip, -1, true);
}
else {
this.node.getChildByName("Begin").opacity = 0;
this.node.getChildByName("Begin").scale = 2;
if (this.node.getChildByName("Begin")) {
cc.tween(this.node.getChildByName("Begin"))
.to(0.5, { opacity: 255, scale: 1 })
.delay(0.5)
.to(0.5, { opacity: 0, scale: 0 })
.call(function () {
_this.startGame();
})
.start();
}
else {
setTimeout(function () {
_this.startGame();
}, 1000);
}
}
};
//开启引导
GameManager.prototype.startGuide = function (type, revive) {
var _this = this;
this.guide = type;
console.log("startGuide", type);
if (type == 0) {
this.careteGuideBlock(1);
}
else if (type == 2) {
var block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length - 1];
cc.tween(block)
.to(0.7, { x: 0 })
.start();
this.tipHide("tip2", 3, false);
}
else if (type == 3) {
if (revive == true) {
this.round += 1;
this.careteGuideBlock(3);
}
else {
var tip = this.Tip.getChildByName("tip3");
this.tipShow(tip, type, false);
setTimeout(function () {
_this.tipHide("tip3", null, false);
_this.round += 1;
_this.careteGuideBlock(3);
}, 3000);
}
}
else if (type == 4) {
this.round += 1;
this.careteGuideBlock(4);
}
else if (type == 5) {
this.round += 1;
this.careteGuideBlock(5);
}
else if (type == 6) {
var block = this.node.getChildByName("Block").children[this.node.getChildByName("Block").children.length - 1];
cc.tween(block)
.to(0.7, { x: 0 })
.start();
this.tipHide("tip4", 7, revive);
}
else if (type == 7) {
if (revive == true) {
this.round += 1;
this.careteGuideBlock(7);
}
else {
var tip = this.Tip.getChildByName("tip5");
this.tipShow(tip, type, false);
setTimeout(function () {
_this.tipHide("tip5", null, revive);
_this.round += 1;
_this.careteGuideBlock(7);
}, 2000);
}
}
else if (type == 8) {
this.round += 1;
this.careteGuideBlock(8);
}
else if (type == 9) {
this.Player.getComponent("Player").jumpPause = true;
var tip_1 = this.Tip.getChildByName("tip6");
setTimeout(function () {
_this.tipShow(tip_1, type, false);
}, 1000);
}
};
GameManager.prototype.tipShow = function (tipName, type, showNext) {
var _this = this;
var tip = tipName;
var left = this.Tip.getChildByName("left");
var right = this.Tip.getChildByName("right");
left.width = 0;
right.width = 0;
tip.opacity = 0;
cc.tween(left)
.to(0.25, { width: 348 })
.start();
cc.tween(right)
.to(0.25, { width: 348 })
.start();
cc.tween(tip)
.delay(0.15)
.to(0.15, { opacity: 255 })
.call(function () {
_this.guide = type;
if (type == 5)
_this.guide = 6;
if (type == 5 || type == 1)
_this.Player.getComponent("Player").jumpPause = false;
})
.start();
if (showNext == true) {
this.Tip.getChildByName("btn_next").active = true;
this.Tip.getChildByName("btn_jump").active = true;
cc.tween(this.Tip.getChildByName("btn_next"))
.delay(0.5)
.to(0.2, { opacity: 255 })
.start();
cc.tween(this.Tip.getChildByName("btn_jump"))
.delay(0.5)
.to(0.2, { opacity: 255 })
.start();
}
if (tip.name == "tip6") {
this.Tip.getChildByName("btn_start").active = true;
cc.tween(this.Tip.getChildByName("btn_start"))
.delay(1)
.to(0.2, { opacity: 255 })
.start();
}
};
//隐藏
GameManager.prototype.tipHide = function (tipName, num, revive) {
var _this = this;
var tip = this.Tip.getChildByName(tipName);
var left = this.Tip.getChildByName("left");
var right = this.Tip.getChildByName("right");
cc.tween(left)
.delay(0.1)
.to(0.25, { width: 0 })
.start();
cc.tween(right)
.delay(0.1)
.to(0.25, { width: 0 })
.start();
cc.tween(tip)
.to(0.12, { opacity: 0 })
.delay(1.5)
.call(function () {
if (tip.name != "tip3" && tipName != "tip5") {
_this.Player.getComponent("Player").jumpPause = true;
}
if (num != null) {
_this.startGuide(num, revive);
}
})
.start();
};
GameManager.prototype.careteGuideBlock = function (type) {
var _this = this;
this.Ground.active = false;
var tip = this.Tip.getChildByName("tip2");
if (type == 5) {
tip = this.Tip.getChildByName("tip4");
}
this.Player.getComponent("Player").jumpPause = true;
var block = cc.instantiate(this.blockPrefab[13]);
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
if (type > 4) {
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
GameData_1.default._instance.CLICK_DATA.height = true;
}
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
block.parent = this.node.getChildByName("Block");
var num = 150;
var time = 3;
if (type == 1 || type == 5) {
num = this.round % 2 == 0 ? num : -num;
}
else if (type == 3 || type == 4 || type == 7 || type == 8 || type == 9) {
this.Player.getComponent("Player").jumpPause = false;
num = -block.x;
time = 7;
}
cc.tween(block)
.to(time, { x: num })
.call(function () {
if (type == 1 || type == 5) {
_this.Player.getComponent("Player").jumpPause = true;
_this.tipShow(tip, type, false);
}
})
.start();
};
GameManager.prototype.showGround = function (tempY) {
var _this = this;
setTimeout(function () {
_this.Ground.active = true;
_this.Ground.y = tempY;
}, 500);
};
GameManager.prototype.guideStart = function () {
this.tipHide("tip6", null, false);
this.Tip.getChildByName("btn_next").active = false;
this.Tip.getChildByName("btn_jump").active = false;
this.Tip.getChildByName("btn_start").active = false;
GameData_1.default._instance.GM_INFO.probation = false;
this.destroyBlock(false);
this.onDestroy();
cc.director.loadScene("GameScene");
};
//下一步
GameManager.prototype.guideNext = function () {
if (this.guide == -1) {
this.tipHide("tip", 0, false);
this.Tip.getChildByName("btn_next").active = false;
this.Tip.getChildByName("btn_jump").active = false;
this.Tip.getChildByName("btn_start").active = false;
}
};
//跳过
GameManager.prototype.guideJump = function () {
this.Tip.getChildByName("btn_next").active = false;
this.Tip.getChildByName("btn_jump").active = false;
this.Tip.getChildByName("btn_start").active = false;
GameData_1.default._instance.GM_INFO.probation = false;
this.destroyBlock(false);
this.onDestroy();
cc.director.loadScene("GameScene");
};
GameManager.prototype.jump = function () {
this.Player.getComponent("Player").jump();
};
GameManager.prototype.startGame = function () {
this.createBlock();
// this.createAir();
};
GameManager.prototype.addScore = function (score) {
var _this = this;
GameData_1.default._instance.CLICK_DATA.getScore = parseInt(score);
GameManager_1._instance.score += parseInt(score);
GameData_1.default._instance.CLICK_DATA.totalScore = GameManager_1._instance.score;
this.topUI.getChildByName("nandu").getComponent(cc.Label).string = GameManager_1._instance.score + "";
var scale = GameManager_1._instance.score / GameData_1.default._instance.LEVEL_INFO.scoreMax;
cc.tween(this.topUI.getChildByName("progress").getComponent(cc.Sprite))
.to(0.5, { fillRange: scale })
.call(function () {
if (scale >= GameData_1.default._instance.LEVEL_INFO.star1 && !_this.topUI.getChildByName("star1").active) {
_this.topUI.getChildByName("star1").active = true;
}
if (scale >= GameData_1.default._instance.LEVEL_INFO.star2 && !_this.topUI.getChildByName("star2").active) {
_this.topUI.getChildByName("star2").active = true;
}
if (scale >= GameData_1.default._instance.LEVEL_INFO.star3 && !_this.topUI.getChildByName("star3").active) {
_this.topUI.getChildByName("star3").active = true;
// GameData._instance.scoreMax = 150000;
}
})
.start();
};
GameManager.prototype.createBlock = function () {
if (this.over == false && this.begin == true) {
this.Ground.active = false;
this.Player.getComponent("Player").jumpPause = false;
var num = Math.floor(Math.random() * 12);
if (this.round <= 10 && num == 5) {
num = Math.floor(Math.random() * 6 + 6);
}
var block = cc.instantiate(this.blockPrefab[num]);
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
if (num > GameData_1.default._instance.GM_INFO.blockScale) {
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
GameData_1.default._instance.CLICK_DATA.height = true;
}
if (height >= 0 && this.cameraMove == false) {
this.countHeight = this.Player.getComponent("Player").basicHeight - this.Camera.node.y;
this.cameraMove = true;
}
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
block.parent = this.node.getChildByName("Block");
block.zIndex = 10;
this.block = null;
this.block = block;
this.round += 1;
this.level += 1;
if (this.round > GameData_1.default._instance.GM_INFO.levelMax)
GameData_1.default._instance.GM_INFO.levelMax = this.round;
GameData_1.default._instance.CLICK_DATA.level = this.round;
GameData_1.default._instance.CLICK_DATA.round = this.level;
GameData_1.default._instance.LEVEL_INFO.layer += GameData_1.default._instance.LEVEL_INFO.layerAdd;
if (GameData_1.default._instance.LEVEL_INFO.speed < 2)
GameData_1.default._instance.LEVEL_INFO.speed += GameData_1.default._instance.LEVEL_INFO.addSpeed;
if (GameData_1.default._instance.LEVEL_INFO.reduceSpeed <= 100)
GameData_1.default._instance.LEVEL_INFO.reduceSpeed += GameData_1.default._instance.LEVEL_INFO.jiansu;
if (this.round == GameData_1.default._instance.LEVEL_INFO.round1)
GameData_1.default._instance.LEVEL_INFO.jiansu = 2;
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round2)
GameData_1.default._instance.LEVEL_INFO.jiansu = 1;
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round3)
GameData_1.default._instance.LEVEL_INFO.jiansu = 0.5;
}
};
//产生空气
GameManager.prototype.createAir = function () {
for (var i = 0; i < 100; i++) {
this.Ground.active = false;
var num = Math.floor(Math.random() * 12);
if (this.round <= 10 && num == 5) {
num = Math.floor(Math.random() * 6 + 6);
}
var block = cc.instantiate(this.blockPrefab[num]);
var height = this.Player.getComponent("Player").basicHeight + GameData_1.default._instance.GM_INFO.blockMin;
if (num > GameData_1.default._instance.GM_INFO.blockScale) {
height += block.height + GameData_1.default._instance.GM_INFO.blockMax;
GameData_1.default._instance.CLICK_DATA.height = true;
}
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
block.parent = this.node.getChildByName("Block");
block.zIndex = 10;
this.round += 1;
this.level += 1;
if (this.round > GameData_1.default._instance.GM_INFO.levelMax)
GameData_1.default._instance.GM_INFO.levelMax = this.round;
GameData_1.default._instance.CLICK_DATA.level = this.round;
GameData_1.default._instance.CLICK_DATA.round = this.level;
GameData_1.default._instance.LEVEL_INFO.layer += GameData_1.default._instance.LEVEL_INFO.layerAdd;
GameData_1.default._instance.LEVEL_INFO.speed += GameData_1.default._instance.LEVEL_INFO.addSpeed;
if (GameData_1.default._instance.LEVEL_INFO.reduceSpeed <= 80)
GameData_1.default._instance.LEVEL_INFO.reduceSpeed += GameData_1.default._instance.LEVEL_INFO.jiansu;
if (this.round == GameData_1.default._instance.LEVEL_INFO.round1)
GameData_1.default._instance.LEVEL_INFO.jiansu = 2;
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round2)
GameData_1.default._instance.LEVEL_INFO.jiansu = 1;
else if (this.round == GameData_1.default._instance.LEVEL_INFO.round3)
GameData_1.default._instance.LEVEL_INFO.jiansu = 0.5;
}
};
GameManager.prototype.clearAir = function () {
cc.director.loadScene("GameScene");
};
//虚假碎裂块
GameManager.prototype.createCrackBlock = function () {
this.interfere = true;
GameData_1.default._instance.CLICK_DATA.fake = this.interfere;
if (this.round > 1)
this.destroyBlock(true);
if (this.over == false && this.begin == true) {
var block = cc.instantiate(this.blockPrefab[12]);
var height = this.Player.getComponent("Player").basicHeight;
if (GameData_1.default._instance.CLICK_DATA.height == true) {
height += block.height / 2;
}
block.setPosition(cc.v2(this.round % 2 == 0 ? 480 : -480, height));
block.parent = this.node.getChildByName("CrackBlock");
block.zIndex = 1;
}
};
GameManager.prototype.destroyBlock = function (type) {
if (type == true) {
if (this.node) {
if (this.node.getChildByName("CrackBlock")) {
if (this.node.getChildByName("CrackBlock").children) {
var block2 = this.node.getChildByName("CrackBlock").children;
for (var i = 0; i < block2.length; i++) {
if (block2[i]) {
block2[i].getComponent("Block").hide();
}
}
}
}
}
}
else {
var block = this.node.getChildByName("Block").children;
for (var i = 0; i < block.length; i++) {
if (block[i]) {
block[i].active = false;
}
}
}
};
GameManager.prototype.xinAction = function () {
var xin = this.topUI.getChildByName("xin1");
if (GameData_1.default._instance.GM_INFO.life == 2)
xin = this.topUI.getChildByName("xin3");
else if (GameData_1.default._instance.GM_INFO.life == 1)
xin = this.topUI.getChildByName("xin2");
cc.tween(xin)
.to(0.6, { scale: 1.6, opacity: 0 })
.call(function () {
xin.active = false;
})
.start();
};
//死亡
GameManager.prototype.getDeath = function (data) {
var _this = this;
if (data == true) {
this.destroyBlock(false);
cc.tween(this.Player)
.to(1, { y: -500 }, { easing: 'cubicIn' })
.call(function () {
_this.Player.getComponent("Player").init();
// this.Player.getComponent("Player").jumpPause = true;
if (_this.guide > 5) {
if (_this.guide == 6) {
_this.guide = 5;
_this.round = 2;
_this.startGuide(5, true);
}
else {
_this.round = 1;
_this.startGuide(6, true);
}
}
else {
_this.round = 0;
_this.startGuide(3, true);
}
})
.delay(0.5)
.call(function () {
})
.start();
}
else {
if (GameData_1.default._instance.GM_INFO.life > 0) {
GameData_1.default._instance.GM_INFO.life -= 1;
this.getDevive(1);
}
else {
GameData_1.default._instance.GM_INFO.life = -1;
this.getDevive(3);
}
}
};
//复活
GameManager.prototype.getDevive = function (time) {
var _this = this;
this.round = 0;
GameData_1.default._instance.LEVEL_init();
if (this.topUI.getChildByName("star3").active == true) {
// GameData._instance.LEVEL_INFO.scoreMax = 150000;
}
this.interfere = false;
GameData_1.default._instance.CLICK_DATA.fake = this.interfere;
this.destroyBlock(false);
var block2 = this.node.getChildByName("CrackBlock").children;
for (var i = 0; i < block2.length; i++) {
if (block2[i]) {
block2[i].active = false;
}
}
// this.blockArray = [];
var actionTime = 1;
if (this.Player.y > 500) {
actionTime = (this.Player.y + 500) / 1000 * actionTime;
}
cc.tween(this.Player)
.to(actionTime, { y: -500 }, { easing: 'cubicIn' })
.call(function () {
_this.Player.getComponent("Player").xinAction();
})
.delay(0.5)
.call(function () {
_this.xinAction();
_this.Player.getComponent("Player").init();
if (time > 1) {
_this.Xin.parent.active = true;
_this.Xin.getComponent(cc.Sprite).fillRange = 0;
cc.tween(_this.Xin.getComponent(cc.Sprite))
.to(time, { fillRange: 1 })
.delay(0.3)
.call(function () {
_this.Xin.parent.active = false;
})
.delay(0)
.call(function () {
_this.createBlock();
})
.start();
}
else {
setTimeout(function () {
_this.createBlock();
}, (time + 0.5) * 1000);
}
})
.start();
};
GameManager.prototype.setData = function () {
GameData_1.default._instance.CLICK_DATA.timer = this.countTime;
GameData_1.default._instance.CLICK_DATA.level = this.round;
GameData_1.default._instance.CLICK_DATA.round = this.level;
//CLICK_DATA 数据处理完毕后调用上传接口 上传接口内CLICK_DATA不做改变
GameTool_1.GameTool.setGameData();
};
//获取matchId 用于上传每次点击数据里面记录id方便查询
GameManager.prototype.getMatchId = function () {
var matchId = cc.sys.localStorage.getItem("matchId");
if (matchId == "undifend" || matchId == null) {
matchId = this.setMatchId();
}
else {
if (this.containsNanana(matchId) == true) {
matchId = this.setMatchId();
}
else {
var char = parseInt(matchId[10]);
if (this.level == 1) {
char += 1;
}
matchId = matchId.slice(0, 10) + char + "";
GameData_1.default._instance.GM_INFO.matchId = matchId;
cc.sys.localStorage.setItem("matchId", matchId);
}
}
return matchId;
};
//检测matchId 如果有缓存以前的nanana数据清除
GameManager.prototype.containsNanana = function (str) {
return /na/i.test(str);
};
//重新设置MatchId
GameManager.prototype.setMatchId = function () {
// 定义包含可用字符的字符集
var characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
// 创建一个数组以保存随机字符
var uuidArray = [];
// 循环10次 生成10位的UUID
for (var i = 0; i < 10; i++) {
// 生成随机索引,范围是字符集的长度
var randomIndex = Math.floor(Math.random() * characters.length);
// 从字符集中获取随机字符
var randomChar = characters.charAt(randomIndex);
// 将字符添加到数组中
uuidArray.push(randomChar);
}
var data = uuidArray.join('') + 1 + "";
cc.sys.localStorage.setItem("matchNumber", 1);
cc.sys.localStorage.setItem("matchId", data);
GameData_1.default._instance.GM_INFO.matchId = data;
return data;
};
GameManager.prototype.updateCountDownTime = function () {
var _this = this;
if (this.countTime > 0 && !GameData_1.default._instance.GM_INFO.probation) {
this.countTime -= 1;
this.time.string = this.getTimeMargin(this.countTime);
if (this.countTime < 5) {
cc.tween(this.time.node)
.to(0.25, { scale: 1.5, color: cc.color(255, 0, 0) })
.to(0.25, { scale: 1, color: cc.color(255, 255, 255) })
.start();
}
if (this.countTime <= 0) {
this.unschedule(this.updateCountDownTime);
this.begin = false;
this.over = true;
this.overStop();
this.setRank();
setTimeout(function () {
_this.overOpen();
}, 2000);
}
}
};
//停止所有动画
GameManager.prototype.overStop = function () {
if (this.Player.getComponent("Player").jumpAction)
this.Player.getComponent("Player").jumpAction.stop();
var block = this.node.getChildByName("Block").children;
for (var i = 0; i < block.length; i++) {
if (block[i]) {
if (block[i].getComponent("Block").tween)
block[i].getComponent("Block").tween.stop();
}
}
var block2 = this.node.getChildByName("CrackBlock").children;
for (var i = 0; i < block2.length; i++) {
if (block2[i]) {
if (block2[i].getComponent("Block").tween)
block2[i].getComponent("Block").tween.stop();
}
}
};
GameManager.prototype.setRank = function () {
GameData_1.default._instance.GM_INFO.score = this.score;
GameTool_1.GameTool.setRank();
};
GameManager.prototype.overOpen = function () {
this.Player.active = false;
this.destroyBlock(false);
this.destroyBlock(true);
this.GameOver.active = true;
this.GameOver.getChildByName("score").getComponent(cc.Label).string = this.score + "";
this.GameOver.getChildByName("level").getComponent(cc.Label).string =
GameData_1.default._instance.GM_INFO.levelMax + "";
// this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string =
// GameData._instance.GM_INFO.difficultyMax + "";
var difficulty = parseInt(this.difficultyArray / this.level * 10 + "");
// console.log("难度总数",this.difficultyArray,"次数",this.level,"最终",difficulty);
this.GameOver.getChildByName("difficulty").getComponent(cc.Label).string =
difficulty / 10 + "";
};
GameManager.prototype.backLoad = function () {
this.destroyBlock(false);
this.destroyBlock(true);
this.onDestroy();
cc.director.loadScene("LoadScene");
};
GameManager.prototype.again = function () {
this.destroyBlock(false);
this.destroyBlock(true);
this.onDestroy();
cc.director.loadScene("GameScene");
};
GameManager.prototype.openRank = function () {
cc.director.loadScene("RankScene");
};
//时间格式转换
GameManager.prototype.getTimeMargin = function (second) {
var total = 0;
total = second;
var hour = 0;
hour = parseInt((total / 3600) + ""); //计算整数小时数
var afterHour = total - hour * 60 * 60; //取得算出小时数后剩余的秒数
var min = parseInt((afterHour / 60) + ""); //计算整数分
var m = "" + min;
if (min < 10)
m = "0" + min;
var afterMin = total - hour * 60 * 60 - min * 60; //取得算出分后剩余的秒数
var miao = afterMin + "";
if (afterMin < 10)
miao = "0" + afterMin;
return m + ':' + miao;
};
GameManager.prototype.update = function (dt) {
if (this.cameraMove == true && this.over == false) {
this.Camera.node.y = this.Player.y - this.countHeight;
if (this.Camera.node.y <= 0)
this.Camera.node.y = 0;
this.topUI.y = this.Camera.node.y + this.drop;
}
};
var GameManager_1;
__decorate([
property(cc.Camera)
], GameManager.prototype, "Camera", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "topUI", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Player", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Ground", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Xin", void 0);
__decorate([
property(cc.Label)
], GameManager.prototype, "time", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "GameOver", void 0);
__decorate([
property(cc.Node)
], GameManager.prototype, "Tip", void 0);
__decorate([
property([cc.Prefab])
], GameManager.prototype, "blockPrefab", void 0);
GameManager = GameManager_1 = __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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxHYW1lTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVsRix1Q0FBa0M7QUFDbEMsNENBQTJDO0FBQzNDLG9EQUFtRDtBQUU3QyxJQUFBLEtBQXNCLEVBQUUsQ0FBQyxVQUFVLEVBQWxDLE9BQU8sYUFBQSxFQUFFLFFBQVEsY0FBaUIsQ0FBQztBQUcxQztJQUF5QywrQkFBWTtJQUFyRDtRQUFBLHFFQWl6QkM7UUE5eUJHLFlBQU0sR0FBYyxJQUFJLENBQUM7UUFHekIsV0FBSyxHQUFZLElBQUksQ0FBQztRQUd0QixZQUFNLEdBQVksSUFBSSxDQUFDO1FBR3ZCLFlBQU0sR0FBWSxJQUFJLENBQUM7UUFHdkIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixVQUFJLEdBQWEsSUFBSSxDQUFDO1FBR3RCLGNBQVEsR0FBWSxJQUFJLENBQUM7UUFHekIsU0FBRyxHQUFZLElBQUksQ0FBQztRQUdwQixpQkFBVyxHQUFzQixFQUFFLENBQUM7O0lBc3hCeEMsQ0FBQztvQkFqekJvQixXQUFXO0lBa0Q1Qix3QkFBd0I7SUFHeEIsNEJBQU0sR0FBTjtRQUNJLDhCQUE4QjtRQUM5QixPQUFPO1FBQ1AsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ2hELE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLG1DQUFtQztRQUNuQyxhQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUM3QixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRVMs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QUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDakQ7SUFDTCxDQUFDOztJQTd5QkQ7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzsrQ0FDSztJQUd6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzhDQUNJO0lBR3RCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7K0NBQ0s7SUFHdkI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzsrQ0FDSztJQUd2QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRDQUNFO0lBR3BCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7NkNBQ0c7SUFHdEI7UUFEQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQztpREFDTztJQUd6QjtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRDQUNFO0lBR3BCO1FBREMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29EQUNjO0lBM0JuQixXQUFXO1FBRC9CLE9BQU87T0FDYSxXQUFXLENBaXpCL0I7SUFBRCxrQkFBQztDQWp6QkQsQUFpekJDLENBanpCd0MsRUFBRSxDQUFDLFNBQVMsR0FpekJwRDtrQkFqekJvQixXQUFXIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGVhcm4gVHlwZVNjcmlwdDpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvdHlwZXNjcmlwdC5odG1sXHJcbi8vIExlYXJuIEF0dHJpYnV0ZTpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMuaHRtbFxyXG4vLyBMZWFybiBsaWZlLWN5Y2xlIGNhbGxiYWNrczpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvbGlmZS1jeWNsZS1jYWxsYmFja3MuaHRtbFxyXG5cclxuaW1wb3J0IEdhbWVEYXRhIGZyb20gJy4vR2FtZURhdGEnO1xyXG5pbXBvcnQgeyBHYW1lVG9vbCB9IGZyb20gJy4vdG9vbC9HYW1lVG9vbCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJy4vdG9vbC9Ob3RpZmljYXRpb24nO1xyXG5cclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcblxyXG5AY2NjbGFzc1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lTWFuYWdlciBleHRlbmRzIGNjLkNvbXBvbmVudCB7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLkNhbWVyYSlcclxuICAgIENhbWVyYTogY2MuQ2FtZXJhID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIHRvcFVJOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIFBsYXllcjogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBHcm91bmQ6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShjYy5Ob2RlKVxyXG4gICAgWGluOiBjYy5Ob2RlID0gbnVsbDtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTGFiZWwpXHJcbiAgICB0aW1lOiBjYy5MYWJlbCA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBHYW1lT3ZlcjogY2MuTm9kZSA9IG51bGw7XHJcblxyXG4gICAgQHByb3BlcnR5KGNjLk5vZGUpXHJcbiAgICBUaXA6IGNjLk5vZGUgPSBudWxsO1xyXG5cclxuICAgIEBwcm9wZXJ0eShbY2MuUHJlZmFiXSlcclxuICAgIGJsb2NrUHJlZmFiIDogQXJyYXk8Y2MuUHJlZmFiPiA9IFtdO1xyXG5cclxuICAgIFxyXG5cclxuICAgIHJvdW5kOiBudW1iZXI7ICAgICAgLy/lm57lkIhcclxuICAgIGxldmVsOiBudW1iZXI7ICAgICAgLy/lm57lkIhcclxuICAgIHN0YXRpYyBfaW5zdGFuY2U6IGFueTtcclxuICAgIGJsb2NrQXJyYXk6IGFueTtcclxuICAgIGNhbWVyYU1vdmU6Ym9vbGVhblxyXG4gICAgY291bnRIZWlnaHQ6bnVtYmVyO1xyXG4gICAgY291bnRUaW1lOiBudW1iZXI7XHJcbiAgICBvdmVyOiBib29sZWFuO1xyXG4gICAgYmVnaW46IGJvb2xlYW47XHJcbiAgICBpbnRlcmZlcmU6IGJvb2xlYW47XHJcbiAgICBvbGRTcGVlZDogbnVtYmVyOyAgICAgIC8v5LiK5LiA5Zue5ZCI6YCf5bqmXHJcbiAgICBzY29yZTogbnVtYmVyOyAgICAgIC8v5oC75b6X5YiGXHJcbiAgICBkaWZmaWN1bHR5TWF4Om51bWJlcjsgLy/mnIDpq5jpmr7luqbns7vmlbBcclxuICAgIGRpZmZpY3VsdHlBcnJheTpudW1iZXI7XHJcbiAgICBkcm9wOiBudW1iZXI7ICAgICAgLy/mkYTlg4/mnLrokL3lt65cclxuICAgIGd1aWRlOiBudW1iZXI7ICAgICAvL+iusOW9leW8leWvvOatpemqpFxyXG4gICAgQWlyOiBhbnk7XHJcbiAgICBBaXIyOiBhbnk7XHJcbiAgICBibG9jazogY2MuTm9kZTtcclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG5cclxuXHJcbiAgICBvbkxvYWQgKCkge1xyXG4gICAgICAgIC8vIGNjLmdhbWUuc2V0RnJhbWVSYXRlKDU5LjkpO1xyXG4gICAgICAgIC8vIOekuuS+i+S9v+eUqFxyXG4gICAgICAgIHZhciBtYW5hZ2VyID0gY2MuZGlyZWN0b3IuZ2V0Q29sbGlzaW9uTWFuYWdlcigpO1xyXG4gICAgICAgIG1hbmFnZXIuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgLy8gbWFuYWdlci5lbmFibGVkRGVidWdEcmF3ID0gdHJ1ZTtcclxuICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2UgPSB0aGlzO1xyXG4gICAgICAgIC8vIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuQWlyID0gW107XHJcbiAgICAgICAgdGhpcy5BaXIyID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uRW5hYmxlKCk6IHZvaWQge1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcImNyZWF0ZUJsb2NrXCIsdGhpcy5jcmVhdGVCbG9jayx0aGlzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJhZGRTY29yZVwiLHRoaXMuYWRkU2NvcmUsdGhpcyk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9uKFwiY3JlYXRlQ3JhY2tCbG9ja1wiLHRoaXMuY3JlYXRlQ3JhY2tCbG9jayx0aGlzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJzaG93R3JvdW5kXCIsdGhpcy5zaG93R3JvdW5kLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcImRlYXRoXCIsdGhpcy5nZXREZWF0aCx0aGlzKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub24oXCJqdW1wXCIsdGhpcy5qdW1wLHRoaXMpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vbihcInNldERhdGFcIix0aGlzLnNldERhdGEsdGhpcyk7XHJcbiAgICAgICAgXHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcImNyZWF0ZUJsb2NrXCIsdGhpcy5jcmVhdGVCbG9jayk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcImFkZFNjb3JlXCIsdGhpcy5hZGRTY29yZSk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcImNyZWF0ZUNyYWNrQmxvY2tcIix0aGlzLmNyZWF0ZUNyYWNrQmxvY2spO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJkZWF0aFwiLHRoaXMuZ2V0RGVhdGgpO1xyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5vZmYoXCJqdW1wXCIsdGhpcy5qdW1wKTtcclxuICAgICAgICBOb3RpZmljYXRpb24ub2ZmKFwic2hvd0dyb3VuZFwiLHRoaXMuc2hvd0dyb3VuZCk7XHJcbiAgICAgICAgTm90aWZpY2F0aW9uLm9mZihcInNldERhdGFcIix0aGlzLnNldERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5qC55o2u5piv5ZCm5YWo6Z2i5bGP77yM5YGa54us56uL6YCC6YWN5pa56Z2iXHJcbiAgICBmaXQoKXtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZzJcIikueSA9IC0yMTY3LjY3NTtcclxuICAgICAgICB2YXIgamcgPSB0aGlzLnNldEZpdCgpO1xyXG4gICAgICAgIGlmKCFqZyl7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImJnMlwiKS55ID0gLTIxMDA7XHJcbiAgICAgICAgICAgIHRoaXMudG9wVUkueSA9IDY2MDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLy/liKTmlq3lhajpnaLlsY9cclxuICAgIGdldFNldFNjcmVlblJlc29sdXRpb25GbGFnICgpIHtcclxuICAgICAgICBsZXQgc2l6ZSA9IGNjLndpblNpemU7XHJcbiAgICAgICAgbGV0IHdpZHRoID0gc2l6ZS53aWR0aDtcclxuICAgICAgICBsZXQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgaWYgKChoZWlnaHQgLyB3aWR0aCkgPiAoMTYuMiAvIDkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICAvL+WIpOaWreWFqOmdouWxj+mAgumFjVxyXG4gICAgc2V0Rml0ICgpIHtcclxuICAgICAgICBsZXQgZmxhZyA9IHRoaXMuZ2V0U2V0U2NyZWVuUmVzb2x1dGlvbkZsYWcoKTtcclxuICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmbGFnO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLmRyb3AgPSB0aGlzLnRvcFVJLnkgLSB0aGlzLkNhbWVyYS5ub2RlLnk7XHJcbiAgICAgICAgdGhpcy5zY29yZSA9IDA7XHJcbiAgICAgICAgdGhpcy5vbGRTcGVlZCA9IDEwO1xyXG4gICAgICAgIHRoaXMuZ3VpZGUgPSAtMTtcclxuICAgICAgICB0aGlzLmJlZ2luID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm92ZXIgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmludGVyZmVyZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91bmQgPSAwO1xyXG4gICAgICAgIHRoaXMubGV2ZWwgPSAwO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ID0gMTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5kaWZmaWN1bHR5TWF4ID0gMTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID0gMztcclxuICAgICAgICB0aGlzLmJsb2NrQXJyYXkgPSBbXTtcclxuICAgICAgICB0aGlzLmRpZmZpY3VsdHlBcnJheSA9IDA7XHJcbiAgICAgICAgdGhpcy5jYW1lcmFNb3ZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb3VudFRpbWUgPSAxODA7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjFcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluMlwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4zXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFyMlwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX2luaXQoKTtcclxuICAgICAgICB0aGlzLnNjaGVkdWxlKHRoaXMudXBkYXRlQ291bnREb3duVGltZSwxKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydCAoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5ub2RlLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX1NUQVJULCB0aGlzLmp1bXAsIHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZml0KCk7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgLy8gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ucHJvYmF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ucHJvYmF0aW9uKXtcclxuICAgICAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCB0aXAgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcInRpcFwiKTtcclxuICAgICAgICAgICAgdGhpcy50aXBTaG93KHRpcCwtMSx0cnVlKTtcclxuXHJcbiAgICAgICAgfSBcclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZWdpblwiKS5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmVnaW5cIikuc2NhbGUgPSAyO1xyXG4gICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZWdpblwiKSl7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCZWdpblwiKSlcclxuICAgICAgICAgICAgICAgIC50bygwLjUse29wYWNpdHk6MjU1LHNjYWxlOjF9KVxyXG4gICAgICAgICAgICAgICAgLmRlbGF5KDAuNSlcclxuICAgICAgICAgICAgICAgIC50bygwLjUse29wYWNpdHk6MCxzY2FsZTowfSlcclxuICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHYW1lKCk7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgfSBcclxuICAgIH1cclxuXHJcbiAgICAvL+W8gOWQr+W8leWvvFxyXG4gICAgc3RhcnRHdWlkZSh0eXBlLHJldml2ZSl7ICAgLy90eXBl5Li656ys5Yeg5q2lXHJcbiAgICAgICAgdGhpcy5ndWlkZSA9IHR5cGU7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJzdGFydEd1aWRlXCIsdHlwZSk7XHJcbiAgICAgICAgaWYodHlwZSA9PSAwKXtcclxuICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gMil7XHJcbiAgICAgICAgICAgIGxldCBibG9jayA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuW3RoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgY2MudHdlZW4oYmxvY2spXHJcbiAgICAgICAgICAgIC50bygwLjcse3g6MH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnRpcEhpZGUoXCJ0aXAyXCIsMyxmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSAzKXtcclxuICAgICAgICAgICAgaWYocmV2aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXAzXCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aXBTaG93KHRpcCx0eXBlLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGlwSGlkZShcInRpcDNcIixudWxsLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdW5kICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jaygzKTtcclxuICAgICAgICAgICAgICAgIH0sIDMwMDApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gNCl7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gNSl7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gNil7XHJcbiAgICAgICAgICAgIGxldCBibG9jayA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuW3RoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpLmNoaWxkcmVuLmxlbmd0aC0xXTtcclxuICAgICAgICAgICAgY2MudHdlZW4oYmxvY2spXHJcbiAgICAgICAgICAgIC50bygwLjcse3g6MH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB0aGlzLnRpcEhpZGUoXCJ0aXA0XCIsNyxyZXZpdmUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gNyl7XHJcbiAgICAgICAgICAgIGlmKHJldml2ZSA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZXRlR3VpZGVCbG9jayg3KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwidGlwNVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGlwU2hvdyh0aXAsdHlwZSxmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRpcEhpZGUoXCJ0aXA1XCIsbnVsbCxyZXZpdmUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJldGVHdWlkZUJsb2NrKDcpO1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSA4KXtcclxuICAgICAgICAgICAgdGhpcy5yb3VuZCArPSAxO1xyXG4gICAgICAgICAgICB0aGlzLmNhcmV0ZUd1aWRlQmxvY2soOCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSA5KXtcclxuICAgICAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGxldCB0aXAgPSB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcInRpcDZcIik7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aXBTaG93KHRpcCx0eXBlLGZhbHNlKTtcclxuICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGlwU2hvdyh0aXBOYW1lLHR5cGUsc2hvd05leHQpe1xyXG4gICAgICAgIGxldCB0aXAgPSB0aXBOYW1lO1xyXG4gICAgICAgIGxldCBsZWZ0ID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJsZWZ0XCIpO1xyXG4gICAgICAgIGxldCByaWdodCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwicmlnaHRcIik7XHJcbiAgICAgICAgbGVmdC53aWR0aCA9IDA7IHJpZ2h0LndpZHRoID0gMDt0aXAub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgY2MudHdlZW4obGVmdClcclxuICAgICAgICAudG8oMC4yNSx7d2lkdGg6MzQ4fSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICBjYy50d2VlbihyaWdodClcclxuICAgICAgICAudG8oMC4yNSx7d2lkdGg6MzQ4fSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICBjYy50d2Vlbih0aXApXHJcbiAgICAgICAgLmRlbGF5KDAuMTUpXHJcbiAgICAgICAgLnRvKDAuMTUse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgdGhpcy5ndWlkZSA9IHR5cGU7XHJcbiAgICAgICAgICAgIGlmKHR5cGUgPT0gNSkgdGhpcy5ndWlkZSA9IDY7XHJcbiAgICAgICAgICAgIGlmKHR5cGUgPT0gNSB8fCB0eXBlID09IDEgKSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICBpZihzaG93TmV4dCA9PSB0cnVlKXtcclxuICAgICAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fbmV4dFwiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9qdW1wXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX25leHRcIikpXHJcbiAgICAgICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX2p1bXBcIikpXHJcbiAgICAgICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgICAgIC50bygwLjIse29wYWNpdHk6MjU1fSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRpcC5uYW1lID09IFwidGlwNlwiKXtcclxuICAgICAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fc3RhcnRcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgY2MudHdlZW4odGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fc3RhcnRcIikpXHJcbiAgICAgICAgICAgIC5kZWxheSgxKVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v6ZqQ6JePXHJcbiAgICB0aXBIaWRlKHRpcE5hbWUsbnVtLHJldml2ZSl7XHJcbiAgICAgICAgbGV0IHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKHRpcE5hbWUpO1xyXG4gICAgICAgIGxldCBsZWZ0ID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJsZWZ0XCIpO1xyXG4gICAgICAgIGxldCByaWdodCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwicmlnaHRcIik7XHJcbiAgICAgICAgY2MudHdlZW4obGVmdClcclxuICAgICAgICAuZGVsYXkoMC4xKVxyXG4gICAgICAgIC50bygwLjI1LHt3aWR0aDowfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICBjYy50d2VlbihyaWdodClcclxuICAgICAgICAuZGVsYXkoMC4xKVxyXG4gICAgICAgIC50bygwLjI1LHt3aWR0aDowfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICBjYy50d2Vlbih0aXApXHJcbiAgICAgICAgLnRvKDAuMTIse29wYWNpdHk6MH0pXHJcbiAgICAgICAgLmRlbGF5KDEuNSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgaWYodGlwLm5hbWUgIT0gXCJ0aXAzXCIgJiYgdGlwTmFtZSAhPSBcInRpcDVcIil7XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihudW0gIT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUobnVtLHJldml2ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2FyZXRlR3VpZGVCbG9jayh0eXBlKXtcclxuICAgICAgICB0aGlzLkdyb3VuZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICBsZXQgdGlwID0gdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXAyXCIpO1xyXG4gICAgICAgIGlmKHR5cGUgPT0gNSl7XHJcbiAgICAgICAgICAgIHRpcCA9IHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwidGlwNFwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYlsxM10pO1xyXG4gICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuYmFzaWNIZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01pbjtcclxuICAgICAgICBpZih0eXBlID4gNCl7XHJcbiAgICAgICAgICAgIGhlaWdodCArPSBibG9jay5oZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01heDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuaGVpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgIGJsb2NrLnBhcmVudCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkJsb2NrXCIpO1xyXG4gICAgICAgIGxldCBudW0gPSAxNTA7XHJcbiAgICAgICAgbGV0IHRpbWUgPTM7XHJcbiAgICAgICAgaWYodHlwZSA9PSAxIHx8IHR5cGUgPT0gNSl7XHJcbiAgICAgICAgICAgIG51bSA9IHRoaXMucm91bmQlMj09MD9udW06LW51bTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IDMgfHwgdHlwZSA9PSA0IHx8IHR5cGUgPT03IHx8IHR5cGUgPT0gOCB8fCB0eXBlID09IDkpe1xyXG4gICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcFBhdXNlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIG51bSA9IC1ibG9jay54O1xyXG4gICAgICAgICAgICB0aW1lID0gNztcclxuICAgICAgICB9XHJcbiAgICAgICAgY2MudHdlZW4oYmxvY2spICAgICBcclxuICAgICAgICAudG8odGltZSx7eDpudW19KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBpZih0eXBlID09IDEgfHwgdHlwZSA9PSA1KXtcclxuICAgICAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aXBTaG93KHRpcCx0eXBlLGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dHcm91bmQodGVtcFkpe1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLkdyb3VuZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLkdyb3VuZC55ID0gdGVtcFk7XHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuICAgIGd1aWRlU3RhcnQoKXtcclxuICAgICAgICB0aGlzLnRpcEhpZGUoXCJ0aXA2XCIsbnVsbCxmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fbmV4dFwiKS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9qdW1wXCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX3N0YXJ0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnByb2JhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKGZhbHNlKTtcclxuICAgICAgICB0aGlzLm9uRGVzdHJveSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgIH1cclxuICAgIC8v5LiL5LiA5q2lXHJcbiAgICBndWlkZU5leHQoKXtcclxuICAgICAgICBpZih0aGlzLmd1aWRlID09IC0xKXtcclxuICAgICAgICAgICAgdGhpcy50aXBIaWRlKFwidGlwXCIsMCxmYWxzZSk7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX25leHRcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX2p1bXBcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX3N0YXJ0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8v6Lez6L+HXHJcbiAgICBndWlkZUp1bXAoKXtcclxuICAgICAgICB0aGlzLlRpcC5nZXRDaGlsZEJ5TmFtZShcImJ0bl9uZXh0XCIpLmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuVGlwLmdldENoaWxkQnlOYW1lKFwiYnRuX2p1bXBcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5UaXAuZ2V0Q2hpbGRCeU5hbWUoXCJidG5fc3RhcnRcIikuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ucHJvYmF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHRoaXMub25EZXN0cm95KCk7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGp1bXAoKXtcclxuICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuanVtcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0R2FtZSgpe1xyXG4gICAgICAgIHRoaXMuY3JlYXRlQmxvY2soKTtcclxuICAgICAgICAvLyB0aGlzLmNyZWF0ZUFpcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFNjb3JlKHNjb3JlKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5nZXRTY29yZSA9IHBhcnNlSW50KHNjb3JlKTtcclxuICAgICAgICBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc2NvcmUgKz0gcGFyc2VJbnQoc2NvcmUpO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLnRvdGFsU2NvcmUgPSBHYW1lTWFuYWdlci5faW5zdGFuY2Uuc2NvcmU7XHJcbiAgICAgICAgdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcIm5hbmR1XCIpLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nICA9IEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5zY29yZSArIFwiXCI7XHJcbiAgICAgICAgdmFyIHNjYWxlID0gR2FtZU1hbmFnZXIuX2luc3RhbmNlLnNjb3JlL0dhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnNjb3JlTWF4O1xyXG4gICAgICAgIGNjLnR3ZWVuKHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJwcm9ncmVzc1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKSlcclxuICAgICAgICAudG8oMC41LHtmaWxsUmFuZ2U6c2NhbGV9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMSAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIxXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjFcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMiAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIyXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjJcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihzY2FsZSA+PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zdGFyMyAmJiAhdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInN0YXIzXCIpLmFjdGl2ZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIEdhbWVEYXRhLl9pbnN0YW5jZS5zY29yZU1heCA9IDE1MDAwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlQmxvY2soKXtcclxuICAgICAgICBpZih0aGlzLm92ZXIgPT0gZmFsc2UgJiYgdGhpcy5iZWdpbiA9PSB0cnVlKXtcclxuICAgICAgICAgICAgdGhpcy5Hcm91bmQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wUGF1c2UgPSBmYWxzZTtcclxuICAgICAgICAgICAgdmFyIG51bSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoxMik7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPD0gMTAgJiYgbnVtID09IDUpe1xyXG4gICAgICAgICAgICAgICAgbnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjYgKyA2KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gY2MuaW5zdGFudGlhdGUodGhpcy5ibG9ja1ByZWZhYltudW1dKTtcclxuICAgICAgICAgICAgbGV0IGhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCArIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmJsb2NrTWluO1xyXG4gICAgICAgICAgICBpZihudW0gPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja1NjYWxlKXtcclxuICAgICAgICAgICAgICAgIGhlaWdodCArPSBibG9jay5oZWlnaHQgKyBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja01heDtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmhlaWdodCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgICAgICBpZihoZWlnaHQgPj0gMCAmJiB0aGlzLmNhbWVyYU1vdmUgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudEhlaWdodCA9IHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5iYXNpY0hlaWdodCAtIHRoaXMuQ2FtZXJhLm5vZGUueTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhTW92ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmxvY2suc2V0UG9zaXRpb24oY2MudjIodGhpcy5yb3VuZCUyPT0wPzQ4MDotNDgwLGhlaWdodCkpO1xyXG4gICAgICAgICAgICBibG9jay5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgYmxvY2suekluZGV4ID0gMTA7XHJcbiAgICAgICAgICAgIHRoaXMuYmxvY2sgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2s7XHJcbiAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgdGhpcy5sZXZlbCArPSAxO1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvdW5kID4gR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXgpIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ID0gdGhpcy5yb3VuZDtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEubGV2ZWwgPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5yb3VuZCA9IHRoaXMubGV2ZWw7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmxheWVyQWRkO1xyXG4gICAgICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zcGVlZDwyKUdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnNwZWVkICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmFkZFNwZWVkO1xyXG5cclxuICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ucmVkdWNlU3BlZWQgPD0gMTAwKVxyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ucmVkdWNlU3BlZWQgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1O1xyXG4gICAgICAgICAgICBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMSkgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMjtcclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMikgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMTtcclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMykgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMC41O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAgICAgLy/kuqfnlJ/nqbrmsJRcclxuICAgICAgICBjcmVhdGVBaXIoKXtcclxuICAgICAgICAgICAgZm9yKGxldCBpPTA7IGk8MTAwO2krKyl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkdyb3VuZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHZhciBudW0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqMTIpO1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5yb3VuZCA8PSAxMCAmJiBudW0gPT0gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjYgKyA2KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciBibG9jayA9IGNjLmluc3RhbnRpYXRlKHRoaXMuYmxvY2tQcmVmYWJbbnVtXSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGVpZ2h0ID0gdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmJhc2ljSGVpZ2h0ICsgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYmxvY2tNaW47XHJcbiAgICAgICAgICAgICAgICBpZihudW0gPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5ibG9ja1NjYWxlKXtcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQgKz0gYmxvY2suaGVpZ2h0ICsgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uYmxvY2tNYXg7XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuaGVpZ2h0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuXHJcbiAgICAgICAgICAgICAgICBibG9jay5zZXRQb3NpdGlvbihjYy52Mih0aGlzLnJvdW5kJTI9PTA/NDgwOi00ODAsaGVpZ2h0KSk7XHJcbiAgICAgICAgICAgICAgICBibG9jay5wYXJlbnQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKTtcclxuICAgICAgICAgICAgICAgIGJsb2NrLnpJbmRleCA9IDEwO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91bmQgKz0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGV2ZWwgKz0gMTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPiBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5sZXZlbE1heCkgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGV2ZWxNYXggPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEubGV2ZWwgPSB0aGlzLnJvdW5kO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEucm91bmQgPSB0aGlzLmxldmVsO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ubGF5ZXIgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ubGF5ZXJBZGQ7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zcGVlZCArPSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5hZGRTcGVlZDtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkIDw9IDgwKVxyXG4gICAgICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJlZHVjZVNwZWVkICs9IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucm91bmQgPT0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8ucm91bmQxKSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5qaWFuc3UgPSAyO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZih0aGlzLnJvdW5kID09IEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLnJvdW5kMikgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uamlhbnN1ID0gMTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5yb3VuZCA9PSBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5yb3VuZDMpIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmppYW5zdSA9IDAuNTtcclxuICAgICAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICAgICAgY2xlYXJBaXIoKXtcclxuICAgICAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAvL+iZmuWBh+eijuijguWdl1xyXG4gICAgY3JlYXRlQ3JhY2tCbG9jaygpe1xyXG4gICAgICAgIHRoaXMuaW50ZXJmZXJlID0gdHJ1ZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5mYWtlID0gdGhpcy5pbnRlcmZlcmU7XHJcbiAgICAgICAgaWYodGhpcy5yb3VuZCA+IDEpIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIGlmKHRoaXMub3ZlciA9PSBmYWxzZSAmJiB0aGlzLmJlZ2luID09IHRydWUpe1xyXG4gICAgICAgICAgICB2YXIgYmxvY2sgPSBjYy5pbnN0YW50aWF0ZSh0aGlzLmJsb2NrUHJlZmFiWzEyXSk7XHJcbiAgICAgICAgICAgIGxldCBoZWlnaHQgPSB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuYmFzaWNIZWlnaHQ7XHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmhlaWdodCA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIGhlaWdodCArPSBibG9jay5oZWlnaHQvMjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBibG9jay5zZXRQb3NpdGlvbihjYy52Mih0aGlzLnJvdW5kJTI9PTA/NDgwOi00ODAsaGVpZ2h0KSk7XHJcbiAgICAgICAgICAgIGJsb2NrLnBhcmVudCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIik7XHJcbiAgICAgICAgICAgIGJsb2NrLnpJbmRleCA9IDE7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgZGVzdHJveUJsb2NrKHR5cGUpe1xyXG4gICAgICAgIGlmKHR5cGUgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubm9kZSl7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGJsb2NrMiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIkNyYWNrQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrMi5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihibG9jazJbaV0pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrMltpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdmFyIGJsb2NrID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQmxvY2tcIikuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrLmxlbmd0aDsgaSsrKXtcclxuICAgICAgICAgICAgICAgIGlmKGJsb2NrW2ldKXtcclxuICAgICAgICAgICAgICAgICAgICBibG9ja1tpXS5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB4aW5BY3Rpb24oKXtcclxuICAgICAgICBsZXQgeGluICA9ICB0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwieGluMVwiKTtcclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5saWZlID09IDIpIHhpbiA9IHRoaXMudG9wVUkuZ2V0Q2hpbGRCeU5hbWUoXCJ4aW4zXCIpO1xyXG4gICAgICAgIGVsc2UgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSA9PSAxKSAgeGluID0gdGhpcy50b3BVSS5nZXRDaGlsZEJ5TmFtZShcInhpbjJcIik7XHJcbiAgICAgICAgY2MudHdlZW4oeGluKVxyXG4gICAgICAgIC50bygwLjYse3NjYWxlOjEuNixvcGFjaXR5OjB9KVxyXG4gICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICB4aW4uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuICAgIC8v5q275LqhXHJcbiAgICBnZXREZWF0aChkYXRhKXtcclxuICAgICAgICBpZihkYXRhID09IHRydWUpe1xyXG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuUGxheWVyKVxyXG4gICAgICAgICAgICAudG8oMSx7eTotNTAwfSx7ZWFzaW5nOidjdWJpY0luJ30pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgICAgICB0aGlzLlBsYXllci5nZXRDb21wb25lbnQoXCJQbGF5ZXJcIikuaW5pdCgpO1xyXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBQYXVzZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmd1aWRlID4gNSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5ndWlkZSA9PSA2KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ndWlkZSA9IDU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0R3VpZGUoNSx0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3VuZCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHdWlkZSg2LHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91bmQgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRHdWlkZSgzLHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgPiAwKXtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgLT0gMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGV2aXZlKDEpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxpZmUgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGV2aXZlKDMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8v5aSN5rS7XHJcbiAgICBnZXREZXZpdmUodGltZSl7XHJcbiAgICAgICAgdGhpcy5yb3VuZCA9IDA7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX2luaXQoKTtcclxuICAgICAgICBpZih0aGlzLnRvcFVJLmdldENoaWxkQnlOYW1lKFwic3RhcjNcIikuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAvLyBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5zY29yZU1heCA9IDE1MDAwMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pbnRlcmZlcmUgPSBmYWxzZTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5mYWtlID0gdGhpcy5pbnRlcmZlcmU7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHZhciBibG9jazIgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJDcmFja0Jsb2NrXCIpLmNoaWxkcmVuO1xyXG4gICAgICAgIGZvcihsZXQgaT0wOyBpPGJsb2NrMi5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGlmKGJsb2NrMltpXSl7XHJcbiAgICAgICAgICAgICAgICBibG9jazJbaV0uYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5ibG9ja0FycmF5ID0gW107XHJcbiAgICAgICAgbGV0IGFjdGlvblRpbWUgPSAxO1xyXG4gICAgICAgIGlmKHRoaXMuUGxheWVyLnkgPiA1MDApe1xyXG4gICAgICAgICAgICBhY3Rpb25UaW1lID0gKHRoaXMuUGxheWVyLnkgKyA1MDApLzEwMDAqYWN0aW9uVGltZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5QbGF5ZXIpXHJcbiAgICAgICAgLnRvKGFjdGlvblRpbWUse3k6LTUwMH0se2Vhc2luZzonY3ViaWNJbid9KVxyXG4gICAgICAgIC5jYWxsKCgpPT57XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS54aW5BY3Rpb24oKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgIHRoaXMueGluQWN0aW9uKCk7XHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5pbml0KCk7XHJcbiAgICAgICAgICAgIGlmKHRpbWUgPiAxKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuWGluLnBhcmVudC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5YaW4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRoaXMuWGluLmdldENvbXBvbmVudChjYy5TcHJpdGUpKVxyXG4gICAgICAgICAgICAgICAgLnRvKHRpbWUse2ZpbGxSYW5nZToxfSlcclxuICAgICAgICAgICAgICAgIC5kZWxheSgwLjMpXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLlhpbi5wYXJlbnQuYWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmRlbGF5KDApXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUJsb2NrKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvY2soKTtcclxuICAgICAgICAgICAgICAgIH0sICh0aW1lKzAuNSkqMTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERhdGEoKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS50aW1lciA9IHRoaXMuY291bnRUaW1lO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmxldmVsID0gdGhpcy5yb3VuZDtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5yb3VuZCA9IHRoaXMubGV2ZWw7XHJcbiAgICAgICAgLy9DTElDS19EQVRBIOaVsOaNruWkhOeQhuWujOavleWQjuiwg+eUqOS4iuS8oOaOpeWPoyAg5LiK5Lyg5o6l5Y+j5YaFQ0xJQ0tfREFUQeS4jeWBmuaUueWPmFxyXG4gICAgICAgIEdhbWVUb29sLnNldEdhbWVEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/ojrflj5ZtYXRjaElkICDnlKjkuo7kuIrkvKDmr4/mrKHngrnlh7vmlbDmja7ph4zpnaLorrDlvZVpZOaWueS+v+afpeivolxyXG4gICAgZ2V0TWF0Y2hJZCAoKXtcclxuICAgICAgICBsZXQgbWF0Y2hJZCA9IGNjLnN5cy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm1hdGNoSWRcIik7XHJcbiAgICAgICAgaWYobWF0Y2hJZCA9PSBcInVuZGlmZW5kXCIgfHwgbWF0Y2hJZD09bnVsbCl7XHJcbiAgICAgICAgICAgIG1hdGNoSWQgPSAgdGhpcy5zZXRNYXRjaElkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY29udGFpbnNOYW5hbmEobWF0Y2hJZCkgPT0gdHJ1ZSl7XHJcbiAgICAgICAgICAgICAgICBtYXRjaElkID0gIHRoaXMuc2V0TWF0Y2hJZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBsZXQgY2hhciA9IHBhcnNlSW50KG1hdGNoSWRbMTBdKTtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMubGV2ZWwgPT0gMSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhciArPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbWF0Y2hJZCAgPSBtYXRjaElkLnNsaWNlKDAsIDEwKSArIGNoYXIgKyBcIlwiO1xyXG4gICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubWF0Y2hJZCA9IG1hdGNoSWQ7XHJcbiAgICAgICAgICAgICAgICBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJtYXRjaElkXCIsbWF0Y2hJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoSWQ7XHJcbiAgICB9XHJcbiAgICAvL+ajgOa1i21hdGNoSWQg5aaC5p6c5pyJ57yT5a2Y5Lul5YmN55qEbmFuYW5h5pWw5o2u5riF6ZmkXHJcbiAgICBjb250YWluc05hbmFuYShzdHIpIHtcclxuICAgICAgICByZXR1cm4gL25hL2kudGVzdChzdHIpO1xyXG4gICAgfVxyXG4gICAgLy/ph43mlrDorr7nva5NYXRjaElkXHJcbiAgICBzZXRNYXRjaElkICgpe1xyXG4gICAgICAgIC8vIOWumuS5ieWMheWQq+WPr+eUqOWtl+espueahOWtl+espumbhlxyXG4gICAgICAgIGNvbnN0IGNoYXJhY3RlcnMgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWjAxMjM0NTY3ODknO1xyXG4gICAgICAgIC8vIOWIm+W7uuS4gOS4quaVsOe7hOS7peS/neWtmOmaj+acuuWtl+esplxyXG4gICAgICAgIGNvbnN0IHV1aWRBcnJheSA9IFtdO1xyXG4gICAgICAgIC8vIOW+queOrzEw5qyhIOeUn+aIkDEw5L2N55qEVVVJRFxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgLy8g55Sf5oiQ6ZqP5py657Si5byV77yM6IyD5Zu05piv5a2X56ym6ZuG55qE6ZW/5bqmXHJcbiAgICAgICAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVycy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAvLyDku47lrZfnrKbpm4bkuK3ojrflj5bpmo/mnLrlrZfnrKZcclxuICAgICAgICAgICAgY29uc3QgcmFuZG9tQ2hhciA9IGNoYXJhY3RlcnMuY2hhckF0KHJhbmRvbUluZGV4KTtcclxuICAgICAgICAgICAgLy8g5bCG5a2X56ym5re75Yqg5Yiw5pWw57uE5LitXHJcbiAgICAgICAgICAgIHV1aWRBcnJheS5wdXNoKHJhbmRvbUNoYXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZGF0YSA9ICB1dWlkQXJyYXkuam9pbignJykgKyAxICsgXCJcIjtcclxuICAgICAgICBjYy5zeXMubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJtYXRjaE51bWJlclwiLDEpO1xyXG4gICAgICAgIGNjLnN5cy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcIm1hdGNoSWRcIixkYXRhKTtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5tYXRjaElkID0gZGF0YTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDb3VudERvd25UaW1lICgpIHtcclxuICAgICAgICBpZiAodGhpcy5jb3VudFRpbWUgPiAwICYmICFHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5wcm9iYXRpb24pIHtcclxuICAgICAgICAgICAgdGhpcy5jb3VudFRpbWUgLT0gMTtcclxuICAgICAgICAgICAgdGhpcy50aW1lLnN0cmluZyA9IHRoaXMuZ2V0VGltZU1hcmdpbih0aGlzLmNvdW50VGltZSk7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuY291bnRUaW1lIDwgNSl7XHJcbiAgICAgICAgICAgICAgICBjYy50d2Vlbih0aGlzLnRpbWUubm9kZSlcclxuICAgICAgICAgICAgICAgIC50bygwLjI1LHtzY2FsZToxLjUsY29sb3I6Y2MuY29sb3IoMjU1LDAsMCl9KVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuMjUse3NjYWxlOjEsY29sb3I6Y2MuY29sb3IoMjU1LDI1NSwyNTUpfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYodGhpcy5jb3VudFRpbWUgPD0gMCl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2NoZWR1bGUodGhpcy51cGRhdGVDb3VudERvd25UaW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMub3ZlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJTdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmsoKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3Zlck9wZW4oKTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy/lgZzmraLmiYDmnInliqjnlLtcclxuICAgIG92ZXJTdG9wKCl7XHJcbiAgICAgICAgaWYodGhpcy5QbGF5ZXIuZ2V0Q29tcG9uZW50KFwiUGxheWVyXCIpLmp1bXBBY3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuUGxheWVyLmdldENvbXBvbmVudChcIlBsYXllclwiKS5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICB2YXIgYmxvY2sgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJCbG9ja1wiKS5jaGlsZHJlbjtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTxibG9jay5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgICAgIGlmKGJsb2NrW2ldKXtcclxuICAgICAgICAgICAgICAgIGlmKGJsb2NrW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnR3ZWVuKVxyXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnR3ZWVuLnN0b3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgYmxvY2syID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiQ3JhY2tCbG9ja1wiKS5jaGlsZHJlbjtcclxuICAgICAgICBmb3IobGV0IGk9MDsgaTxibG9jazIubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgICBpZihibG9jazJbaV0pe1xyXG4gICAgICAgICAgICAgICAgaWYoYmxvY2syW2ldLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnR3ZWVuKVxyXG4gICAgICAgICAgICAgICAgICAgIGJsb2NrMltpXS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS50d2Vlbi5zdG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0UmFuaygpe1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLnNjb3JlID0gdGhpcy5zY29yZTtcclxuICAgICAgICBHYW1lVG9vbC5zZXRSYW5rKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Zlck9wZW4oKXtcclxuICAgICAgICB0aGlzLlBsYXllci5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRlc3Ryb3lCbG9jayhmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2sodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5HYW1lT3Zlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuR2FtZU92ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJzY29yZVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IHRoaXMuc2NvcmUgKyBcIlwiO1xyXG4gICAgICAgIHRoaXMuR2FtZU92ZXIuZ2V0Q2hpbGRCeU5hbWUoXCJsZXZlbFwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFxyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmxldmVsTWF4ICsgXCJcIjtcclxuICAgICAgICAvLyB0aGlzLkdhbWVPdmVyLmdldENoaWxkQnlOYW1lKFwiZGlmZmljdWx0eVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFxyXG4gICAgICAgIC8vIEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmRpZmZpY3VsdHlNYXggKyBcIlwiO1xyXG5cclxuICAgICAgICBsZXQgZGlmZmljdWx0eSA9IHBhcnNlSW50KHRoaXMuZGlmZmljdWx0eUFycmF5L3RoaXMubGV2ZWwqMTArXCJcIik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLpmr7luqbmgLvmlbBcIix0aGlzLmRpZmZpY3VsdHlBcnJheSxcIuasoeaVsFwiLHRoaXMubGV2ZWwsXCLmnIDnu4hcIixkaWZmaWN1bHR5KTtcclxuICAgICAgICB0aGlzLkdhbWVPdmVyLmdldENoaWxkQnlOYW1lKFwiZGlmZmljdWx0eVwiKS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFxyXG4gICAgICAgIGRpZmZpY3VsdHkvMTAgKyBcIlwiO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIGJhY2tMb2FkKCl7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIHRoaXMub25EZXN0cm95KCk7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiTG9hZFNjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFnYWluKCl7XHJcbiAgICAgICAgdGhpcy5kZXN0cm95QmxvY2soZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGVzdHJveUJsb2NrKHRydWUpO1xyXG4gICAgICAgIHRoaXMub25EZXN0cm95KCk7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5SYW5rKCl7XHJcbiAgICAgICAgY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiUmFua1NjZW5lXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8v5pe26Ze05qC85byP6L2s5o2iXHJcbiAgICBnZXRUaW1lTWFyZ2luKHNlY29uZDpudW1iZXIpIHtcclxuICAgICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICAgIHRvdGFsID0gc2Vjb25kO1xyXG4gICAgICAgIGxldCBob3VyID0gMDtcclxuICAgICAgICBob3VyID0gcGFyc2VJbnQoKHRvdGFsIC8gMzYwMCkgKyBcIlwiKTsvL+iuoeeul+aVtOaVsOWwj+aXtuaVsFxyXG4gICAgICAgIGxldCBhZnRlckhvdXIgPSB0b3RhbCAtIGhvdXIgKiA2MCAqIDYwOy8v5Y+W5b6X566X5Ye65bCP5pe25pWw5ZCO5Ymp5L2Z55qE56eS5pWwXHJcbiAgICAgICAgbGV0IG1pbiA9IHBhcnNlSW50KChhZnRlckhvdXIgLyA2MCkrXCJcIik7Ly/orqHnrpfmlbTmlbDliIZcclxuICAgICAgICBsZXQgbSA9IFwiXCIgKyBtaW47ICBcclxuICAgICAgICBpZihtaW4gPCAxMCkgbSA9IFwiMFwiK21pbjtcclxuICAgICAgICBsZXQgYWZ0ZXJNaW4gPSB0b3RhbCAtIGhvdXIgKiA2MCAqIDYwIC0gbWluICogNjA7Ly/lj5blvpfnrpflh7rliIblkI7liankvZnnmoTnp5LmlbBcclxuICAgICAgICBsZXQgbWlhbyA9IGFmdGVyTWluICsgXCJcIjtcclxuICAgICAgICBpZihhZnRlck1pbiA8IDEwKSBtaWFvID0gXCIwXCIgKyBhZnRlck1pbjtcclxuICAgICAgICByZXR1cm4gbSArICc6JyArIG1pYW9cclxuICAgIH1cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICAgICAgICBpZih0aGlzLmNhbWVyYU1vdmUgPT0gdHJ1ZSAmJiB0aGlzLm92ZXIgPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICB0aGlzLkNhbWVyYS5ub2RlLnkgPSB0aGlzLlBsYXllci55IC0gdGhpcy5jb3VudEhlaWdodDtcclxuICAgICAgICAgICAgaWYodGhpcy5DYW1lcmEubm9kZS55IDw9IDApIHRoaXMuQ2FtZXJhLm5vZGUueSA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMudG9wVUkueSA9IHRoaXMuQ2FtZXJhLm5vZGUueSArIHRoaXMuZHJvcDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19