809 lines
124 KiB
JavaScript
809 lines
124 KiB
JavaScript
|
||
(function() {
|
||
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
||
var __module = nodeEnv ? module : {exports:{}};
|
||
var __filename = 'preview-scripts/assets/Script/Block.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, 'c58deN2u1NGZL8nJwvnu1PR', 'Block');
|
||
// Script/Block.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 });
|
||
exports.PathType = exports.BlockType = void 0;
|
||
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
||
var BlockType;
|
||
(function (BlockType) {
|
||
/*普通地块 */
|
||
BlockType[BlockType["Nomal"] = 0] = "Nomal";
|
||
/*起点地块 */
|
||
BlockType[BlockType["Start"] = 1] = "Start";
|
||
/*湿地 */
|
||
BlockType[BlockType["Nunja"] = 2] = "Nunja";
|
||
/*山峰 */
|
||
BlockType[BlockType["Peak"] = 3] = "Peak";
|
||
/*终点地块 */
|
||
BlockType[BlockType["End"] = 4] = "End";
|
||
/*息壤 */
|
||
BlockType[BlockType["Xi_Soil"] = 5] = "Xi_Soil";
|
||
/*加固 */
|
||
BlockType[BlockType["Reinforce"] = 6] = "Reinforce";
|
||
})(BlockType = exports.BlockType || (exports.BlockType = {}));
|
||
var PathType;
|
||
(function (PathType) {
|
||
PathType["err"] = "err";
|
||
PathType["up"] = "up";
|
||
PathType["down"] = "down";
|
||
PathType["left"] = "left";
|
||
PathType["right"] = "right";
|
||
PathType["up_left"] = "up_left";
|
||
PathType["up_right"] = "up_right";
|
||
PathType["down_left"] = "down_left";
|
||
PathType["down_right"] = "down_right";
|
||
PathType["left_up"] = "left_up";
|
||
PathType["left_down"] = "left_down";
|
||
PathType["right_up"] = "right_up";
|
||
PathType["right_down"] = "right_down";
|
||
})(PathType = exports.PathType || (exports.PathType = {}));
|
||
var NewClass = /** @class */ (function (_super) {
|
||
__extends(NewClass, _super);
|
||
function NewClass() {
|
||
var _this = _super !== null && _super.apply(this, arguments) || this;
|
||
// LIFE-CYCLE CALLBACKS:
|
||
_this.UI = null;
|
||
return _this;
|
||
// update (dt) {}
|
||
}
|
||
NewClass.prototype.onLoad = function () {
|
||
this.finishi = false;
|
||
this.pos_Shifting = 0;
|
||
this.pos = cc.v2(0, 0);
|
||
};
|
||
NewClass.prototype.start = function () {
|
||
};
|
||
/**
|
||
* 息壤过后改变修筑路径
|
||
* @param order 建筑地图数组里的执行的序列号
|
||
* @param number 息壤执行长度,改变息壤用后其他路径的X或Y值
|
||
* @param direction 只为两个方向,横向false,纵向true
|
||
* @param road 建筑地图数组或者洪峰路径数组,可理解为路径数组,path_Array water_Array
|
||
*/
|
||
//初始化地图块数据
|
||
NewClass.prototype.initData = function (type, pos, max) {
|
||
this.block_Type = type;
|
||
this.pos = cc.v2(pos.x, pos.y);
|
||
// if(this.pos.y%2 == 0) this.node.getChildByName("tip").active = true;
|
||
if (type == cc.Enum(BlockType).Start) {
|
||
var bg = this.node.getChildByName("sp");
|
||
// this.node.getComponent(cc.Sprite).spriteFrame = null;
|
||
// bg.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start"];
|
||
if (cc.fx.GameConfig.GM_INFO.level > 3) {
|
||
// bg.getChildByName("start").y = 20;
|
||
bg.getChildByName("end").y = 20;
|
||
}
|
||
this.rotateTarget(bg, "start", pos, max);
|
||
}
|
||
else if (type == cc.Enum(BlockType).End) {
|
||
var bg = this.node.getChildByName("sp");
|
||
// this.node.getComponent(cc.Sprite).spriteFrame = null;
|
||
bg.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end"];
|
||
if (cc.fx.GameConfig.GM_INFO.level > 3) {
|
||
// bg.getChildByName("start").y = 20;
|
||
bg.getChildByName("end").y = 20;
|
||
}
|
||
this.rotateTarget(bg, "end", pos, max);
|
||
}
|
||
else if (type == cc.Enum(BlockType).Nunja) {
|
||
var random = Math.floor(Math.random() * 4);
|
||
var rotationArr = [0, 90, 180, 270];
|
||
var rotation = rotationArr[random];
|
||
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e5"];
|
||
this.node.getChildByName("bg").angle = -rotation;
|
||
this.node.getComponent(cc.Sprite).spriteFrame = null;
|
||
}
|
||
else if (type == cc.Enum(BlockType).Peak) {
|
||
var random = Math.floor(Math.random() * 4 + 1);
|
||
var name = "shan" + random;
|
||
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
this.node.getComponent(cc.Sprite).spriteFrame = null;
|
||
}
|
||
if (cc.fx.GameConfig.GM_INFO.level == 1) {
|
||
this.node.getChildByName("tipWin").opacity = 220;
|
||
this.node.getChildByName("tipLose").opacity = 220;
|
||
}
|
||
else if (cc.fx.GameConfig.GM_INFO.level == 2) {
|
||
this.node.getChildByName("tipWin").opacity = 100;
|
||
this.node.getChildByName("tipLose").opacity = 100;
|
||
}
|
||
else if (cc.fx.GameConfig.GM_INFO.level == 3) {
|
||
this.node.getChildByName("tipWin").opacity = 50;
|
||
this.node.getChildByName("tipLose").opacity = 50;
|
||
}
|
||
else if (cc.fx.GameConfig.GM_INFO.level > 3) {
|
||
this.node.getChildByName("tipWin").opacity = 0;
|
||
this.node.getChildByName("tipLose").opacity = 0;
|
||
}
|
||
};
|
||
//旋转入海口和出海口的 图片以及文字角度
|
||
NewClass.prototype.rotateTarget = function (bg, name, pos, max) {
|
||
var target = bg.getChildByName(name);
|
||
if (pos.y == max.y - 1) {
|
||
bg.angle = 0;
|
||
if (name == "end")
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_x"];
|
||
target.active = true;
|
||
target.angle = 0;
|
||
return;
|
||
}
|
||
else if (pos.y == 0) {
|
||
bg.angle = -180;
|
||
if (name == "end")
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_x"];
|
||
target.active = true;
|
||
target.angle = -180;
|
||
return;
|
||
}
|
||
else if (pos.x == max.x - 1) {
|
||
bg.angle = 90;
|
||
if (name == "start")
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start_y"];
|
||
else
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_y"];
|
||
target.active = true;
|
||
target.angle = -90;
|
||
}
|
||
else if (pos.x == 0) {
|
||
bg.angle = -90;
|
||
if (name == "start")
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["start_y"];
|
||
else
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["end_y"];
|
||
target.active = true;
|
||
target.angle = 90;
|
||
}
|
||
};
|
||
NewClass.prototype.setPath = function (type) {
|
||
this.path_Type = type;
|
||
};
|
||
//设置息壤在起点
|
||
NewClass.prototype.set_Xi_Soil = function (direction, type) {
|
||
var sp = this.node.getChildByName("sp");
|
||
var turn = this.node.getChildByName("turnStart");
|
||
var water = this.node.getChildByName("waterStart");
|
||
if (direction == "left" || direction == "right") {
|
||
if (sp.angle == 0) {
|
||
turn.active = true;
|
||
water.active = true;
|
||
water.opacity = 0;
|
||
if (type) {
|
||
turn.angle = direction == "left" ? 90 : 0;
|
||
water.angle = direction == "left" ? 90 : 0;
|
||
}
|
||
else {
|
||
turn.angle = direction == "left" ? 0 : 90;
|
||
water.angle = direction == "left" ? 0 : 90;
|
||
}
|
||
}
|
||
else if (sp.angle == -180) {
|
||
turn.active = true;
|
||
water.active = true;
|
||
water.opacity = 0;
|
||
if (type) {
|
||
turn.angle = direction == "left" ? -180 : -90;
|
||
water.angle = direction == "left" ? -180 : -90;
|
||
}
|
||
else {
|
||
turn.angle = direction == "left" ? 270 : -180;
|
||
water.angle = direction == "left" ? 270 : -180;
|
||
}
|
||
}
|
||
else if (sp.angle == -90) {
|
||
turn.active = true;
|
||
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
||
turn.angle = 90;
|
||
if (type) {
|
||
water.active = true;
|
||
water.angle = 90;
|
||
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
||
water.opacity = 0;
|
||
}
|
||
}
|
||
else if (sp.angle == 90) {
|
||
turn.active = true;
|
||
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
||
turn.angle = 90;
|
||
if (type) {
|
||
water.active = true;
|
||
water.angle = 90;
|
||
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
||
water.opacity = 0;
|
||
}
|
||
}
|
||
}
|
||
else if (direction == "up" || direction == "down") {
|
||
var sp_1 = this.node.getChildByName("sp");
|
||
if (sp_1.angle == -90) {
|
||
turn.active = true;
|
||
water.active = true;
|
||
water.opacity = 0;
|
||
if (type) {
|
||
turn.angle = direction == "up" ? 0 : -90;
|
||
water.angle = direction == "up" ? 0 : -90;
|
||
}
|
||
else {
|
||
turn.angle = direction == "up" ? -90 : 0;
|
||
water.angle = direction == "up" ? -90 : 0;
|
||
}
|
||
}
|
||
else if (sp_1.angle == 90) {
|
||
turn.active = true;
|
||
water.active = true;
|
||
water.opacity = 0;
|
||
if (type) {
|
||
turn.angle = direction == "up" ? 90 : 180;
|
||
water.angle = direction == "up" ? 90 : 180;
|
||
}
|
||
else {
|
||
turn.angle = direction == "up" ? 180 : 90;
|
||
water.angle = direction == "up" ? 180 : 90;
|
||
}
|
||
}
|
||
else if (sp_1.angle == 0) {
|
||
turn.active = true;
|
||
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
||
turn.angle = 0;
|
||
if (type) {
|
||
water.active = true;
|
||
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
||
water.opacity = 0;
|
||
}
|
||
}
|
||
else if (sp_1.angle == -180) {
|
||
turn.active = true;
|
||
turn.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["a1"];
|
||
turn.angle = 0;
|
||
if (type) {
|
||
water.active = true;
|
||
water.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block1"];
|
||
water.opacity = 0;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
//息壤具体执行方法 外部可调用
|
||
NewClass.prototype.set_Xi_SoilType = function (direction, end, name) {
|
||
var _this = this;
|
||
// console.log("息壤",direction,name,end);
|
||
var jg = this.repeatRoad(true, direction);
|
||
console.log("息壤重复判断结果", jg);
|
||
if (jg == true) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
return;
|
||
}
|
||
if (this.block_Type == cc.Enum(BlockType).Start) {
|
||
this.set_Xi_Soil(direction, false);
|
||
return;
|
||
}
|
||
if (this.block_Type == cc.Enum(BlockType).Nunja) {
|
||
this.block_Type = cc.Enum(BlockType).Nomal;
|
||
this.node.getChildByName("bg").getComponent(cc.Sprite).spriteFrame = null;
|
||
this.node.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["block_Bg"];
|
||
}
|
||
if (end != null) {
|
||
if (this.block_Type == cc.Enum(BlockType).End) {
|
||
this.finishi = true;
|
||
setTimeout(function () {
|
||
_this.set_Xi_Soil(direction, true);
|
||
}, 500);
|
||
}
|
||
setTimeout(function () {
|
||
if (name == "water")
|
||
cc.fx.Notifications.emit(cc.fx.Message.nextWater, (end + 1));
|
||
else
|
||
cc.fx.Notifications.emit(cc.fx.Message.next, (end + 1));
|
||
}, 400);
|
||
}
|
||
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start) {
|
||
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
||
}
|
||
else {
|
||
}
|
||
var target = this.node.getChildByName("Xi_Soil");
|
||
this.path_Type = direction;
|
||
target.active = true;
|
||
target.opacity = 0;
|
||
cc.tween(target)
|
||
.to(0.1, { opacity: 255 })
|
||
.to(0.1, { opacity: 0 })
|
||
.call(function () {
|
||
if (direction != null && end == null) {
|
||
var data = {
|
||
order: 0,
|
||
time: cc.fx.GameConfig.TIME_INFO.waterSpeed[0],
|
||
type: 0,
|
||
circulate: false
|
||
};
|
||
if (name == "water") {
|
||
_this.runWater(data);
|
||
}
|
||
else
|
||
_this.runRoad(data);
|
||
}
|
||
})
|
||
.start();
|
||
};
|
||
//判断重复路径
|
||
NewClass.prototype.repeatRoad = function (type, direction) {
|
||
//如果双向都占用了还进来就算死了-
|
||
var jg = false;
|
||
if (this.node.getChildByName("vertical2").active == true && this.node.getChildByName("horizontal2").active == true) {
|
||
// alert("治水失败");
|
||
jg = true;
|
||
if (type) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
}
|
||
}
|
||
else if (this.node.getChildByName("turn2").active == true && this.block_Type != cc.Enum(BlockType).Xi_Soil) {
|
||
// alert("治水失败");
|
||
jg = true;
|
||
if (type) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
}
|
||
}
|
||
if (direction) {
|
||
if (this.node.getChildByName("vertical2").active == true && this.block_Type == cc.Enum(BlockType).Xi_Soil && (direction == "up" || direction == "down")) {
|
||
// alert("治水失败");
|
||
if (this.node.getChildByName("vertical2").angle == 0 || this.node.getChildByName("vertical2").angle == 180) {
|
||
jg = true;
|
||
if (type) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
}
|
||
}
|
||
}
|
||
else if (this.node.getChildByName("vertical2").active == true && this.block_Type == cc.Enum(BlockType).Xi_Soil && (direction == "right" || direction == "left")) {
|
||
// alert("治水失败");
|
||
if (this.node.getChildByName("vertical2").angle == 90 || this.node.getChildByName("vertical2").angle == 270) {
|
||
jg = true;
|
||
if (type) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return jg;
|
||
};
|
||
//修筑路线执行
|
||
NewClass.prototype.runRoad = function (data) {
|
||
if (this.path_Type == "err") {
|
||
setTimeout(function () {
|
||
if (data.circulate)
|
||
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
||
}, data.time);
|
||
return;
|
||
}
|
||
var jg = this.repeatRoad(true, null);
|
||
if (jg == true)
|
||
return;
|
||
var target = null;
|
||
var progress = 1;
|
||
var time = data.time;
|
||
var order = data.order + 1;
|
||
var random = Math.floor(Math.random() * 4 + 1);
|
||
target = this.node.getChildByName("vertical2");
|
||
if (target.name == "vertical") {
|
||
var water1_1 = target.getChildByName("wave").getChildByName("water1");
|
||
var water2_1 = target.getChildByName("wave").getChildByName("water2");
|
||
var water3_1 = target.getChildByName("wave").getChildByName("water3");
|
||
var timeDelay = 0.15;
|
||
water1_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water1_1.y = -120;
|
||
})).repeatForever());
|
||
water2_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water2_1.y = -120;
|
||
})).repeatForever());
|
||
water3_1.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_1.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water3_1.y = -120;
|
||
})).repeatForever());
|
||
}
|
||
var name = "a" + random;
|
||
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
if (target.active == true) {
|
||
target = this.node.getChildByName("horizontal2");
|
||
name = "b" + random;
|
||
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
}
|
||
// console.log(this.path_Type,data.order);
|
||
if (this.path_Type == cc.Enum(PathType).up) {
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).down) {
|
||
target.angle = 180;
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).left) {
|
||
target.angle = 90;
|
||
name = "b" + random;
|
||
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).right) {
|
||
target.angle = 270;
|
||
name = "b" + random;
|
||
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
}
|
||
else {
|
||
target = this.node.getChildByName("turn2");
|
||
if (target.name == "turn") {
|
||
var water_1 = target.getChildByName("wave").getChildByName("water");
|
||
water_1.opacity = 0;
|
||
water_1.runAction(cc.sequence(cc.rotateTo(7.2, -1080), cc.delayTime(0)).repeatForever());
|
||
setTimeout(function () {
|
||
water_1.opacity = 255;
|
||
}, 200);
|
||
}
|
||
name = "c" + random;
|
||
if (this.block_Type != cc.Enum(BlockType).Reinforce)
|
||
target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
progress = 0.25;
|
||
if (this.path_Type == cc.Enum(PathType).up_left) {
|
||
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).up_right) {
|
||
target.scaleX = -1;
|
||
target.setPosition(this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).down_left) {
|
||
target.angle = 180;
|
||
target.scaleX = -1;
|
||
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).down_right) {
|
||
target.angle = 180;
|
||
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).left_up) {
|
||
target.angle = -90;
|
||
target.scaleY = -1;
|
||
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).left_down) {
|
||
target.angle = 90;
|
||
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).right_up) {
|
||
target.angle = -90;
|
||
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).right_down) {
|
||
target.angle = -90;
|
||
target.scaleX = -1;
|
||
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
}
|
||
if (this.path_Type == "Reinforce") {
|
||
target = this.node.getChildByName("Reinforce");
|
||
if (this.block_Type == cc.Enum(BlockType).Peak) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
return;
|
||
}
|
||
if (this.block_Type != cc.Enum(BlockType).End)
|
||
this.block_Type = cc.Enum(BlockType).Reinforce;
|
||
this.node.getChildByName("vertical2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e1"];
|
||
this.node.getChildByName("turn2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e3"];
|
||
this.node.getChildByName("horizontal2").getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"]["e2"];
|
||
target.active = true;
|
||
target.opacity = 0;
|
||
progress = 1;
|
||
cc.tween(target)
|
||
.to(cc.fx.GameConfig.TIME_INFO.ReinforceSpeed, { opacity: 255 })
|
||
.call(function () {
|
||
if (data.circulate)
|
||
cc.fx.Notifications.emit(cc.fx.Message.changeMap, order);
|
||
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
||
})
|
||
.start();
|
||
}
|
||
else if (this.path_Type == "Xi_Soil") {
|
||
target.active = false;
|
||
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start)
|
||
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
||
target = this.node.getChildByName("Xi_Soil");
|
||
target.active = true;
|
||
target.opacity = 0;
|
||
cc.tween(target)
|
||
.to(0.01, { opacity: 1 })
|
||
.to(0.01, { opacity: 0 })
|
||
.call(function () {
|
||
if (data.circulate) {
|
||
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
||
}
|
||
})
|
||
.start();
|
||
}
|
||
else if (this.path_Type == "End") {
|
||
target.active = false;
|
||
if (this.block_Type != cc.Enum(BlockType).End && this.block_Type != cc.Enum(BlockType).Start)
|
||
this.block_Type = cc.Enum(BlockType).Xi_Soil;
|
||
var posTemp = data.last;
|
||
var direction = "up";
|
||
if (this.pos.x - posTemp.x >= 1) {
|
||
direction = "right";
|
||
}
|
||
else if (this.pos.x - posTemp.x <= -1) {
|
||
direction = "left";
|
||
}
|
||
else if (this.pos.y - posTemp.y >= 1) {
|
||
direction = "down";
|
||
}
|
||
// console.log("结束方向:",direction);
|
||
if (!this.finishi) {
|
||
this.finishi = true;
|
||
this.set_Xi_Soil(direction, true);
|
||
}
|
||
}
|
||
else {
|
||
target.active = true;
|
||
if (this.block_Type != cc.Enum(BlockType).Xi_Soil) {
|
||
target.getComponent(cc.Sprite).fillRange = 0;
|
||
cc.tween(target.getComponent(cc.Sprite))
|
||
.to(time, { fillRange: progress })
|
||
.call(function () {
|
||
if (data.circulate)
|
||
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
||
})
|
||
.start();
|
||
}
|
||
else {
|
||
target.opacity = 0;
|
||
target.getComponent(cc.Sprite).fillRange = 1;
|
||
cc.tween(target)
|
||
.to(time, { opacity: 255 })
|
||
.call(function () {
|
||
if (data.circulate)
|
||
cc.fx.Notifications.emit(cc.fx.Message.next, order);
|
||
})
|
||
.start();
|
||
}
|
||
}
|
||
};
|
||
//洪峰执行
|
||
NewClass.prototype.runWater = function (data) {
|
||
if (this.node.getChildByName("waterStart").active == true && this.block_Type == cc.Enum(BlockType).Start) {
|
||
// sp.getChildByName("waterStart").opacity = 255;
|
||
cc.tween(this.node.getChildByName("waterStart"))
|
||
.to(0.2, { opacity: 255 })
|
||
.start();
|
||
}
|
||
if (this.path_Type == "err") {
|
||
setTimeout(function () {
|
||
if (data.circulate)
|
||
cc.fx.Notifications.emit(cc.fx.Message.nextWater, order);
|
||
}, data.time);
|
||
return;
|
||
}
|
||
//如果双向都占用了还进来就算死了-
|
||
if (this.node.getChildByName("vertical").active == true && this.node.getChildByName("horizontal").active == true) {
|
||
// alert("治水失败");
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
// cc.director.loadScene("GameScene");
|
||
return;
|
||
}
|
||
else if (this.node.getChildByName("turn").active == true && this.block_Type != cc.Enum(BlockType).Xi_Soil) {
|
||
// alert("治水失败");
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
// cc.director.loadScene("GameScene");
|
||
return;
|
||
}
|
||
var target = null;
|
||
var progress = 1;
|
||
var time = data.time;
|
||
var order = data.order + 1;
|
||
var random = Math.floor(Math.random() * 4 + 1);
|
||
target = this.node.getChildByName("vertical");
|
||
if (target.name == "vertical") {
|
||
var water1_2 = target.getChildByName("wave").getChildByName("water1");
|
||
var water2_2 = target.getChildByName("wave").getChildByName("water2");
|
||
var water3_2 = target.getChildByName("wave").getChildByName("water3");
|
||
var timeDelay = 0.15;
|
||
water1_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water1_2.y = -120;
|
||
})).repeatForever());
|
||
water2_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water2_2.y = -120;
|
||
})).repeatForever());
|
||
water3_2.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_2.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water3_2.y = -120;
|
||
})).repeatForever());
|
||
}
|
||
var name = "a" + random;
|
||
// if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
if (target.active == true) {
|
||
target = this.node.getChildByName("horizontal");
|
||
var water1_3 = target.getChildByName("wave").getChildByName("water1");
|
||
var water2_3 = target.getChildByName("wave").getChildByName("water2");
|
||
var water3_3 = target.getChildByName("wave").getChildByName("water3");
|
||
var timeDelay = 0.15;
|
||
water1_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water1_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water1_3.y = -120;
|
||
})).repeatForever());
|
||
water2_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water2_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water2_3.y = -120;
|
||
})).repeatForever());
|
||
water3_3.runAction(cc.sequence(cc.moveTo(0.6, cc.v2(water3_3.x, 120)), cc.delayTime(timeDelay), cc.callFunc(function () {
|
||
water3_3.y = -120;
|
||
})).repeatForever());
|
||
name = "b" + random;
|
||
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
}
|
||
// console.log(this.path_Type,data.order);
|
||
if (this.path_Type == cc.Enum(PathType).up) {
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).down) {
|
||
target.angle = 180;
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).left) {
|
||
target.angle = 90;
|
||
name = "b" + random;
|
||
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).right) {
|
||
target.angle = 270;
|
||
name = "b" + random;
|
||
//if(this.block_Type != cc.Enum(BlockType).Reinforce) target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
}
|
||
else {
|
||
target = this.node.getChildByName("turn");
|
||
if (target.name == "turn") {
|
||
var water_2 = target.getChildByName("wave").getChildByName("water");
|
||
water_2.opacity = 0;
|
||
water_2.runAction(cc.sequence(cc.rotateTo(7.2, -1080), cc.delayTime(0)).repeatForever());
|
||
setTimeout(function () {
|
||
water_2.opacity = 255;
|
||
}, 200);
|
||
}
|
||
name = "c" + random;
|
||
//if(this.block_Type != cc.Enum(BlockType).Reinforce)target.getComponent(cc.Sprite).spriteFrame = this.UI["_spriteFrames"][name];
|
||
progress = 0.25;
|
||
if (this.path_Type == cc.Enum(PathType).up_left) {
|
||
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).up_right) {
|
||
target.scaleX = -1;
|
||
target.setPosition(this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).down_left) {
|
||
target.angle = 180;
|
||
target.scaleX = -1;
|
||
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).down_right) {
|
||
target.angle = 180;
|
||
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).left_up) {
|
||
target.angle = -90;
|
||
target.scaleY = -1;
|
||
target.setPosition(this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).left_down) {
|
||
target.angle = 90;
|
||
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).right_up) {
|
||
target.angle = -90;
|
||
target.setPosition(-this.pos_Shifting, this.pos_Shifting);
|
||
}
|
||
else if (this.path_Type == cc.Enum(PathType).right_down) {
|
||
target.angle = -90;
|
||
target.scaleX = -1;
|
||
target.setPosition(-this.pos_Shifting, -this.pos_Shifting);
|
||
}
|
||
}
|
||
if (this.path_Type == "End") {
|
||
target.active = false;
|
||
if (this.block_Type == cc.Enum(BlockType).End) {
|
||
if (this.node.getChildByName("waterStart").active == true && this.block_Type == cc.Enum(BlockType).End) {
|
||
cc.tween(this.node.getChildByName("waterStart"))
|
||
.to(0.2, { opacity: 255 })
|
||
.call(function () {
|
||
// alert("治水成功");
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "win");
|
||
if (cc.fx.GameConfig.GM_INFO.level < 7) {
|
||
cc.fx.GameConfig.GM_INFO.level += 1;
|
||
}
|
||
setTimeout(function () {
|
||
// cc.director.loadScene("GameScene");
|
||
}, 500);
|
||
})
|
||
.start();
|
||
}
|
||
}
|
||
else {
|
||
target = this.node.getChildByName("End");
|
||
target.active = true;
|
||
target.opacity = 0;
|
||
var posTemp = data.last;
|
||
if (this.pos.x - posTemp.x >= 1) {
|
||
target.angle = -90;
|
||
}
|
||
else if (this.pos.x - posTemp.x <= -1) {
|
||
target.angle = 90;
|
||
}
|
||
else if (this.pos.y - posTemp.y >= 1) {
|
||
target.angle = 180;
|
||
}
|
||
cc.tween(target)
|
||
.to(0.5, { opacity: 255 })
|
||
.call(function () {
|
||
// alert("治水失败")
|
||
cc.fx.Notifications.emit(cc.fx.Message.showResult, "lose");
|
||
// cc.director.loadScene("GameScene");
|
||
})
|
||
.start();
|
||
}
|
||
}
|
||
else {
|
||
target.active = true;
|
||
target.getComponent(cc.Sprite).fillRange = 0;
|
||
cc.tween(target.getComponent(cc.Sprite))
|
||
.to(time, { fillRange: progress })
|
||
.call(function () {
|
||
if (data.circulate)
|
||
cc.fx.Notifications.emit(cc.fx.Message.nextWater, order);
|
||
})
|
||
.start();
|
||
}
|
||
};
|
||
__decorate([
|
||
property(cc.SpriteAtlas)
|
||
], NewClass.prototype, "UI", void 0);
|
||
NewClass = __decorate([
|
||
ccclass
|
||
], NewClass);
|
||
return NewClass;
|
||
}(cc.Component));
|
||
exports.default = NewClass;
|
||
|
||
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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxCbG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsb0JBQW9CO0FBQ3BCLHdFQUF3RTtBQUN4RSxtQkFBbUI7QUFDbkIsa0ZBQWtGO0FBQ2xGLDhCQUE4QjtBQUM5QixrRkFBa0Y7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUUsSUFBQSxLQUFzQixFQUFFLENBQUMsVUFBVSxFQUFsQyxPQUFPLGFBQUEsRUFBRSxRQUFRLGNBQWlCLENBQUM7QUFFMUMsSUFBWSxTQWdCWDtBQWhCRCxXQUFZLFNBQVM7SUFDakIsU0FBUztJQUNULDJDQUFTLENBQUE7SUFDVCxTQUFTO0lBQ1QsMkNBQVMsQ0FBQTtJQUNULE9BQU87SUFDUCwyQ0FBUyxDQUFBO0lBQ1QsT0FBTztJQUNQLHlDQUFRLENBQUE7SUFDUixTQUFTO0lBQ1QsdUNBQU8sQ0FBQTtJQUVQLE9BQU87SUFDUCwrQ0FBVyxDQUFBO0lBQ1gsT0FBTztJQUNQLG1EQUFhLENBQUE7QUFDakIsQ0FBQyxFQWhCVyxTQUFTLEdBQVQsaUJBQVMsS0FBVCxpQkFBUyxRQWdCcEI7QUFFRCxJQUFZLFFBY1g7QUFkRCxXQUFZLFFBQVE7SUFDaEIsdUJBQVcsQ0FBQTtJQUNYLHFCQUFTLENBQUE7SUFDVCx5QkFBYSxDQUFBO0lBQ2IseUJBQWEsQ0FBQTtJQUNiLDJCQUFlLENBQUE7SUFDZiwrQkFBbUIsQ0FBQTtJQUNuQixpQ0FBcUIsQ0FBQTtJQUNyQixtQ0FBdUIsQ0FBQTtJQUN2QixxQ0FBeUIsQ0FBQTtJQUN6QiwrQkFBbUIsQ0FBQTtJQUNuQixtQ0FBdUIsQ0FBQTtJQUN2QixpQ0FBcUIsQ0FBQTtJQUNyQixxQ0FBeUIsQ0FBQTtBQUM3QixDQUFDLEVBZFcsUUFBUSxHQUFSLGdCQUFRLEtBQVIsZ0JBQVEsUUFjbkI7QUFHRDtJQUFzQyw0QkFBWTtJQUFsRDtRQUFBLHFFQTh1QkM7UUE3dUJHLHdCQUF3QjtRQUV4QixRQUFFLEdBQW1CLElBQUks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QUNwRSxJQUFJLFFBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFFBQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3ZGLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBQ1IsUUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQTtZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDckIsUUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBTSxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxTQUFT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LElBQUksUUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUNyQixRQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFNLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFDdkYsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFDUixRQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFBO1lB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YUFDWjtTQUVKO2FBQ0c7WUFDQSxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztZQUNyQixNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQzdDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ3ZDLEVBQUUsQ0FBQyxJQUFJLEVBQUMsRUFBQyxTQUFTLEVBQUMsUUFBUSxFQUFDLENBQUM7aUJBQzdCLElBQUksQ0FBQztnQkFDRixJQUFHLElBQUksQ0FBQyxTQUFTO29CQUNiLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsQ0FBQyxDQUFDO2lCQUNELEtBQUssRUFBRSxDQUFDO1NBQ1o7SUFFTCxDQUFDO0lBeHVCRDtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDO3dDQUNDO0lBSFQsUUFBUTtRQUQ1QixPQUFPO09BQ2EsUUFBUSxDQTh1QjVCO0lBQUQsZUFBQztDQTl1QkQsQUE4dUJDLENBOXVCcUMsRUFBRSxDQUFDLFNBQVMsR0E4dUJqRDtrQkE5dUJvQixRQUFRIiwiZmlsZSI6IiIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy8gTGVhcm4gVHlwZVNjcmlwdDpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvdHlwZXNjcmlwdC5odG1sXHJcbi8vIExlYXJuIEF0dHJpYnV0ZTpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMuaHRtbFxyXG4vLyBMZWFybiBsaWZlLWN5Y2xlIGNhbGxiYWNrczpcclxuLy8gIC0gaHR0cHM6Ly9kb2NzLmNvY29zLmNvbS9jcmVhdG9yL21hbnVhbC9lbi9zY3JpcHRpbmcvbGlmZS1jeWNsZS1jYWxsYmFja3MuaHRtbFxyXG5cclxuY29uc3Qge2NjY2xhc3MsIHByb3BlcnR5fSA9IGNjLl9kZWNvcmF0b3I7XHJcblxyXG5leHBvcnQgZW51bSBCbG9ja1R5cGV7XHJcbiAgICAvKuaZrumAmuWcsOWdlyAqL1xyXG4gICAgTm9tYWwgPSAwLCAgXHJcbiAgICAvKui1t+eCueWcsOWdlyAqL1xyXG4gICAgU3RhcnQgPSAxLCAgXHJcbiAgICAvKua5v+WcsCAqL1xyXG4gICAgTnVuamEgPSAyLFxyXG4gICAgLyrlsbHls7AgKi9cclxuICAgIFBlYWsgPSAzLFxyXG4gICAgLyrnu4jngrnlnLDlnZcgKi9cclxuICAgIEVuZCA9IDQsXHJcblxyXG4gICAgLyrmga/lo6QgKi9cclxuICAgIFhpX1NvaWwgPSA1LFxyXG4gICAgLyrliqDlm7ogKi9cclxuICAgIFJlaW5mb3JjZSA9IDZcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUGF0aFR5cGV7XHJcbiAgICBlcnIgPSBcImVyclwiLFxyXG4gICAgdXAgPSBcInVwXCIsICBcclxuICAgIGRvd24gPSBcImRvd25cIiwgIFxyXG4gICAgbGVmdCA9IFwibGVmdFwiLFxyXG4gICAgcmlnaHQgPSBcInJpZ2h0XCIsXHJcbiAgICB1cF9sZWZ0ID0gXCJ1cF9sZWZ0XCIsXHJcbiAgICB1cF9yaWdodCA9IFwidXBfcmlnaHRcIixcclxuICAgIGRvd25fbGVmdCA9IFwiZG93bl9sZWZ0XCIsXHJcbiAgICBkb3duX3JpZ2h0ID0gXCJkb3duX3JpZ2h0XCIsXHJcbiAgICBsZWZ0X3VwID0gXCJsZWZ0X3VwXCIsXHJcbiAgICBsZWZ0X2Rvd24gPSBcImxlZnRfZG93blwiLFxyXG4gICAgcmlnaHRfdXAgPSBcInJpZ2h0X3VwXCIsXHJcbiAgICByaWdodF9kb3duID0gXCJyaWdodF9kb3duXCIsXHJcbn1cclxuXHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld0NsYXNzIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuICAgIC8vIExJRkUtQ1lDTEUgQ0FMTEJBQ0tTOlxyXG4gICAgQHByb3BlcnR5KGNjLlNwcml0ZUF0bGFzKVxyXG4gICAgVUk6IGNjLlNwcml0ZUF0bGFzID0gbnVsbDtcclxuXHJcbiAgICBwb3NfU2hpZnRpbmc6bnVtYmVyO1xyXG4gICAgYmxvY2tfVHlwZTpudW1iZXI7XHJcbiAgICBwYXRoX1R5cGU6c3RyaW5nO1xyXG4gICAgZmluaXNoaTpib29sZWFuO1xyXG4gICAgcG9zOiBhbnk7XHJcbiAgICBvbkxvYWQgKCkge1xyXG4gICAgICAgIHRoaXMuZmluaXNoaSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucG9zX1NoaWZ0aW5nID0gMDtcclxuICAgICAgICB0aGlzLnBvcyA9IGNjLnYyKDAsMCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnQgKCkge1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDmga/lo6Tov4flkI7mlLnlj5jkv67nrZHot6/lvoRcclxuICAgICAqIEBwYXJhbSBvcmRlciDlu7rnrZHlnLDlm77mlbDnu4Tph4znmoTmiafooYznmoTluo/liJflj7dcclxuICAgICAqIEBwYXJhbSBudW1iZXIg5oGv5aOk5omn6KGM6ZW/5bqmLOaUueWPmOaBr+WjpOeUqOWQjuWFtuS7lui3r+W+hOeahFjmiJZZ5YC8XHJcbiAgICAgKiBAcGFyYW0gZGlyZWN0aW9uIOWPquS4uuS4pOS4quaWueWQke+8jOaoquWQkWZhbHNlLOe6teWQkXRydWVcclxuICAgICAqIEBwYXJhbSByb2FkIOW7uuetkeWcsOWbvuaVsOe7hOaIluiAhea0quWzsOi3r+W+hOaVsOe7hO+8jOWPr+eQhuino+S4uui3r+W+hOaVsOe7hO+8jHBhdGhfQXJyYXkgd2F0ZXJfQXJyYXlcclxuICAgICAqL1xyXG4gICAgLy/liJ3lp4vljJblnLDlm77lnZfmlbDmja5cclxuICAgIGluaXREYXRhKHR5cGUscG9zLG1heCl7XHJcbiAgICAgICAgdGhpcy5ibG9ja19UeXBlID0gdHlwZTtcclxuICAgICAgICB0aGlzLnBvcyA9IGNjLnYyKHBvcy54LHBvcy55KTtcclxuICAgICAgICAvLyBpZih0aGlzLnBvcy55JTIgPT0gMCkgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwXCIpLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgaWYodHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuU3RhcnQpeyBcclxuICAgICAgICAgICAgdmFyIGJnID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIC8vIGJnLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJzdGFydFwiXTtcclxuICAgICAgICAgICAgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID4gMyl7XHJcbiAgICAgICAgICAgICAgICAvLyBiZy5nZXRDaGlsZEJ5TmFtZShcInN0YXJ0XCIpLnkgPSAyMDtcclxuICAgICAgICAgICAgICAgIGJnLmdldENoaWxkQnlOYW1lKFwiZW5kXCIpLnkgPSAyMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJvdGF0ZVRhcmdldChiZyxcInN0YXJ0XCIscG9zLG1heCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kKXtcclxuICAgICAgICAgICAgdmFyIGJnID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIik7XHJcbiAgICAgICAgICAgIC8vIHRoaXMubm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIGJnLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlbmRcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA+IDMpe1xyXG4gICAgICAgICAgICAgICAgLy8gYmcuZ2V0Q2hpbGRCeU5hbWUoXCJzdGFydFwiKS55ID0gMjA7XHJcbiAgICAgICAgICAgICAgICBiZy5nZXRDaGlsZEJ5TmFtZShcImVuZFwiKS55ID0gMjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yb3RhdGVUYXJnZXQoYmcsXCJlbmRcIixwb3MsbWF4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0eXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5OdW5qYSl7XHJcbiAgICAgICAgICAgIGxldCByYW5kb20gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqNCk7XHJcbiAgICAgICAgICAgIGxldCByb3RhdGlvbkFyciA9IFswLDkwLDE4MCwyNzBdO1xyXG4gICAgICAgICAgICBsZXQgcm90YXRpb24gPSByb3RhdGlvbkFycltyYW5kb21dO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZTVcIl07XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImJnXCIpLmFuZ2xlID0gLXJvdGF0aW9uO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHR5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlBlYWspe1xyXG4gICAgICAgICAgICBsZXQgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQrMSk7XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gXCJzaGFuXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImJnXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCA9PSAxKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLm9wYWNpdHkgPSAyMjA7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcExvc2VcIikub3BhY2l0eSA9IDIyMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPT0gMil7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInRpcFdpblwiKS5vcGFjaXR5ID0gMTAwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSAxMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoY2MuZnguR2FtZUNvbmZpZy5HTV9JTkZPLmxldmVsID09IDMpe1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBXaW5cIikub3BhY2l0eSA9IDUwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSA1MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPiAzKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidGlwV2luXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0aXBMb3NlXCIpLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgIH1cclxuICAgIC8v5peL6L2s5YWl5rW35Y+j5ZKM5Ye65rW35Y+j55qEIOWbvueJh+S7peWPiuaWh+Wtl+inkuW6plxyXG4gICAgcm90YXRlVGFyZ2V0KGJnLG5hbWUscG9zLG1heCl7XHJcbiAgICAgICAgbGV0IHRhcmdldCA9IGJnLmdldENoaWxkQnlOYW1lKG5hbWUpO1xyXG4gICAgICAgIGlmKHBvcy55ID09IG1heC55LTEpe1xyXG4gICAgICAgICAgICBiZy5hbmdsZSA9IDA7XHJcbiAgICAgICAgICAgIGlmKG5hbWUgPT0gXCJlbmRcIikgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlbmRfeFwiXTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihwb3MueSA9PSAwKXtcclxuICAgICAgICAgICAgYmcuYW5nbGUgPSAtMTgwO1xyXG4gICAgICAgICAgICBpZihuYW1lID09IFwiZW5kXCIpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlbmRfeFwiXTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC0xODA7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZihwb3MueCA9PSBtYXgueC0xKXtcclxuICAgICAgICAgICAgYmcuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgaWYobmFtZSA9PSBcInN0YXJ0XCIpdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJzdGFydF95XCJdO1xyXG4gICAgICAgICAgICBlbHNlIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZW5kX3lcIl07XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYocG9zLnggPT0gMCl7XHJcbiAgICAgICAgICAgIGJnLmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICBpZihuYW1lID09IFwic3RhcnRcIil0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcInN0YXJ0X3lcIl07XHJcbiAgICAgICAgICAgIGVsc2UgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlbmRfeVwiXTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDkwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRQYXRoKHR5cGUpe1xyXG4gICAgICAgIHRoaXMucGF0aF9UeXBlID0gdHlwZTtcclxuICAgIH1cclxuICAgIC8v6K6+572u5oGv5aOk5Zyo6LW354K5XHJcbiAgICBzZXRfWGlfU29pbChkaXJlY3Rpb24sdHlwZSl7XHJcbiAgICAgICAgbGV0IHNwID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIik7XHJcbiAgICAgICAgbGV0IHR1cm4gPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0dXJuU3RhcnRcIik7XHJcbiAgICAgICAgbGV0IHdhdGVyID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwid2F0ZXJTdGFydFwiKTtcclxuXHJcbiAgICAgICAgaWYoZGlyZWN0aW9uID09IFwibGVmdFwiIHx8IGRpcmVjdGlvbiA9PSBcInJpZ2h0XCIpe1xyXG4gICAgICAgICAgICBpZihzcC5hbmdsZSA9PSAwKXtcclxuICAgICAgICAgICAgICAgIHR1cm4uYWN0aXZlID10cnVlO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IGRpcmVjdGlvbj09XCJsZWZ0XCI/OTA6MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJsZWZ0XCI/OTA6MDtcclxuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzA6OTA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzA6OTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3AuYW5nbGUgPT0gLTE4MCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPy0xODA6LTkwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cImxlZnRcIj8tMTgwOi05MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IGRpcmVjdGlvbj09XCJsZWZ0XCI/MjcwOi0xODA7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSBkaXJlY3Rpb249PVwibGVmdFwiPzI3MDotMTgwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IC05MCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHR1cm4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImExXCJdO1xyXG4gICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IDkwO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IDkwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJibG9jazFcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3AuYW5nbGUgPT0gOTApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJhMVwiXTtcclxuICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYmxvY2sxXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYoZGlyZWN0aW9uID09IFwidXBcIiB8fCBkaXJlY3Rpb24gPT0gXCJkb3duXCIpe1xyXG4gICAgICAgICAgICBsZXQgc3AgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJzcFwiKTtcclxuICAgICAgICAgICAgaWYoc3AuYW5nbGUgPT0gLTkwKXtcclxuICAgICAgICAgICAgICAgIHR1cm4uYWN0aXZlID10cnVlO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPzA6LTkwO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmFuZ2xlID0gZGlyZWN0aW9uPT1cInVwXCI/MDotOTA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSBkaXJlY3Rpb249PVwidXBcIj8tOTA6MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPy05MDowO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3AuYW5nbGUgPT0gOTApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPzkwOjE4MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPzkwOjE4MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPzE4MDo5MDtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hbmdsZSA9IGRpcmVjdGlvbj09XCJ1cFwiPzE4MDo5MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHNwLmFuZ2xlID09IDApe1xyXG4gICAgICAgICAgICAgICAgdHVybi5hY3RpdmUgPXRydWU7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJhMVwiXTtcclxuICAgICAgICAgICAgICAgIHR1cm4uYW5nbGUgPSAwO1xyXG4gICAgICAgICAgICAgICAgaWYodHlwZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiYmxvY2sxXCJdO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYoc3AuYW5nbGUgPT0gLTE4MCl7XHJcbiAgICAgICAgICAgICAgICB0dXJuLmFjdGl2ZSA9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIHR1cm4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImExXCJdO1xyXG4gICAgICAgICAgICAgICAgdHVybi5hbmdsZSA9IDA7XHJcbiAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJibG9jazFcIl07XHJcbiAgICAgICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvL+aBr+WjpOWFt+S9k+aJp+ihjOaWueazlSAg5aSW6YOo5Y+v6LCD55SoXHJcbiAgICBzZXRfWGlfU29pbFR5cGUoZGlyZWN0aW9uLGVuZCxuYW1lKXtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuaBr+WjpFwiLGRpcmVjdGlvbixuYW1lLGVuZCk7XHJcbiAgICAgICAgdmFyIGpnID0gdGhpcy5yZXBlYXRSb2FkKHRydWUsZGlyZWN0aW9uKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIuaBr+WjpOmHjeWkjeWIpOaWree7k+aenFwiLGpnKTtcclxuICAgICAgICBpZihqZyA9PSB0cnVlKXtcclxuICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9IFxyXG5cclxuICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlN0YXJ0KXtcclxuICAgICAgICAgICAgdGhpcy5zZXRfWGlfU29pbChkaXJlY3Rpb24sZmFsc2UpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLk51bmphKXtcclxuICAgICAgICAgICAgdGhpcy5ibG9ja19UeXBlID0gY2MuRW51bShCbG9ja1R5cGUpLk5vbWFsO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJiZ1wiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9ICB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImJsb2NrX0JnXCJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihlbmQgIT0gbnVsbCl7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoaSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldF9YaV9Tb2lsKGRpcmVjdGlvbix0cnVlKTtcclxuICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYobmFtZSA9PSBcIndhdGVyXCIpIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHRXYXRlciwoZW5kKzEpKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dCwoZW5kKzEpKTtcclxuICAgICAgICAgICAgfSwgNDAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuRW5kICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuU3RhcnQpe1xyXG4gICAgICAgICAgICB0aGlzLmJsb2NrX1R5cGUgPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbDtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiWGlfU29pbFwiKTsgXHJcbiAgICAgICAgdGhpcy5wYXRoX1R5cGUgPSBkaXJlY3Rpb247XHJcbiAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIGNjLnR3ZWVuKHRhcmdldClcclxuICAgICAgICAudG8oMC4xLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgLnRvKDAuMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgaWYoZGlyZWN0aW9uICE9IG51bGwgJiYgZW5kID09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6MCxcclxuICAgICAgICAgICAgICAgICAgICB0aW1lOmNjLmZ4LkdhbWVDb25maWcuVElNRV9JTkZPLndhdGVyU3BlZWRbMF0sXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTowLFxyXG4gICAgICAgICAgICAgICAgICAgIGNpcmN1bGF0ZTpmYWxzZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmKG5hbWUgPT0gXCJ3YXRlclwiKXtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJ1bldhdGVyKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpcy5ydW5Sb2FkKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3RhcnQoKTtcclxuICAgIH1cclxuICAgIC8v5Yik5pat6YeN5aSN6Lev5b6EIFxyXG4gICAgcmVwZWF0Um9hZCh0eXBlLGRpcmVjdGlvbil7XHJcbiAgICAgICAgLy/lpoLmnpzlj4zlkJHpg73ljaDnlKjkuobov5jov5vmnaXlsLHnrpfmrbvkuoYtIFxyXG4gICAgICAgIHZhciBqZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbDJcIikuYWN0aXZlID09IHRydWUgJiYgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiaG9yaXpvbnRhbDJcIikuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAvLyBhbGVydChcIuayu+awtOWksei0pVwiKTtcclxuICAgICAgICAgICAgamcgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNob3dSZXN1bHQsXCJsb3NlXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInR1cm4yXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbCl7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICBqZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKGRpcmVjdGlvbil7XHJcbiAgICAgICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsMlwiKS5hY3RpdmUgPT0gdHJ1ZSAmJiB0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlhpX1NvaWwgJiYgKGRpcmVjdGlvbiA9PSBcInVwXCJ8fCBkaXJlY3Rpb24gPT1cImRvd25cIikpe1xyXG4gICAgICAgICAgICAgICAgLy8gYWxlcnQoXCLmsrvmsLTlpLHotKVcIik7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbDJcIikuYW5nbGUgPT0gMCB8fCB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbDJcIikuYW5nbGUgPT0gMTgwICl7XHJcbiAgICAgICAgICAgICAgICAgICAgamcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsMlwiKS5hY3RpdmUgPT0gdHJ1ZSAmJiB0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLlhpX1NvaWwgJiYgKGRpcmVjdGlvbiA9PSBcInJpZ2h0XCJ8fCBkaXJlY3Rpb24gPT1cImxlZnRcIikpe1xyXG4gICAgICAgICAgICAgICAgLy8gYWxlcnQoXCLmsrvmsLTlpLHotKVcIik7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbDJcIikuYW5nbGUgPT0gOTAgfHwgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidmVydGljYWwyXCIpLmFuZ2xlID09IDI3MCApe1xyXG4gICAgICAgICAgICAgICAgICAgIGpnID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZih0eXBlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSAgICBcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBqZztcclxuICAgIH1cclxuXHJcbiAgICAvL+S/ruetkei3r+e6v+aJp+ihjFxyXG4gICAgcnVuUm9hZChkYXRhKXtcclxuICAgICAgICBpZih0aGlzLnBhdGhfVHlwZSA9PSBcImVyclwiKXtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLmNpcmN1bGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5uZXh0LG9yZGVyKTtcclxuICAgICAgICAgICAgfSwgZGF0YS50aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgamcgPSB0aGlzLnJlcGVhdFJvYWQodHJ1ZSxudWxsKTtcclxuICAgICAgICBpZihqZyA9PSB0cnVlKSByZXR1cm47XHJcbiAgICAgICAgdmFyIHRhcmdldCA9IG51bGw7XHJcbiAgICAgICAgdmFyIHByb2dyZXNzID0gMTtcclxuICAgICAgICB2YXIgdGltZSA9IGRhdGEudGltZTtcclxuICAgICAgICB2YXIgb3JkZXIgPSBkYXRhLm9yZGVyICsgMTtcclxuICAgICAgICB2YXIgcmFuZG9tID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKjQgKyAxKTtcclxuICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbDJcIik7XHJcbiAgICAgICAgaWYodGFyZ2V0Lm5hbWUgPT0gXCJ2ZXJ0aWNhbFwiKXtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMSA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjFcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjIgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIyXCIpO1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIzID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyM1wiKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVEZWxheSA9IDAuMTU7XHJcbiAgICAgICAgICAgIHdhdGVyMS5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjEueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMS55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgd2F0ZXIyLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMi54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIyLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICB3YXRlcjMucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIzLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjMueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmFtZSA9IFwiYVwiICsgcmFuZG9tO1xyXG4gICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG5cclxuICAgICAgICBpZih0YXJnZXQuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJob3Jpem9udGFsMlwiKTtcclxuICAgICAgICAgICAgbmFtZSA9IFwiYlwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSkgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bbmFtZV07XHJcbiAgICAgICAgfSBcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnBhdGhfVHlwZSxkYXRhLm9yZGVyKTtcclxuICAgICAgICBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS51cCl7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkuZG93bil7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDE4MDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0KXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImJcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5SZWluZm9yY2UpIHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0KXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMjcwO1xyXG4gICAgICAgICAgICBuYW1lID0gXCJiXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKSB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidHVybjJcIik7XHJcbiAgICAgICAgICAgIGlmKHRhcmdldC5uYW1lID09IFwidHVyblwiKXtcclxuICAgICAgICAgICAgICAgIGxldCB3YXRlciA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlclwiKTtcclxuICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAwXHJcbiAgICAgICAgICAgICAgICB3YXRlci5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2Mucm90YXRlVG8oNy4yLC0xMDgwKSxjYy5kZWxheVRpbWUoMCkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB3YXRlci5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBuYW1lID0gXCJjXCIgKyByYW5kb207XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG4gICAgICAgICAgICBwcm9ncmVzcyA9IDAuMjU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnVwX2xlZnQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkudXBfcmlnaHQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKHRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duX2xlZnQpe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duX3JpZ2h0KXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDE4MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbih0aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0X3VwKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC05MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zY2FsZVkgPSAtMTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbih0aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5sZWZ0X2Rvd24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLC10aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5yaWdodF91cCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24oLXRoaXMucG9zX1NoaWZ0aW5nLHRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnJpZ2h0X2Rvd24pe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNjYWxlWCA9IC0xO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IFwiUmVpbmZvcmNlXCIpe1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJSZWluZm9yY2VcIik7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSA9PSBjYy5FbnVtKEJsb2NrVHlwZSkuUGVhayl7XHJcbiAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLkVuZCl0aGlzLmJsb2NrX1R5cGUgPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ2ZXJ0aWNhbDJcIikuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtcImUxXCJdO1xyXG4gICAgICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0dXJuMlwiKS5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW1wiZTNcIl07XHJcbiAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWwyXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5VSVtcIl9zcHJpdGVGcmFtZXNcIl1bXCJlMlwiXTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRhcmdldC5vcGFjaXR5ID0gMDtcclxuICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0YXJnZXQpXHJcbiAgICAgICAgICAgIC50byhjYy5meC5HYW1lQ29uZmlnLlRJTUVfSU5GTy5SZWluZm9yY2VTcGVlZCx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLmNoYW5nZU1hcCxvcmRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dCxvcmRlcik7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IFwiWGlfU29pbFwiKXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLkVuZCAmJiB0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlN0YXJ0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja19UeXBlID0gY2MuRW51bShCbG9ja1R5cGUpLlhpX1NvaWw7XHJcbiAgICAgICAgICAgIHRhcmdldCA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIlhpX1NvaWxcIik7IFxyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSAwO1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0YXJnZXQpXHJcbiAgICAgICAgICAgIC50bygwLjAxLHtvcGFjaXR5OjF9KVxyXG4gICAgICAgICAgICAudG8oMC4wMSx7b3BhY2l0eTowfSlcclxuICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICBpZihkYXRhLmNpcmN1bGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dCxvcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gXCJFbmRcIil7XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5FbmQgJiYgdGhpcy5ibG9ja19UeXBlICE9IGNjLkVudW0oQmxvY2tUeXBlKS5TdGFydClcclxuICAgICAgICAgICAgICAgIHRoaXMuYmxvY2tfVHlwZSA9IGNjLkVudW0oQmxvY2tUeXBlKS5YaV9Tb2lsO1xyXG4gICAgICAgICAgICBsZXQgcG9zVGVtcCA9IGRhdGEubGFzdDtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IFwidXBcIjtcclxuICAgICAgICAgICAgaWYodGhpcy5wb3MueCAtIHBvc1RlbXAueCA+PSAxKXtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFwicmlnaHRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucG9zLnggLSBwb3NUZW1wLnggPD0gLTEpe1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJsZWZ0XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBvcy55IC0gcG9zVGVtcC55ID49IDEpe1xyXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gXCJkb3duXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLnu5PmnZ/mlrnlkJE6XCIsZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgaWYoIXRoaXMuZmluaXNoaSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaGkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRfWGlfU29pbChkaXJlY3Rpb24sdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFjdGl2ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMDtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKSlcclxuICAgICAgICAgICAgICAgIC50byh0aW1lLHtmaWxsUmFuZ2U6cHJvZ3Jlc3N9KVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHQsb3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQub3BhY2l0eSA9IDA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuZmlsbFJhbmdlID0gMTtcclxuICAgICAgICAgICAgICAgIGNjLnR3ZWVuKHRhcmdldClcclxuICAgICAgICAgICAgICAgIC50byh0aW1lLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhLmNpcmN1bGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dCxvcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLy/mtKrls7DmiafooYxcclxuICAgIHJ1bldhdGVyKGRhdGEpe1xyXG4gICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyU3RhcnRcIikuYWN0aXZlID09IHRydWUgJiYgdGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5TdGFydCl7XHJcbiAgICAgICAgICAgIC8vIHNwLmdldENoaWxkQnlOYW1lKFwid2F0ZXJTdGFydFwiKS5vcGFjaXR5ID0gMjU1O1xyXG4gICAgICAgICAgICBjYy50d2Vlbih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlclN0YXJ0XCIpKVxyXG4gICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IFwiZXJyXCIpe1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmKGRhdGEuY2lyY3VsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLm5leHRXYXRlcixvcmRlcik7XHJcbiAgICAgICAgICAgIH0sIGRhdGEudGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/lpoLmnpzlj4zlkJHpg73ljaDnlKjkuobov5jov5vmnaXlsLHnrpfmrbvkuoYtIFxyXG4gICAgICAgIGlmKHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInZlcnRpY2FsXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImhvcml6b250YWxcIikuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICAvLyBhbGVydChcIuayu+awtOWksei0pVwiKTtcclxuICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2Uuc2hvd1Jlc3VsdCxcImxvc2VcIik7XHJcbiAgICAgICAgICAgIC8vIGNjLmRpcmVjdG9yLmxvYWRTY2VuZShcIkdhbWVTY2VuZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZWxzZSBpZih0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJ0dXJuXCIpLmFjdGl2ZSA9PSB0cnVlICYmIHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuWGlfU29pbCl7XHJcbiAgICAgICAgICAgIC8vIGFsZXJ0KFwi5rK75rC05aSx6LSlXCIpO1xyXG4gICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgLy8gY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciB0YXJnZXQgPSBudWxsO1xyXG4gICAgICAgIHZhciBwcm9ncmVzcyA9IDE7XHJcbiAgICAgICAgdmFyIHRpbWUgPSBkYXRhLnRpbWU7XHJcbiAgICAgICAgdmFyIG9yZGVyID0gZGF0YS5vcmRlciArIDE7XHJcbiAgICAgICAgdmFyIHJhbmRvbSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSo0ICsgMSk7XHJcbiAgICAgICAgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidmVydGljYWxcIik7XHJcbiAgICAgICAgaWYodGFyZ2V0Lm5hbWUgPT0gXCJ2ZXJ0aWNhbFwiKXtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMSA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjFcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjIgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIyXCIpO1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIzID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyM1wiKTtcclxuICAgICAgICAgICAgbGV0IHRpbWVEZWxheSA9IDAuMTU7XHJcbiAgICAgICAgICAgIHdhdGVyMS5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjEueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMS55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgd2F0ZXIyLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMi54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIyLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICB3YXRlcjMucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIzLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjMueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgbmFtZSA9IFwiYVwiICsgcmFuZG9tO1xyXG4gICAgICAgIC8vIGlmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKXRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKS5zcHJpdGVGcmFtZSA9IHRoaXMuVUlbXCJfc3ByaXRlRnJhbWVzXCJdW25hbWVdO1xyXG5cclxuICAgICAgICBpZih0YXJnZXQuYWN0aXZlID09IHRydWUpe1xyXG4gICAgICAgICAgICB0YXJnZXQgPSB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJob3Jpem9udGFsXCIpO1xyXG4gICAgICAgICAgICBsZXQgd2F0ZXIxID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyMVwiKTtcclxuICAgICAgICAgICAgbGV0IHdhdGVyMiA9IHRhcmdldC5nZXRDaGlsZEJ5TmFtZShcIndhdmVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXRlcjJcIik7XHJcbiAgICAgICAgICAgIGxldCB3YXRlcjMgPSB0YXJnZXQuZ2V0Q2hpbGRCeU5hbWUoXCJ3YXZlXCIpLmdldENoaWxkQnlOYW1lKFwid2F0ZXIzXCIpO1xyXG4gICAgICAgICAgICBsZXQgdGltZURlbGF5ID0gMC4xNTtcclxuICAgICAgICAgICAgd2F0ZXIxLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5tb3ZlVG8oMC42LGNjLnYyKHdhdGVyMS54LDEyMCkpLGNjLmRlbGF5VGltZSh0aW1lRGVsYXkpLFxyXG4gICAgICAgICAgICBjYy5jYWxsRnVuYygoKT0+e1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIxLnkgPSAtMTIwXHJcbiAgICAgICAgICAgIH0pKS5yZXBlYXRGb3JldmVyKCkpO1xyXG4gICAgICAgICAgICB3YXRlcjIucnVuQWN0aW9uKGNjLnNlcXVlbmNlKGNjLm1vdmVUbygwLjYsY2MudjIod2F0ZXIyLngsMTIwKSksY2MuZGVsYXlUaW1lKHRpbWVEZWxheSksXHJcbiAgICAgICAgICAgIGNjLmNhbGxGdW5jKCgpPT57XHJcbiAgICAgICAgICAgICAgICB3YXRlcjIueSA9IC0xMjBcclxuICAgICAgICAgICAgfSkpLnJlcGVhdEZvcmV2ZXIoKSk7XHJcbiAgICAgICAgICAgIHdhdGVyMy5ydW5BY3Rpb24oY2Muc2VxdWVuY2UoY2MubW92ZVRvKDAuNixjYy52Mih3YXRlcjMueCwxMjApKSxjYy5kZWxheVRpbWUodGltZURlbGF5KSxcclxuICAgICAgICAgICAgY2MuY2FsbEZ1bmMoKCk9PntcclxuICAgICAgICAgICAgICAgIHdhdGVyMy55ID0gLTEyMFxyXG4gICAgICAgICAgICB9KSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgbmFtZSA9IFwiYlwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICAvL2lmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKSB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICB9IFxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucGF0aF9UeXBlLGRhdGEub3JkZXIpO1xyXG4gICAgICAgIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnVwKXtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5kb3duKXtcclxuICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gMTgwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLmxlZnQpe1xyXG4gICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgbmFtZSA9IFwiYlwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICAvL2lmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKSB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5yaWdodCl7XHJcbiAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDI3MDtcclxuICAgICAgICAgICAgbmFtZSA9IFwiYlwiICsgcmFuZG9tO1xyXG4gICAgICAgICAgICAvL2lmKHRoaXMuYmxvY2tfVHlwZSAhPSBjYy5FbnVtKEJsb2NrVHlwZSkuUmVpbmZvcmNlKSB0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwidHVyblwiKTtcclxuICAgICAgICAgICAgaWYodGFyZ2V0Lm5hbWUgPT0gXCJ0dXJuXCIpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHdhdGVyID0gdGFyZ2V0LmdldENoaWxkQnlOYW1lKFwid2F2ZVwiKS5nZXRDaGlsZEJ5TmFtZShcIndhdGVyXCIpO1xyXG4gICAgICAgICAgICAgICAgd2F0ZXIub3BhY2l0eSA9IDBcclxuICAgICAgICAgICAgICAgIHdhdGVyLnJ1bkFjdGlvbihjYy5zZXF1ZW5jZShjYy5yb3RhdGVUbyg3LjIsLTEwODApLGNjLmRlbGF5VGltZSgwKSkucmVwZWF0Rm9yZXZlcigpKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdhdGVyLm9wYWNpdHkgPSAyNTU7XHJcbiAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG5hbWUgPSBcImNcIiArIHJhbmRvbTtcclxuICAgICAgICAgICAgLy9pZih0aGlzLmJsb2NrX1R5cGUgIT0gY2MuRW51bShCbG9ja1R5cGUpLlJlaW5mb3JjZSl0YXJnZXQuZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSB0aGlzLlVJW1wiX3Nwcml0ZUZyYW1lc1wiXVtuYW1lXTtcclxuICAgICAgICAgICAgcHJvZ3Jlc3MgPSAwLjI1O1xyXG4gICAgICAgICAgICBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS51cF9sZWZ0KXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbigtdGhpcy5wb3NfU2hpZnRpbmcsLXRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmKHRoaXMucGF0aF9UeXBlID09IGNjLkVudW0oUGF0aFR5cGUpLnVwX3JpZ2h0KXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zY2FsZVggPSAtMTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbih0aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkuZG93bl9sZWZ0KXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDE4MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zY2FsZVggPSAtMTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbigtdGhpcy5wb3NfU2hpZnRpbmcsdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkuZG93bl9yaWdodCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAxODA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24odGhpcy5wb3NfU2hpZnRpbmcsdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkubGVmdF91cCl7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2NhbGVZID0gLTE7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0UG9zaXRpb24odGhpcy5wb3NfU2hpZnRpbmcsdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkubGVmdF9kb3duKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IDkwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZywtdGhpcy5wb3NfU2hpZnRpbmcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wYXRoX1R5cGUgPT0gY2MuRW51bShQYXRoVHlwZSkucmlnaHRfdXApe1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LmFuZ2xlID0gLTkwO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldFBvc2l0aW9uKC10aGlzLnBvc19TaGlmdGluZyx0aGlzLnBvc19TaGlmdGluZyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBhdGhfVHlwZSA9PSBjYy5FbnVtKFBhdGhUeXBlKS5yaWdodF9kb3duKXtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hbmdsZSA9IC05MDtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zY2FsZVggPSAtMTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXRQb3NpdGlvbigtdGhpcy5wb3NfU2hpZnRpbmcsLXRoaXMucG9zX1NoaWZ0aW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYodGhpcy5wYXRoX1R5cGUgPT0gXCJFbmRcIil7XHJcbiAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYodGhpcy5ibG9ja19UeXBlID09IGNjLkVudW0oQmxvY2tUeXBlKS5FbmQpe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwid2F0ZXJTdGFydFwiKS5hY3RpdmUgPT0gdHJ1ZSAmJiB0aGlzLmJsb2NrX1R5cGUgPT0gY2MuRW51bShCbG9ja1R5cGUpLkVuZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgY2MudHdlZW4odGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwid2F0ZXJTdGFydFwiKSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oMC4yLHtvcGFjaXR5OjI1NX0pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCk9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxlcnQoXCLmsrvmsLTmiJDlip9cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNjLmZ4Lk5vdGlmaWNhdGlvbnMuZW1pdChjYy5meC5NZXNzYWdlLnNob3dSZXN1bHQsXCJ3aW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihjYy5meC5HYW1lQ29uZmlnLkdNX0lORk8ubGV2ZWwgPCA3KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjLmZ4LkdhbWVDb25maWcuR01fSU5GTy5sZXZlbCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2MuZGlyZWN0b3IubG9hZFNjZW5lKFwiR2FtZVNjZW5lXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAuc3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwiRW5kXCIpOyBcclxuICAgICAgICAgICAgICAgIHRhcmdldC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwb3NUZW1wID0gZGF0YS5sYXN0O1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5wb3MueCAtIHBvc1RlbXAueCA+PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAtOTA7XHJcblxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZih0aGlzLnBvcy54IC0gcG9zVGVtcC54IDw9IC0xKXtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSA5MDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYodGhpcy5wb3MueSAtIHBvc1RlbXAueSA+PSAxKXtcclxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQuYW5nbGUgPSAxODA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY2MudHdlZW4odGFyZ2V0KVxyXG4gICAgICAgICAgICAgICAgLnRvKDAuNSx7b3BhY2l0eToyNTV9KVxyXG4gICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxlcnQoXCLmsrvmsLTlpLHotKVcIilcclxuICAgICAgICAgICAgICAgICAgICBjYy5meC5Ob3RpZmljYXRpb25zLmVtaXQoY2MuZnguTWVzc2FnZS5zaG93UmVzdWx0LFwibG9zZVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjYy5kaXJlY3Rvci5sb2FkU2NlbmUoXCJHYW1lU2NlbmVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdGFydCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICB0YXJnZXQuYWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGFyZ2V0LmdldENvbXBvbmVudChjYy5TcHJpdGUpLmZpbGxSYW5nZSA9IDA7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHRhcmdldC5nZXRDb21wb25lbnQoY2MuU3ByaXRlKSlcclxuICAgICAgICAgICAgLnRvKHRpbWUse2ZpbGxSYW5nZTpwcm9ncmVzc30pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgaWYoZGF0YS5jaXJjdWxhdGUpXHJcbiAgICAgICAgICAgICAgICAgICAgY2MuZnguTm90aWZpY2F0aW9ucy5lbWl0KGNjLmZ4Lk1lc3NhZ2UubmV4dFdhdGVyLG9yZGVyKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyB1cGRhdGUgKGR0KSB7fVxyXG59XHJcbiJdfQ==
|