FlyUp/temp/quick-scripts/dst/assets/Script/Player.js
2024-06-11 16:02:27 +08:00

348 lines
47 KiB
JavaScript

(function() {
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
var __module = nodeEnv ? module : {exports:{}};
var __filename = 'preview-scripts/assets/Script/Player.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, '7fd74nqW4BCN6aFalN5nmyL', 'Player');
// Script/Player.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 GameManager_1 = require("./GameManager");
var AudioManager_1 = require("./tool/AudioManager");
var Notification_1 = require("./tool/Notification");
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
0;
var NewClass = /** @class */ (function (_super) {
__extends(NewClass, _super);
function NewClass() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.add = null;
_this.plist = null;
return _this;
}
// LIFE-CYCLE CALLBACKS:
// onLoad () {}
NewClass.prototype.start = function () {
this.init();
};
NewClass.prototype.init = function () {
this.jumpState = 0;
this.jumpHeight = this.node.y;
this.basicHeight = this.node.y;
this.up = true;
this.double = false;
this.death = false;
this.jumpAction = null;
this.block = null;
this.interfere = false;
};
//跳动
NewClass.prototype.jump = function () {
var _this = this;
if (this.jumpState < 2) {
if (this.jumpState == 0) {
if (this.death == false) {
this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false);
}
}
else if (this.jumpState == 1 || this.node.y > (this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight - 5)) {
if (this.death == false) {
this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false);
}
}
setTimeout(function () {
if (_this.jumpState == 0) {
if (_this.block) {
_this.block.getComponent("Block").hide();
_this.block = null;
}
GameData_1.default._instance.CLICK_DATA.jumps = 1;
AudioManager_1.default._instance.playJump();
_this.basicHeight = _this.node.y;
_this.jumpState += 1;
_this.up = true;
Notification_1.Notification.emit("showGround", _this.node.y);
_this.jumpAction = cc.tween(_this.node)
.to(GameData_1.default._instance.GM_INFO.jumpUpTime, { position: cc.v3(0, _this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight, 0) }, { easing: 'quadOut' })
.call(function () {
_this.up = false;
_this.jumpState = -1;
var temp = _this.node.y - _this.jumpHeight;
console.log("距离", temp);
})
.to(GameData_1.default._instance.GM_INFO.jumpDownTime, { position: cc.v3(0, _this.jumpHeight, 0) }, { easing: 'cubicIn' })
.call(function () {
_this.jumpHeight = _this.node.y;
_this.jumpState = -1;
_this.up = true;
})
.start();
}
else if (_this.jumpState == 1 || _this.node.y > (_this.jumpHeight + GameData_1.default._instance.GM_INFO.jumpHeight - 15)) {
if (_this.jumpAction)
_this.jumpAction.stop();
AudioManager_1.default._instance.playJump();
GameData_1.default._instance.CLICK_DATA.jumps = 2;
_this.jumpState = 2;
_this.up = true;
_this.jumpAction = cc.tween(_this.node)
.to(GameData_1.default._instance.GM_INFO.jumpUpTime, { position: cc.v3(0, _this.node.y + GameData_1.default._instance.GM_INFO.jumpHeight, 0) }, { easing: 'quadOut' })
.call(function () {
_this.up = false;
})
.to(GameData_1.default._instance.GM_INFO.jumpDownTime * 1.5, { position: cc.v3(0, _this.jumpHeight, 0) }, { easing: 'cubicIn' })
.call(function () {
_this.jumpState = -1;
_this.jumpHeight = _this.node.y;
_this.up = true;
})
.start();
}
}, 100);
}
};
NewClass.prototype.onCollisionEnter = function (other, self) {
if (GameManager_1.default._instance) {
if (GameManager_1.default._instance.over == true) {
return;
}
}
var max = other.name.length;
var num = 6;
if (other.node.name != "Ground") {
if (other.node.getComponent("Block").num > 9)
num = 7;
}
var ColliderName = other.name.substring(num, max);
//获取碰撞体名字
if (ColliderName == "<PolygonCollider>") {
if (this.node.y <= other.node.y && this.up == true && this.death == false) {
if (this.jumpAction)
this.jumpAction.stop();
this.jumpState = -1;
AudioManager_1.default._instance.playGround();
// console.log("死亡1");
this.gameDeath();
}
else if (other.node.name == "Ground" && this.death == false) {
// if(this.jumpAction)this.jumpAction.stop();
this.jumpState = -1;
// console.log("死亡2");
this.gameDeath();
}
else {
// console.log("没碰到边缘",this.up,this.node.y,other.node.y,this.jumpState,this.up);
}
}
if (ColliderName == "<BoxCollider>") {
if (this.death == true) {
// console.log("已经死亡");
return;
}
//
var portrait = Math.abs(this.node.y - other.node.y);
var width = other.node.width / 2;
var pos = Math.abs(this.node.x - other.node.x);
var distance = pos / width;
// console.log("我的位置:",this.node.x,"块的位置:",other.node.x,"块的宽度:",width,"百分比:",distance);
if (this.up == true) {
// console.log("死亡4");
AudioManager_1.default._instance.playGround();
this.gameDeath();
}
else {
if (distance * 100 < GameData_1.default._instance.GM_INFO.distanceMin && this.jumpState != 0) {
// console.log("成功1");
console.log("百分比:", distance * 100 + "%");
this.success(other, distance * 100);
}
else {
if (portrait >= 20 || distance * 100 > GameData_1.default._instance.GM_INFO.distanceMax) {
// console.log("死亡3","落差:",portrait,"状态:",this.up);
AudioManager_1.default._instance.playGround();
this.gameDeath();
}
else {
// console.log("成功2");
console.log("百分比:", distance * 100 + "%");
this.success(other, distance * 100);
}
}
}
}
};
NewClass.prototype.success = function (other, distance) {
GameData_1.default._instance.CLICK_DATA.percent = Math.floor(distance);
if (GameManager_1.default._instance)
GameManager_1.default._instance.destroyBlock();
this.add.active = true;
this.add.opacity = 0;
var number = 1;
if (distance <= 7.5)
number = 3;
else if (distance <= 15)
number = 2;
GameData_1.default._instance.CLICK_DATA.accuracy = number;
this.add.getChildByName("icon").getComponent(cc.Sprite).spriteFrame = this.plist.getSpriteFrames()[number];
this.add.getChildByName("jia").getComponent(cc.Sprite).spriteFrame = this.plist.getSpriteFrames()[number + 3];
this.addAction();
this.node.getChildByName("guang").active = true;
this.node.getChildByName("guang").getComponent(sp.Skeleton).setAnimation(0, "double_1", false);
if (this.jumpAction)
this.jumpAction.stop();
if (this.death == false) {
this.node.getChildByName("sp").getComponent(sp.Skeleton).setAnimation(1, "jump", false);
}
this.block = other.node;
this.block.getComponent("Block").setScore(number);
this.basicHeight = this.node.y;
if (number > 1) {
AudioManager_1.default._instance.playPz();
if (this.double == false) {
this.double = true;
GameData_1.default._instance.LEVEL_INFO.doubleHit = 1.05;
}
else {
GameData_1.default._instance.LEVEL_INFO.doubleHit += GameData_1.default._instance.LEVEL_INFO.doubleAdd;
}
var combo = (GameData_1.default._instance.LEVEL_INFO.doubleHit - 1) * (1 / 0.05);
GameData_1.default._instance.CLICK_DATA.combo = parseInt(combo + "");
}
else {
AudioManager_1.default._instance.playLuo();
this.double = false;
GameData_1.default._instance.CLICK_DATA.combo = 0;
}
Notification_1.Notification.emit("setData", null);
setTimeout(function () {
Notification_1.Notification.emit("createBlock", null);
}, 10);
if (number > 1 && GameData_1.default._instance.LEVEL_INFO.doubleSuccess != 0) {
GameData_1.default._instance.LEVEL_INFO.doubleSuccess -= 1;
}
else {
if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess != 0 && GameData_1.default._instance.LEVEL_INFO.doubleSuccess < 3) {
GameData_1.default._instance.LEVEL_INFO.doubleSuccess = 3;
}
}
if (GameData_1.default._instance.LEVEL_INFO.doubleSuccess == 0) {
setTimeout(function () {
Notification_1.Notification.emit("createCrackBlock", null);
}, 20);
}
else {
GameManager_1.default._instance.interfere = false;
GameData_1.default._instance.CLICK_DATA.fake = GameManager_1.default._instance.interfere;
}
this.jumpState = 0;
this.up = true;
this.node.y = other.node.y - 3 + other.node.height / 2;
this.jumpHeight = this.node.y;
};
NewClass.prototype.gameDeath = function () {
// console.log("条失败");
GameData_1.default._instance.CLICK_DATA.combo = 0;
GameData_1.default._instance.CLICK_DATA.accuracy = 0;
GameData_1.default._instance.CLICK_DATA.percent = -1;
Notification_1.Notification.emit("setData", null);
this.double = false;
GameData_1.default._instance.LEVEL_INFO.doubleSuccess = 3;
this.death = true;
if (this.jumpAction)
this.jumpAction.stop();
this.jumpState = -1;
Notification_1.Notification.emit("death", null);
};
NewClass.prototype.xinAction = function () {
// console.log("生命:",GameData._instance.GM_INFO.life);
if (GameData_1.default._instance.GM_INFO.life >= 0) {
var xin = this.node.getChildByName("xin");
xin.y = 120;
cc.tween(xin)
.to(0.2, { opacity: 255, y: xin.y + 50 })
.delay(0.5)
.to(0.3, { opacity: 0, y: xin.y + 100 })
.call(function () {
})
.start();
}
};
NewClass.prototype.addAction = function () {
var _this = this;
this.add.y = 120;
cc.tween(this.add)
.to(0.2, { opacity: 255, y: this.add.y + 50 })
.delay(0.5)
.to(0.3, { opacity: 0, y: this.add.y + 100 })
.call(function () {
_this.add.active = false;
})
.start();
};
NewClass.prototype.update = function (dt) {
// if(this.death == true && this.node.y > -500 && GameManager._instance.over == false){
// // this.node.y -= 3;
// // if(this.node.y <= -500){
// // this.node.y = -500;
// // }
// }
};
__decorate([
property(cc.Node)
], NewClass.prototype, "add", void 0);
__decorate([
property(cc.SpriteAtlas)
], NewClass.prototype, "plist", 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0XFxQbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLG9CQUFvQjtBQUNwQix3RUFBd0U7QUFDeEUsbUJBQW1CO0FBQ25CLGtGQUFrRjtBQUNsRiw4QkFBOEI7QUFDOUIsa0ZBQWtGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFbEYsdUNBQWtDO0FBQ2xDLDZDQUF3QztBQUN4QyxvREFBK0M7QUFDL0Msb0RBQW1EO0FBQzdDLElBQUEsS0FBc0IsRUFBRSxDQUFDLFVBQVUsRUFBbEMsT0FBTyxhQUFBLEVBQUUsUUFBUSxjQUFpQixDQUFDO0FBQUEsQ0FBQyxDQUFBO0FBRzNDO0lBQXNDLDRCQUFZO0lBQWxEO1FBQUEscUVBc1NDO1FBblNHLFNBQUcsR0FBWSxJQUFJLENBQUM7UUFFcEIsV0FBSyxHQUFrQixJQUFJLENBQUM7O0lBaVNoQyxDQUFDO0lBdFJHLHdCQUF3QjtJQUV4QixlQUFlO0lBRWYsd0JBQUssR0FBTDtRQUNJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsdUJBQUksR0FBSjtRQUNJLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFF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QUFHLENBQUM7YUFDVixFQUFFLENBQUMsR0FBRyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUMsR0FBRyxFQUFDLENBQUM7YUFDcEMsSUFBSSxDQUFDO1lBQ0gsS0FBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUMsQ0FBQzthQUNELEtBQUssRUFBRSxDQUFDO0lBQ2IsQ0FBQztJQUVELHlCQUFNLEdBQU4sVUFBUSxFQUFFO1FBQ04sdUZBQXVGO1FBQ3ZGLDJCQUEyQjtRQUMzQixrQ0FBa0M7UUFDbEMsaUNBQWlDO1FBQ2pDLFlBQVk7UUFDWixJQUFJO0lBQ1IsQ0FBQztJQWxTRDtRQURDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO3lDQUNFO0lBRXBCO1FBREMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUM7MkNBQ0c7SUFMWCxRQUFRO1FBRDVCLE9BQU87T0FDYSxRQUFRLENBc1M1QjtJQUFELGVBQUM7Q0F0U0QsQUFzU0MsQ0F0U3FDLEVBQUUsQ0FBQyxTQUFTLEdBc1NqRDtrQkF0U29CLFFBQVEiLCJmaWxlIjoiIiwic291cmNlUm9vdCI6Ii8iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBMZWFybiBUeXBlU2NyaXB0OlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy90eXBlc2NyaXB0Lmh0bWxcclxuLy8gTGVhcm4gQXR0cmlidXRlOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9yZWZlcmVuY2UvYXR0cmlidXRlcy5odG1sXHJcbi8vIExlYXJuIGxpZmUtY3ljbGUgY2FsbGJhY2tzOlxyXG4vLyAgLSBodHRwczovL2RvY3MuY29jb3MuY29tL2NyZWF0b3IvbWFudWFsL2VuL3NjcmlwdGluZy9saWZlLWN5Y2xlLWNhbGxiYWNrcy5odG1sXHJcblxyXG5pbXBvcnQgR2FtZURhdGEgZnJvbSBcIi4vR2FtZURhdGFcIjtcclxuaW1wb3J0IEdhbWVNYW5hZ2VyIGZyb20gXCIuL0dhbWVNYW5hZ2VyXCI7XHJcbmltcG9ydCBBdWRpb01hbmFnZXIgZnJvbSBcIi4vdG9vbC9BdWRpb01hbmFnZXJcIjtcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uIH0gZnJvbSAnLi90b29sL05vdGlmaWNhdGlvbic7XHJcbmNvbnN0IHtjY2NsYXNzLCBwcm9wZXJ0eX0gPSBjYy5fZGVjb3JhdG9yOzBcclxuXHJcbkBjY2NsYXNzXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ld0NsYXNzIGV4dGVuZHMgY2MuQ29tcG9uZW50IHtcclxuXHJcbiAgICBAcHJvcGVydHkoY2MuTm9kZSlcclxuICAgIGFkZDogY2MuTm9kZSA9IG51bGw7XHJcbiAgICBAcHJvcGVydHkoY2MuU3ByaXRlQXRsYXMpXHJcbiAgICBwbGlzdDogY2MuU3ByaXRlQXRsYXMgPW51bGw7XHJcblxyXG4gICAgYmFzaWNIZWlnaHQ6bnVtYmVyICAvL+avj+asoei3s+i3g+WJjeWfuuehgOmrmOW6plxyXG4gICAganVtcFN0YXRlOm51bWJlcjsgICAvL+i3s+i3g+eKtuaAge+8jOaOp+WItjHmrrXot7My5q616LezXHJcbiAgICBqdW1wSGVpZ2h0Om51bWJlcjsgIC8v6Lez6LeD6auY5bqmXHJcbiAgICBqdW1wQWN0aW9uOiBjYy5Ud2VlbjxjYy5Ob2RlPjsvL+i3s+i3g3R3ZWVu5Yqo55S777yM55So5LqO5YGc5q2i5o6n5Yi2XHJcbiAgICB1cDpib29sZWFuOyAgICAgICAgIC8v6Lez6LeD5LiK5Y2H5LiL6ZmN54q25oCB5Yik5patXHJcbiAgICBibG9jazogY2MuTm9kZTtcclxuICAgIGRlYXRoOmJvb2xlYW47XHJcbiAgICBpbnRlcmZlcmU6Ym9vbGVhbjtcclxuICAgIGRvdWJsZTpib29sZWFuO1xyXG4gICAgLy8gTElGRS1DWUNMRSBDQUxMQkFDS1M6XHJcblxyXG4gICAgLy8gb25Mb2FkICgpIHt9XHJcblxyXG4gICAgc3RhcnQgKCkge1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXQoKXtcclxuICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5qdW1wSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgdGhpcy5iYXNpY0hlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZG91YmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kZWF0aCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuanVtcEFjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5ibG9jayA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5pbnRlcmZlcmUgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvL+i3s+WKqFxyXG4gICAganVtcCgpe1xyXG4gICAgICAgIGlmKHRoaXMuanVtcFN0YXRlIDwgMil7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuanVtcFN0YXRlID09IDApe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIikuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKS5zZXRBbmltYXRpb24oMSxcImp1bXBcIixmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZih0aGlzLmp1bXBTdGF0ZSA9PSAxIHx8IHRoaXMubm9kZS55ID4gKHRoaXMuanVtcEhlaWdodCtHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wSGVpZ2h0LTUpKXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVhdGggPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInNwXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDEsXCJqdW1wXCIsZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5qdW1wU3RhdGUgPT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5ibG9jayl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxvY2suZ2V0Q29tcG9uZW50KFwiQmxvY2tcIikuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJsb2NrID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuanVtcHMgPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUp1bXAoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJhc2ljSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgKz0gMTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcInNob3dHcm91bmRcIix0aGlzLm5vZGUueSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wQWN0aW9uID0gY2MudHdlZW4odGhpcy5ub2RlKVxyXG4gICAgICAgICAgICAgICAgICAgIC50byhHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wVXBUaW1lLHtwb3NpdGlvbjpjYy52MygwLHRoaXMuanVtcEhlaWdodCtHYW1lRGF0YS5faW5zdGFuY2UuR01fSU5GTy5qdW1wSGVpZ2h0LDApfSx7ZWFzaW5nOidxdWFkT3V0J30pXHJcbiAgICAgICAgICAgICAgICAgICAgLmNhbGwoKCkgPT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRlbXAgPSB0aGlzLm5vZGUueSAtIHRoaXMuanVtcEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLot53nprtcIix0ZW1wKVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBEb3duVGltZSx7cG9zaXRpb246Y2MudjMoMCx0aGlzLmp1bXBIZWlnaHQsMCl9LHtlYXNpbmc6J2N1YmljSW4nfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmKHRoaXMuanVtcFN0YXRlID09IDEgfHwgdGhpcy5ub2RlLnkgPiAodGhpcy5qdW1wSGVpZ2h0K0dhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBIZWlnaHQtMTUpKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlKdW1wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuanVtcHMgPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gMjtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmp1bXBBY3Rpb24gPSBjYy50d2Vlbih0aGlzLm5vZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRvKEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmp1bXBVcFRpbWUse3Bvc2l0aW9uOmNjLnYzKDAsdGhpcy5ub2RlLnkrR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcEhlaWdodCwwKX0se2Vhc2luZzoncXVhZE91dCd9KVxyXG4gICAgICAgICAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAudG8oR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uanVtcERvd25UaW1lKjEuNSx7cG9zaXRpb246Y2MudjMoMCx0aGlzLmp1bXBIZWlnaHQsMCl9LHtlYXNpbmc6J2N1YmljSW4nfSlcclxuICAgICAgICAgICAgICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5qdW1wSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkNvbGxpc2lvbkVudGVyKG90aGVyOiBjYy5Db2xsaWRlciwgc2VsZjogY2MuQ29sbGlkZXIpIHtcclxuICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2Upe1xyXG4gICAgICAgICAgICBpZihHYW1lTWFuYWdlci5faW5zdGFuY2Uub3ZlciA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1heCA9IG90aGVyLm5hbWUubGVuZ3RoO1xyXG4gICAgICAgIGxldCBudW0gPSA2O1xyXG4gICAgICAgIGlmKG90aGVyLm5vZGUubmFtZSAhPSBcIkdyb3VuZFwiKXtcclxuICAgICAgICAgICAgaWYob3RoZXIubm9kZS5nZXRDb21wb25lbnQoXCJCbG9ja1wiKS5udW0gPiA5KSBudW0gPSA3OyBcclxuICAgICAgICB9XHJcbiAgICAgIFxyXG4gICAgICAgIGxldCBDb2xsaWRlck5hbWUgPSBvdGhlci5uYW1lLnN1YnN0cmluZyhudW0sbWF4KTtcclxuICAgICAgICAvL+iOt+WPlueisOaSnuS9k+WQjeWtl1xyXG4gICAgICAgIGlmKENvbGxpZGVyTmFtZSA9PSBcIjxQb2x5Z29uQ29sbGlkZXI+XCIpe1xyXG4gICAgICAgICAgICBpZih0aGlzLm5vZGUueSA8PSBvdGhlci5ub2RlLnkgJiYgdGhpcy51cCA9PSB0cnVlICYmIHRoaXMuZGVhdGggPT0gZmFsc2Upe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmp1bXBTdGF0ZSA9IC0xO1xyXG4gICAgICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5R3JvdW5kKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuatu+S6oTFcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVEZWF0aCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYob3RoZXIubm9kZS5uYW1lID09IFwiR3JvdW5kXCIgJiYgdGhpcy5kZWF0aCA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAvLyBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuanVtcFN0YXRlID0gLTE7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuatu+S6oTJcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdhbWVEZWF0aCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuayoeeisOWIsOi+uee8mFwiLHRoaXMudXAsdGhpcy5ub2RlLnksb3RoZXIubm9kZS55LHRoaXMuanVtcFN0YXRlLHRoaXMudXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKENvbGxpZGVyTmFtZSA9PSBcIjxCb3hDb2xsaWRlcj5cIiApe1xyXG4gICAgICAgICAgICBpZih0aGlzLmRlYXRoID09IHRydWUpe1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLlt7Lnu4/mrbvkuqFcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9cclxuICAgICAgICAgICAgbGV0IHBvcnRyYWl0ID0gTWF0aC5hYnModGhpcy5ub2RlLnktb3RoZXIubm9kZS55KVxyXG4gICAgICAgICAgICBsZXQgd2lkdGggPSBvdGhlci5ub2RlLndpZHRoLzI7XHJcbiAgICAgICAgICAgIGxldCBwb3MgPSBNYXRoLmFicyh0aGlzLm5vZGUueCAtIG90aGVyLm5vZGUueCk7XHJcbiAgICAgICAgICAgIGxldCBkaXN0YW5jZSA9cG9zL3dpZHRoO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuaIkeeahOS9jee9rjpcIix0aGlzLm5vZGUueCxcIuWdl+eahOS9jee9rjpcIixvdGhlci5ub2RlLngsXCLlnZfnmoTlrr3luqY6XCIsd2lkdGgsXCLnmb7liIbmr5Q6XCIsZGlzdGFuY2UpO1xyXG5cclxuICAgICAgICAgICAgaWYodGhpcy51cCA9PSB0cnVlKXtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5q275LqhNFwiKTtcclxuICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUdyb3VuZCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nYW1lRGVhdGgoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgaWYoZGlzdGFuY2UqMTAwIDwgR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8uZGlzdGFuY2VNaW4gJiYgdGhpcy5qdW1wU3RhdGUgIT0gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmiJDlip8xXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi55m+5YiG5q+UOlwiLGRpc3RhbmNlKjEwMCtcIiVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzKG90aGVyLGRpc3RhbmNlKjEwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHBvcnRyYWl0ID49IDIwIHx8IGRpc3RhbmNlKjEwMCA+IEdhbWVEYXRhLl9pbnN0YW5jZS5HTV9JTkZPLmRpc3RhbmNlTWF4KXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCLmrbvkuqEzXCIsXCLokL3lt646XCIscG9ydHJhaXQsXCLnirbmgIE6XCIsdGhpcy51cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEF1ZGlvTWFuYWdlci5faW5zdGFuY2UucGxheUdyb3VuZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbWVEZWF0aCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuaIkOWKnzJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi55m+5YiG5q+UOlwiLGRpc3RhbmNlKjEwMCtcIiVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyhvdGhlcixkaXN0YW5jZSoxMDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdWNjZXNzKG90aGVyLGRpc3RhbmNlKXtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5wZXJjZW50ID0gTWF0aC5mbG9vcihkaXN0YW5jZSk7XHJcbiAgICAgICAgaWYoR2FtZU1hbmFnZXIuX2luc3RhbmNlKUdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5kZXN0cm95QmxvY2soKTtcclxuICAgICAgICB0aGlzLmFkZC5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuYWRkLm9wYWNpdHkgPSAwO1xyXG4gICAgICAgIGxldCBudW1iZXIgPSAxO1xyXG4gICAgICAgIGlmKGRpc3RhbmNlIDw9IDcuNSkgbnVtYmVyID0gMztcclxuICAgICAgICBlbHNlIGlmKGRpc3RhbmNlIDw9IDE1KSBudW1iZXIgPSAyO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmFjY3VyYWN5ID0gbnVtYmVyO1xyXG4gICAgXHJcbiAgICAgICAgdGhpcy5hZGQuZ2V0Q2hpbGRCeU5hbWUoXCJpY29uXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5wbGlzdC5nZXRTcHJpdGVGcmFtZXMoKVtudW1iZXJdO1xyXG4gICAgICAgIHRoaXMuYWRkLmdldENoaWxkQnlOYW1lKFwiamlhXCIpLmdldENvbXBvbmVudChjYy5TcHJpdGUpLnNwcml0ZUZyYW1lID0gdGhpcy5wbGlzdC5nZXRTcHJpdGVGcmFtZXMoKVtudW1iZXIrM107XHJcbiAgICAgICAgdGhpcy5hZGRBY3Rpb24oKTtcclxuICAgICAgICB0aGlzLm5vZGUuZ2V0Q2hpbGRCeU5hbWUoXCJndWFuZ1wiKS5hY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcImd1YW5nXCIpLmdldENvbXBvbmVudChzcC5Ta2VsZXRvbikuc2V0QW5pbWF0aW9uKDAsXCJkb3VibGVfMVwiLGZhbHNlKTtcclxuICAgICAgICBpZih0aGlzLmp1bXBBY3Rpb24pdGhpcy5qdW1wQWN0aW9uLnN0b3AoKTtcclxuICAgICAgICBpZih0aGlzLmRlYXRoID09IGZhbHNlKXtcclxuICAgICAgICAgICAgdGhpcy5ub2RlLmdldENoaWxkQnlOYW1lKFwic3BcIikuZ2V0Q29tcG9uZW50KHNwLlNrZWxldG9uKS5zZXRBbmltYXRpb24oMSxcImp1bXBcIixmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJsb2NrID0gb3RoZXIubm9kZTtcclxuICAgICAgICB0aGlzLmJsb2NrLmdldENvbXBvbmVudChcIkJsb2NrXCIpLnNldFNjb3JlKG51bWJlcik7XHJcbiAgICAgICAgdGhpcy5iYXNpY0hlaWdodCA9IHRoaXMubm9kZS55O1xyXG4gICAgICAgIGlmKG51bWJlciA+IDEpe1xyXG4gICAgICAgICAgICBBdWRpb01hbmFnZXIuX2luc3RhbmNlLnBsYXlQeigpO1xyXG4gICAgICAgICAgICBpZih0aGlzLmRvdWJsZSA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRvdWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQgPSAxLjA1O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQgKz0gR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlQWRkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb21ibyA9IChHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVIaXQtMSkqKDEvMC4wNSk7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gcGFyc2VJbnQoY29tYm8gKyBcIlwiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgQXVkaW9NYW5hZ2VyLl9pbnN0YW5jZS5wbGF5THVvKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZG91YmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmNvbWJvID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwic2V0RGF0YVwiLG51bGwpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcImNyZWF0ZUJsb2NrXCIsbnVsbCk7XHJcbiAgICAgICAgfSwgMTApO1xyXG4gIFxyXG4gICAgICAgIGlmKG51bWJlciA+IDEgJiYgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyAhPSAwICl7XHJcbiAgICAgICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3MgLT0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyAhPSAwICYmIEdhbWVEYXRhLl9pbnN0YW5jZS5MRVZFTF9JTkZPLmRvdWJsZVN1Y2Nlc3M8Myl7XHJcbiAgICAgICAgICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzID0gMztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZihHYW1lRGF0YS5faW5zdGFuY2UuTEVWRUxfSU5GTy5kb3VibGVTdWNjZXNzID09IDApe1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwiY3JlYXRlQ3JhY2tCbG9ja1wiLG51bGwpO1xyXG4gICAgICAgICAgICB9LCAyMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5pbnRlcmZlcmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuZmFrZSA9IEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5pbnRlcmZlcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuanVtcFN0YXRlID0gMDtcclxuICAgICAgICB0aGlzLnVwID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vZGUueSA9IG90aGVyLm5vZGUueS0zK290aGVyLm5vZGUuaGVpZ2h0LzI7XHJcbiAgICAgICAgdGhpcy5qdW1wSGVpZ2h0ID0gdGhpcy5ub2RlLnk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2FtZURlYXRoKCl7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLmnaHlpLHotKVcIik7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkNMSUNLX0RBVEEuY29tYm8gPSAwO1xyXG4gICAgICAgIEdhbWVEYXRhLl9pbnN0YW5jZS5DTElDS19EQVRBLmFjY3VyYWN5ID0gMDtcclxuICAgICAgICBHYW1lRGF0YS5faW5zdGFuY2UuQ0xJQ0tfREFUQS5wZXJjZW50ID0gLTE7XHJcblxyXG4gICAgICAgIE5vdGlmaWNhdGlvbi5lbWl0KFwic2V0RGF0YVwiLG51bGwpO1xyXG4gICAgICAgIHRoaXMuZG91YmxlID0gZmFsc2U7XHJcbiAgICAgICAgR2FtZURhdGEuX2luc3RhbmNlLkxFVkVMX0lORk8uZG91YmxlU3VjY2VzcyA9IDM7XHJcbiAgICAgICAgdGhpcy5kZWF0aCA9IHRydWU7XHJcbiAgICAgICAgaWYodGhpcy5qdW1wQWN0aW9uKXRoaXMuanVtcEFjdGlvbi5zdG9wKCk7XHJcbiAgICAgICAgdGhpcy5qdW1wU3RhdGUgPSAtMTtcclxuICAgICAgICBOb3RpZmljYXRpb24uZW1pdChcImRlYXRoXCIsbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgeGluQWN0aW9uKCl7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCLnlJ/lkb06XCIsR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSk7XHJcbiAgICAgICAgaWYoR2FtZURhdGEuX2luc3RhbmNlLkdNX0lORk8ubGlmZSA+PSAwKXtcclxuICAgICAgICAgICAgbGV0IHhpbiA9IHRoaXMubm9kZS5nZXRDaGlsZEJ5TmFtZShcInhpblwiKTtcclxuICAgICAgICAgICAgeGluLnkgPSAxMjA7XHJcbiAgICAgICAgICAgIGNjLnR3ZWVuKHhpbilcclxuICAgICAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTUseTp4aW4ueSs1MH0pXHJcbiAgICAgICAgICAgIC5kZWxheSgwLjUpXHJcbiAgICAgICAgICAgIC50bygwLjMse29wYWNpdHk6MCx5Onhpbi55KzEwMH0pXHJcbiAgICAgICAgICAgIC5jYWxsKCgpID0+e1xyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0YXJ0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEFjdGlvbigpe1xyXG4gICAgICAgIHRoaXMuYWRkLnkgPSAxMjA7XHJcbiAgICAgICAgY2MudHdlZW4odGhpcy5hZGQpXHJcbiAgICAgICAgLnRvKDAuMix7b3BhY2l0eToyNTUseTp0aGlzLmFkZC55KzUwfSlcclxuICAgICAgICAuZGVsYXkoMC41KVxyXG4gICAgICAgIC50bygwLjMse29wYWNpdHk6MCx5OnRoaXMuYWRkLnkrMTAwfSlcclxuICAgICAgICAuY2FsbCgoKSA9PntcclxuICAgICAgICAgICB0aGlzLmFkZC5hY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdGFydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZSAoZHQpIHtcclxuICAgICAgICAvLyBpZih0aGlzLmRlYXRoID09IHRydWUgJiYgdGhpcy5ub2RlLnkgPiAtNTAwICYmIEdhbWVNYW5hZ2VyLl9pbnN0YW5jZS5vdmVyID09IGZhbHNlKXtcclxuICAgICAgICAvLyAgICAgLy8gdGhpcy5ub2RlLnkgLT0gMztcclxuICAgICAgICAvLyAgICAgLy8gaWYodGhpcy5ub2RlLnkgPD0gLTUwMCl7XHJcbiAgICAgICAgLy8gICAgIC8vICAgICB0aGlzLm5vZGUueSA9IC01MDA7XHJcbiAgICAgICAgLy8gICAgIC8vIH0gXHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==