Commit 8dceca2e authored by 胡振隆's avatar 胡振隆

Merge branch 'master' of http://gitlab.llewan.com/llewan/cdn

parents cec67aec b15491eb
{}
\ No newline at end of file
<html>
<head>
<title>www.layabox.com</title>
<meta charset='utf-8' />
<meta name='renderer' content='webkit' />
<meta name='viewport' content='width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no'
/>
<meta name='apple-mobile-web-app-capable' content='yes' />
<meta name='full-screen' content='true' />
<meta name='x5-fullscreen' content='true' />
<meta name='360-fullscreen' content='true' />
<meta name='laya' screenorientation='landscape' />
<meta http-equiv='expires' content='0' />
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1' />
<meta http-equiv='expires' content='0' />
<meta http-equiv='Cache-Control' content='no-siteapp' />
</head>
<body>
<script type="text/javascript">
function loadLib(url) {
var script = document.createElement("script");
script.async = false;
script.src = url;
document.body.appendChild(script);
}
</script>
<script type="text/javascript" src="index.js"></script>
</body>
</html>
\ No newline at end of file
/**
* 设置LayaNative屏幕方向,可设置以下值
* landscape 横屏
* portrait 竖屏
* sensor_landscape 横屏(双方向)
* sensor_portrait 竖屏(双方向)
*/
window.screenOrientation = "sensor_landscape";
//-----libs-begin-----
loadLib("libs/laya.core.js")
loadLib("libs/laya.webgl.js")
loadLib("libs/laya.html.js")
loadLib("libs/laya.d3.js")
loadLib("libs/laya.physics3D.js")
//-----libs-end-------
//loadLib("libs/fairygui.js");
loadLib("js/bundle.js");
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
"use strict";
/**This class is automatically generated by LayaAirIDE, please do not make any modifications. */
Object.defineProperty(exports, "__esModule", { value: true });
/*
* 游戏初始化配置;
*/
var GameConfig = /** @class */ (function () {
function GameConfig() {
}
GameConfig.init = function () {
var reg = Laya.ClassUtils.regClass;
};
GameConfig.width = 1334;
GameConfig.height = 750;
GameConfig.scaleMode = "fixedauto";
GameConfig.screenMode = "none";
GameConfig.alignV = "top";
GameConfig.alignH = "left";
GameConfig.startScene = "";
GameConfig.sceneRoot = "";
GameConfig.debug = false;
GameConfig.stat = false;
GameConfig.physicsDebug = false;
GameConfig.exportSceneToJson = true;
return GameConfig;
}());
exports.default = GameConfig;
GameConfig.init();
},{}],2:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var GameConfig_1 = require("./GameConfig");
var OrbitCamera_1 = require("./OrbitCamera");
var PathMove_1 = require("./PathMove");
var Main = /** @class */ (function () {
function Main() {
this.sceneRes = "res/3d/scene/Conventional/scene.ls";
//根据IDE设置初始化引擎
if (window["Laya3D"])
Laya3D.init(GameConfig_1.default.width, GameConfig_1.default.height);
else
Laya.init(GameConfig_1.default.width, GameConfig_1.default.height, Laya["WebGL"]);
Laya["Physics"] && Laya["Physics"].enable();
Laya["DebugPanel"] && Laya["DebugPanel"].enable();
Laya.stage.scaleMode = GameConfig_1.default.scaleMode;
Laya.stage.screenMode = GameConfig_1.default.screenMode;
//兼容微信不支持加载scene后缀场景
Laya.URL.exportSceneToJson = GameConfig_1.default.exportSceneToJson;
//打开调试面板(通过IDE设置调试模式,或者url地址增加debug=true参数,均可打开调试面板)
if (GameConfig_1.default.debug || Laya.Utils.getQueryString("debug") == "true")
Laya.enableDebugPanel();
if (GameConfig_1.default.physicsDebug && Laya["PhysicsDebugDraw"])
Laya["PhysicsDebugDraw"].enable();
if (GameConfig_1.default.stat)
Laya.Stat.show();
Laya.alertGlobalError = true;
//激活资源版本控制,version.json由IDE发布功能自动生成,如果没有也不影响后续流程
Laya.ResourceVersion.enable("version.json", Laya.Handler.create(this, this.onVersionLoaded), Laya.ResourceVersion.FILENAME_VERSION);
}
Main.prototype.onVersionLoaded = function () {
Laya.Scene3D.load(this.sceneRes, Laya.Handler.create(this, this.onLoadSceneComplete));
};
Main.prototype.onLoadSceneComplete = function (scene) {
this.scene = scene;
Laya.stage.addChild(this.scene);
var cameraTarget = new Laya.Sprite3D();
cameraTarget.transform.position = new Laya.Vector3(5, 0, 0);
this.scene.addChild(cameraTarget);
this.camera = this.scene.getChildByName("CameraPivot").getChildAt(0);
var orbit = this.camera.addComponent(OrbitCamera_1.OrbitCamera);
orbit.Target = cameraTarget;
orbit.canPan = true;
orbit.Radius = 35;
orbit.setRotation(-150, -210);
var player = this.scene.getChildByName("Player");
var playerAnim = player.getChildAt(0).getComponent(Laya.Animator);
var pathMove = player.addComponent(PathMove_1.default);
pathMove.moveComplete = Laya.Handler.create(this, function () {
playerAnim.crossFade("Idle", 0.1, 0, 0);
});
var wayPoints = [];
for (var i = 0; i < this.scene.getChildByName("PlayerWayPoint")._children.length; i++) {
var point = this.scene.getChildByName("PlayerWayPoint")._children[i];
wayPoints.push(point.transform.position);
}
Laya.timer.once(3000, this, function () {
playerAnim.crossFade("Walk", 0.1, 0, 0);
pathMove.SetMovePath(wayPoints, true);
});
};
return Main;
}());
//激活启动类
new Main();
},{"./GameConfig":1,"./OrbitCamera":4,"./PathMove":5}],3:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MathHelper = /** @class */ (function () {
function MathHelper() {
}
/**
* 获取两向量角度
*/
MathHelper.Vector3Angle = function (v1, v2) {
Laya.Vector3.normalize(v2, v2);
var dot = Laya.Vector3.dot(v1, v2);
var angle = Math.acos(dot) * 57.29578;
return angle;
};
/**
* 球表面随机
*/
MathHelper.onUnitSphere = function (radius) {
var p1 = this.randomFloat(-radius, radius);
var p2 = this.randomFloat(0, radius);
var p3 = this.randomFloat(-radius, radius);
var v3 = new Laya.Vector3(p1, p2, p3);
//Laya.Vector3.normalize(v3,v3);
Laya.Vector3.scale(v3, radius, v3);
return v3;
};
MathHelper.randomFloat = function (min, max) {
return Math.random() * (max - min) + min;
};
/**
* 随机范围获取整数数值 min<= value <=max
* */
MathHelper.random = function (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
};
/**
* ClampAngle
*/
MathHelper.clampAngle = function (angle, min, max) {
if (angle < min) {
angle = min;
}
else if (angle > max) {
angle = max;
}
return angle;
};
/**
* Clamp
*/
MathHelper.clamp = function (value, min, max) {
if (value < min) {
value = min;
}
else if (value > max) {
value = max;
}
return value;
};
MathHelper.newGuid = function () {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
};
MathHelper.number2BigNumber = function (n, maxLen) {
if (maxLen === void 0) { maxLen = 4; }
var outNum;
var k = 1000;
var base = k;
var pow = 0;
for (pow = 0;; pow++) {
if (n < base) {
break;
}
base *= k;
}
var unit = "";
if (pow < 5) {
unit = pow == 0 ? "" : (pow == 1 ? "k" : (pow == 2 ? "m" : (pow == 3 ? "b" : "t")));
}
else {
var l_a = 97;
var l_A = 65;
var div = Math.floor((pow - 5) / 26);
var mod = (pow - 5) % 26;
unit = div == 0 ? String.fromCharCode(l_a + mod, l_a + mod) : (div == 1 ? String.fromCharCode(l_A + mod, l_a + mod) : String.fromCharCode(l_A + mod, l_A + mod));
}
outNum = String(n / (base * 0.001));
return "." == (outNum = outNum.substr(0, maxLen)).charAt(outNum.length - 1) ? outNum.replace(".", unit) : outNum + unit;
};
MathHelper.getSystemTime = function () {
var curDate = new Date();
var year = curDate.getFullYear();
var month = curDate.getMonth() + 1;
var date = curDate.getDate();
var day = curDate.getDay();
var hour = curDate.getHours();
var minute = curDate.getMinutes();
var second = curDate.getSeconds();
var systemTime = year + "年" + month + "月" + date + "日" + hour + "时" + minute + "分" + second + "秒";
return systemTime;
};
/*对比版本*/
MathHelper.CompareVersion = function (v1, v2) {
var arr1 = v1.split('.');
var arr2 = v2.split('.');
var len = Math.max(arr1.length, arr2.length);
while (arr1.length < len) {
arr1.push('0');
}
while (arr2.length < len) {
arr2.push('0');
}
for (var i = 0; i < len; i++) {
var num1 = parseInt(arr1[i]);
var num2 = parseInt(arr2[i]);
if (num1 > num2) {
return 1;
}
else if (num1 < num2) {
return -1;
}
}
return 0;
};
MathHelper.CountDown = function (time) {
var minute = Math.floor(time / 60);
var second = time % 60;
return (minute < 10 ? "0" + minute : minute) + ":" + (second < 10 ? "0" + second : second);
};
MathHelper.countDay = function (d1, d2) {
var s1 = new Date(d1);
var s2 = new Date(d2);
var days = s1.getTime() - s2.getTime();
var time = days / (1000 * 60 * 60 * 24);
return time;
};
MathHelper.getTime = function () {
var curDate = new Date();
var year = curDate.getFullYear();
var month = curDate.getMonth() + 1;
var date = curDate.getDate();
if (month < 10) {
}
var systemTime = year + "/" + (month < 10 ? "0" + month : month) + "/" + (date < 10 ? "0" + date : date);
return systemTime;
};
MathHelper.prefixInteger = function (num, length) {
return (Array(length).join('0') + num).slice(-length);
};
/**
* Deg2Rad = 0.01745329
*/
MathHelper.Deg2Rad = 0.01745329;
/**
* Rad2Deg = 57.29578
*/
MathHelper.Rad2Deg = 57.29578;
return MathHelper;
}());
exports.MathHelper = MathHelper;
},{}],4:[function(require,module,exports){
"use strict";
/*
* OrbitCamera 360观察物体相机
* unity需要取巧处理
*/
Object.defineProperty(exports, "__esModule", { value: true });
var MouseManager = laya.events.MouseManager;
var Quaternion = laya.d3.math.Quaternion;
var Event = Laya.Event;
var MathHelper_1 = require("./MathHelper");
var OrbitCamera = /** @class */ (function (_super) {
__extends(OrbitCamera, _super);
function OrbitCamera() {
var _this = _super.call(this) || this;
_this.factor = 0.1;
_this.canPan = false;
_this.RotateSpeed = 0.5;
_this.PanSpeed = 3;
_this.SmoothTime = 1;
_this.YMinLimit = -180;
_this.YMaxLimit = 180;
_this.Distance = 35;
_this.DistanceMin = 15;
_this.DistanceMax = 35;
_this.Pause = false;
_this.isTweening = false;
_this.Radius = 0;
_this.AngleH = 0;
_this.AngleV = 0;
_this.PanX = 0;
_this.PanY = 0;
_this.downX = 0;
_this.downY = 0;
_this.isDown = false;
_this.mouseX = 0;
_this.mouseY = 0;
_this.isMoved = false;
_this.tmpOutRotation = new Quaternion(0, 0, 0, 0);
_this.lastDistance = 0;
_this.targetOffsetMoveY = 0;
_this.tweenRotation = new Laya.Quaternion(0, 0, 0, 0);
_this.up = new Laya.Vector3();
return _this;
}
OrbitCamera.prototype.onAwake = function () {
this.modle = this.owner.transform;
this.modleParent = this.modle._parent;
var angles = this.modleParent.localRotationEuler;
this.AngleH = angles.y;
this.AngleV = angles.x;
this.initEvents();
};
OrbitCamera.prototype.onDestroy = function () {
Laya.stage.off(Laya.Event.MOUSE_DOWN, this, this.onMouseDownHandler);
Laya.stage.off(Laya.Event.MOUSE_UP, this, this.onMouseUpHandler);
Laya.stage.off(Laya.Event.MOUSE_WHEEL, this, this.onMouserWheelHandler);
};
OrbitCamera.prototype.getRotation = function () {
return this.modleParent.localRotation;
};
OrbitCamera.prototype.setRotation = function (h, v, useTween) {
if (useTween === void 0) { useTween = false; }
var t = new Laya.Quaternion(this.modleParent.localRotation.x, this.modleParent.localRotation.y, this.modleParent.localRotation.z, this.modleParent.localRotation.w);
this.AngleH = h;
this.AngleV = v;
Quaternion.createFromYawPitchRoll(this.AngleH * 0.005 * this.RotateSpeed, this.AngleV * 0.005 * this.RotateSpeed, 0, this.tmpOutRotation);
if (useTween) {
this.isTweening = true;
fairygui.tween.GTween.to4(t.x, t.y, t.z, t.w, this.tmpOutRotation.x, this.tmpOutRotation.y, this.tmpOutRotation.z, this.tmpOutRotation.w, 1)
.onUpdate(this.onTweenRotationUpdate, this)
.onComplete(this.onTweenRotationCompelte, this);
}
else {
this.modleParent.localRotation = this.tmpOutRotation;
}
};
OrbitCamera.prototype.onTweenRotationUpdate = function (tween) {
this.tmpOutRotation = new Laya.Quaternion(tween.value.x, tween.value.y, tween.value.z, tween.value.w);
this.modleParent.localRotation = this.tmpOutRotation;
};
OrbitCamera.prototype.onTweenRotationCompelte = function () {
this.isTweening = false;
this.Pause = false;
};
OrbitCamera.prototype.onUpdate = function () {
if (this.Pause || this.isTweening) {
return;
}
// let an = 3.14 / 2;
// let moveH = this.mouseX * Math.cos(an) + this.mouseY * Math.sin(an);
// let moveV = this.mouseX * Math.sin(an) + this.mouseY * Math.cos(an)
// this.AngleH += moveH;
// this.AngleV += moveV;
this.modleParent.getUp(this.up);
if (this.up.y > 0) {
this.AngleH -= this.mouseX;
}
else {
this.AngleH += this.mouseX;
}
// if (this.modleParent.right.x > 0) {
// this.AngleV -= this.mouseY ;
// } else {
// this.AngleV += this.mouseY ;
// }
this.AngleV -= this.mouseY;
};
OrbitCamera.prototype.onLateUpdate = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.Target != null) {
//this.Target.transform.localPosition = new Laya.Vector3(0, this.targetOffsetMoveY, 0);
if (this.canPan == false) {
this.camereRotate();
}
else {
this.cameraPan();
}
this.cameraZoom();
}
this.mouseX = 0;
this.mouseY = 0;
};
OrbitCamera.prototype.cameraPan = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.isDown) {
this.modle.localPositionX = this.PanX;
this.modle.localPositionY = this.PanY;
}
};
OrbitCamera.prototype.camereRotate = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.isDown) {
//this.AngleV = MathHelper.Clamp(this.AngleV, this.YMinLimit, this.YMaxLimit);
Quaternion.createFromYawPitchRoll(this.AngleH * 0.005 * this.RotateSpeed, this.AngleV * 0.005 * this.RotateSpeed, 0, this.tmpOutRotation);
this.modleParent.localRotation = this.tmpOutRotation;
}
};
OrbitCamera.prototype.cameraZoom = function () {
if (this.Pause || this.isTweening) {
return;
}
if (this.modle.localPosition.z != this.Distance) {
this.modle.localPosition = new Laya.Vector3(this.PanX, this.targetOffsetMoveY + this.PanY, this.Distance);
}
};
OrbitCamera.prototype.initEvents = function () {
Laya.stage.on(Laya.Event.MOUSE_DOWN, this, this.onMouseDownHandler);
Laya.stage.on(Laya.Event.MOUSE_UP, this, this.onMouseUpHandler);
Laya.stage.on(Laya.Event.MOUSE_WHEEL, this, this.onMouserWheelHandler);
};
OrbitCamera.prototype.onMouserWheelHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
var distance = this.lastDistance + e.delta;
this.Distance -= (distance - this.lastDistance) * this.factor;
this.Distance = MathHelper_1.MathHelper.clamp(this.Distance, this.DistanceMin, this.DistanceMax);
this.lastDistance = distance;
this.targetOffsetMoveY = -(this.Distance - 8) / this.DistanceMin * this.Radius;
this.targetOffsetMoveY = MathHelper_1.MathHelper.clamp(this.targetOffsetMoveY, 0, this.Radius);
};
OrbitCamera.prototype.onMouseDownHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
if (e.touches) {
var touches = e.touches;
if (touches && touches.length == 2) {
this.lastDistance = this.getDistance(touches);
Laya.stage.on(Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
else {
this.downX = e.stageX;
this.downY = e.stageY;
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
}
else {
this.downX = MouseManager.instance.mouseX;
this.downY = MouseManager.instance.mouseY;
Laya.stage.on(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
}
this.isDown = true;
this.isMoved = false;
};
OrbitCamera.prototype.onMouseUpHandler = function () {
if (this.Pause || this.isTweening) {
return;
}
this.isDown = false;
this.isMoved = false;
this.mouseX = 0;
this.mouseY = 0;
Laya.stage.off(Laya.Event.MOUSE_MOVE, this, this.onMouseMoveHandler);
};
OrbitCamera.prototype.onMouseMoveHandler = function (e) {
if (this.Pause || this.isTweening) {
return;
}
if (e.touches) {
var touches = e.touches;
if (touches && touches.length == 2) {
var distance = this.getDistance(e.touches);
var factor = 0.01;
this.Distance -= (distance - this.lastDistance) * factor;
this.Distance = MathHelper_1.MathHelper.clamp(this.Distance, this.DistanceMin, this.DistanceMax);
this.lastDistance = distance;
this.targetOffsetMoveY = -(this.Distance - 8) / this.DistanceMin * this.Radius;
this.targetOffsetMoveY = MathHelper_1.MathHelper.clamp(this.targetOffsetMoveY, 0, this.Radius);
}
else {
if (this.canPan == false) {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
}
}
else {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
this.PanX = -this.mouseX * 0.005 * this.PanSpeed + this.modle.localPositionX;
this.PanY = this.mouseY * 0.005 * this.PanSpeed + this.modle.localPositionY;
}
}
}
}
else {
if (this.canPan == false) {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
}
}
else {
if (this.isDown) {
this.mouseX = e.stageX - this.downX;
this.mouseY = e.stageY - this.downY;
if (this.downX !== MouseManager.instance.mouseX || this.downY !== MouseManager.instance.mouseY) {
this.isMoved = true;
}
this.downX = e.stageX;
this.downY = e.stageY;
this.PanX = -this.mouseX * 0.005 * this.PanSpeed + this.modle.localPositionX;
this.PanY = this.mouseY * 0.005 * this.PanSpeed + this.modle.localPositionY;
}
}
}
};
/**计算两个触摸点之间的距离*/
OrbitCamera.prototype.getDistance = function (points) {
var distance = 0;
if (points && points.length == 2) {
var dx = points[0].stageX - points[1].stageX;
var dy = points[0].stageY - points[1].stageY;
distance = Math.sqrt(dx * dx + dy * dy);
}
return distance;
};
return OrbitCamera;
}(Laya.Script3D));
exports.OrbitCamera = OrbitCamera;
},{"./MathHelper":3}],5:[function(require,module,exports){
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var PathMove = /** @class */ (function (_super) {
__extends(PathMove, _super);
function PathMove() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.currentPointIndex = 0;
_this.forward = new Laya.Vector3(0, 0, 0);
_this.moveSpeed = 0.015;
_this.stop = true;
_this.loop = false;
return _this;
}
PathMove.prototype.onAwake = function () {
this.model = this.owner;
this.forward.z = -this.moveSpeed;
};
PathMove.prototype.SetMovePath = function (wayPoint, loop) {
this.loop = loop;
this.wayPoint = wayPoint;
this.model.transform.localPositionX = this.wayPoint[this.currentPointIndex].x;
this.model.transform.localPositionZ = this.wayPoint[this.currentPointIndex].z;
this.stop = false;
};
PathMove.prototype.onUpdate = function () {
if (this.stop) {
return;
}
this.moveForward();
this.model.transform.translate(this.forward, true);
if (this.currentPointIndex + 1 < this.wayPoint.length) {
this.model.transform.lookAt(this.wayPoint[this.currentPointIndex + 1], Laya.Vector3._Up, true);
}
};
PathMove.prototype.moveForward = function () {
this.nextPoint();
};
PathMove.prototype.nextPoint = function () {
if (this.currentPointIndex + 1 < this.wayPoint.length) {
if (Laya.Vector3.distance(this.wayPoint[this.currentPointIndex + 1], this.model.transform.position) < 0.1) {
console.log("到达某点");
this.currentPointIndex = this.currentPointIndex + 1;
}
}
else {
if (this.loop == false) {
this.stop = true;
console.log("走完");
if (this.moveComplete) {
this.moveComplete.run();
}
}
else {
this.currentPointIndex = 0;
}
}
};
return PathMove;
}(Laya.Script3D));
exports.default = PathMove;
},{}]},{},[2])
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkQ6L1Byb2dyYW0gRmlsZXMgKHg4NikvTGF5YUFpcklERV9iZXRhMi4xLjBiZXRhMS9yZXNvdXJjZXMvYXBwL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJzcmMvR2FtZUNvbmZpZy50cyIsInNyYy9NYWluLnRzIiwic3JjL01hdGhIZWxwZXIudHMiLCJzcmMvT3JiaXRDYW1lcmEudHMiLCJzcmMvUGF0aE1vdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQSxnR0FBZ0c7O0FBRWhHOztFQUVFO0FBQ0Y7SUFhSTtJQUFjLENBQUM7SUFDUixlQUFJLEdBQVg7UUFDSSxJQUFJLEdBQUcsR0FBYSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztJQUVqRCxDQUFDO0lBaEJNLGdCQUFLLEdBQVEsSUFBSSxDQUFDO0lBQ2xCLGlCQUFNLEdBQVEsR0FBRyxDQUFDO0lBQ2xCLG9CQUFTLEdBQVEsV0FBVyxDQUFDO0lBQzdCLHFCQUFVLEdBQVEsTUFBTSxDQUFDO0lBQ3pCLGlCQUFNLEdBQVEsS0FBSyxDQUFDO0lBQ3BCLGlCQUFNLEdBQVEsTUFBTSxDQUFDO0lBQ3JCLHFCQUFVLEdBQUssRUFBRSxDQUFDO0lBQ2xCLG9CQUFTLEdBQVEsRUFBRSxDQUFDO0lBQ3BCLGdCQUFLLEdBQVMsS0FBSyxDQUFDO0lBQ3BCLGVBQUksR0FBUyxLQUFLLENBQUM7SUFDbkIsdUJBQVksR0FBUyxLQUFLLENBQUM7SUFDM0IsNEJBQWlCLEdBQVMsSUFBSSxDQUFDO0lBTTFDLGlCQUFDO0NBbEJELEFBa0JDLElBQUE7a0JBbEJvQixVQUFVO0FBbUIvQixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7Ozs7QUN4QmxCLDJDQUFzQztBQUN0Qyw2Q0FBNEM7QUFFNUMsdUNBQWtDO0FBQ2xDO0lBQ0M7UUFxQlEsYUFBUSxHQUFXLG9DQUFvQyxDQUFD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QUUsQ0FBQztJQUNyQixDQUFDO0lBRU8sNEJBQVMsR0FBakI7UUFDSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDbkQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLEVBQUU7Z0JBQ3ZHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0o7YUFBTTtZQUVILElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7b0JBQ25CLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQzNCO2FBQ0o7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQzthQUM5QjtTQUdKO0lBRUwsQ0FBQztJQUVMLGVBQUM7QUFBRCxDQTlEQSxBQThEQyxDQTlEcUMsSUFBSSxDQUFDLFFBQVEsR0E4RGxEIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xyXG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG4gICAgfTtcclxufSkoKTtcclxuKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlRoaXMgY2xhc3MgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgTGF5YUFpcklERSwgcGxlYXNlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zLiAqL1xyXG5cclxuLypcclxuKiDmuLjmiI/liJ3lp4vljJbphY3nva47XHJcbiovXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhbWVDb25maWd7XHJcbiAgICBzdGF0aWMgd2lkdGg6bnVtYmVyPTEzMzQ7XHJcbiAgICBzdGF0aWMgaGVpZ2h0Om51bWJlcj03NTA7XHJcbiAgICBzdGF0aWMgc2NhbGVNb2RlOnN0cmluZz1cImZpeGVkYXV0b1wiO1xyXG4gICAgc3RhdGljIHNjcmVlbk1vZGU6c3RyaW5nPVwibm9uZVwiO1xyXG4gICAgc3RhdGljIGFsaWduVjpzdHJpbmc9XCJ0b3BcIjtcclxuICAgIHN0YXRpYyBhbGlnbkg6c3RyaW5nPVwibGVmdFwiO1xyXG4gICAgc3RhdGljIHN0YXJ0U2NlbmU6YW55PVwiXCI7XHJcbiAgICBzdGF0aWMgc2NlbmVSb290OnN0cmluZz1cIlwiO1xyXG4gICAgc3RhdGljIGRlYnVnOmJvb2xlYW49ZmFsc2U7XHJcbiAgICBzdGF0aWMgc3RhdDpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHBoeXNpY3NEZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIGV4cG9ydFNjZW5lVG9Kc29uOmJvb2xlYW49dHJ1ZTtcclxuICAgIGNvbnN0cnVjdG9yKCl7fVxyXG4gICAgc3RhdGljIGluaXQoKXtcclxuICAgICAgICB2YXIgcmVnOiBGdW5jdGlvbiA9IExheWEuQ2xhc3NVdGlscy5yZWdDbGFzcztcclxuXHJcbiAgICB9XHJcbn1cclxuR2FtZUNvbmZpZy5pbml0KCk7IiwiaW1wb3J0IEdhbWVDb25maWcgZnJvbSBcIi4vR2FtZUNvbmZpZ1wiO1xyXG5pbXBvcnQgeyBPcmJpdENhbWVyYSB9IGZyb20gXCIuL09yYml0Q2FtZXJhXCI7XHJcbmltcG9ydCB7IE1hdGhIZWxwZXIgfSBmcm9tIFwiLi9NYXRoSGVscGVyXCI7XHJcbmltcG9ydCBQYXRoTW92ZSBmcm9tIFwiLi9QYXRoTW92ZVwiO1xyXG5jbGFzcyBNYWluIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdC8v5qC55o2uSURF6K6+572u5Yid5aeL5YyW5byV5pOOXHRcdFxyXG5cdFx0aWYgKHdpbmRvd1tcIkxheWEzRFwiXSkgTGF5YTNELmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQpO1xyXG5cdFx0ZWxzZSBMYXlhLmluaXQoR2FtZUNvbmZpZy53aWR0aCwgR2FtZUNvbmZpZy5oZWlnaHQsIExheWFbXCJXZWJHTFwiXSk7XHJcblx0XHRMYXlhW1wiUGh5c2ljc1wiXSAmJiBMYXlhW1wiUGh5c2ljc1wiXS5lbmFibGUoKTtcclxuXHRcdExheWFbXCJEZWJ1Z1BhbmVsXCJdICYmIExheWFbXCJEZWJ1Z1BhbmVsXCJdLmVuYWJsZSgpO1xyXG5cdFx0TGF5YS5zdGFnZS5zY2FsZU1vZGUgPSBHYW1lQ29uZmlnLnNjYWxlTW9kZTtcclxuXHRcdExheWEuc3RhZ2Uuc2NyZWVuTW9kZSA9IEdhbWVDb25maWcuc2NyZWVuTW9kZTtcclxuXHRcdC8v5YW85a655b6u5L+h5LiN5pSv5oyB5Yqg6L29c2NlbmXlkI7nvIDlnLrmma9cclxuXHRcdExheWEuVVJMLmV4cG9ydFNjZW5lVG9Kc29uID0gR2FtZUNvbmZpZy5leHBvcnRTY2VuZVRvSnNvbjtcclxuXHJcblx0XHQvL+aJk+W8gOiwg+ivlemdouadv++8iOmAmui/h0lEReiuvue9ruiwg+ivleaooeW8j++8jOaIluiAhXVybOWcsOWdgOWinuWKoGRlYnVnPXRydWXlj4LmlbDvvIzlnYflj6/miZPlvIDosIPor5XpnaLmnb/vvIlcclxuXHRcdGlmIChHYW1lQ29uZmlnLmRlYnVnIHx8IExheWEuVXRpbHMuZ2V0UXVlcnlTdHJpbmcoXCJkZWJ1Z1wiKSA9PSBcInRydWVcIikgTGF5YS5lbmFibGVEZWJ1Z1BhbmVsKCk7XHJcblx0XHRpZiAoR2FtZUNvbmZpZy5waHlzaWNzRGVidWcgJiYgTGF5YVtcIlBoeXNpY3NEZWJ1Z0RyYXdcIl0pIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdLmVuYWJsZSgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcuc3RhdCkgTGF5YS5TdGF0LnNob3coKTtcclxuXHRcdExheWEuYWxlcnRHbG9iYWxFcnJvciA9IHRydWU7XHJcblxyXG5cdFx0Ly/mv4DmtLvotYTmupDniYjmnKzmjqfliLbvvIx2ZXJzaW9uLmpzb27nlLFJREXlj5HluIPlip/og73oh6rliqjnlJ/miJDvvIzlpoLmnpzmsqHmnInkuZ/kuI3lvbHlk43lkI7nu63mtYHnqItcclxuXHRcdExheWEuUmVzb3VyY2VWZXJzaW9uLmVuYWJsZShcInZlcnNpb24uanNvblwiLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25WZXJzaW9uTG9hZGVkKSwgTGF5YS5SZXNvdXJjZVZlcnNpb24uRklMRU5BTUVfVkVSU0lPTik7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHNjZW5lUmVzOiBzdHJpbmcgPSBcInJlcy8zZC9zY2VuZS9Db252ZW50aW9uYWwvc2NlbmUubHNcIjtcclxuXHRwcml2YXRlIHNjZW5lOiBMYXlhLlNjZW5lM0Q7XHJcblx0cHJpdmF0ZSBjYW1lcmE6IExheWEuQ2FtZXJhO1xyXG5cdG9uVmVyc2lvbkxvYWRlZCgpOiB2b2lkIHtcclxuXHRcdExheWEuU2NlbmUzRC5sb2FkKHRoaXMuc2NlbmVSZXMsIExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgdGhpcy5vbkxvYWRTY2VuZUNvbXBsZXRlKSlcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgb25Mb2FkU2NlbmVDb21wbGV0ZShzY2VuZSkge1xyXG5cdFx0dGhpcy5zY2VuZSA9IHNjZW5lO1xyXG5cdFx0TGF5YS5zdGFnZS5hZGRDaGlsZCh0aGlzLnNjZW5lKTtcclxuXHRcdGxldCBjYW1lcmFUYXJnZXQgPSBuZXcgTGF5YS5TcHJpdGUzRCgpO1xyXG5cdFx0Y2FtZXJhVGFyZ2V0LnRyYW5zZm9ybS5wb3NpdGlvbiA9IG5ldyBMYXlhLlZlY3RvcjMoNSwgMCwgMCk7XHJcblx0XHR0aGlzLnNjZW5lLmFkZENoaWxkKGNhbWVyYVRhcmdldCk7XHJcblx0XHR0aGlzLmNhbWVyYSA9IHRoaXMuc2NlbmUuZ2V0Q2hpbGRCeU5hbWUoXCJDYW1lcmFQaXZvdFwiKS5nZXRDaGlsZEF0KDApIGFzIExheWEuQ2FtZXJhO1xyXG5cdFx0bGV0IG9yYml0ID0gdGhpcy5jYW1lcmEuYWRkQ29tcG9uZW50KE9yYml0Q2FtZXJhKSBhcyBPcmJpdENhbWVyYTtcclxuXHRcdG9yYml0LlRhcmdldCA9IGNhbWVyYVRhcmdldDtcclxuXHRcdG9yYml0LmNhblBhbiA9IHRydWU7XHJcblx0XHRvcmJpdC5SYWRpdXMgPSAzNTtcclxuXHRcdG9yYml0LnNldFJvdGF0aW9uKC0xNTAsIC0yMTApO1xyXG5cclxuXHRcdGxldCBwbGF5ZXIgPSB0aGlzLnNjZW5lLmdldENoaWxkQnlOYW1lKFwiUGxheWVyXCIpIGFzIExheWEuU3ByaXRlM0Q7XHJcblx0XHRsZXQgcGxheWVyQW5pbSA9IHBsYXllci5nZXRDaGlsZEF0KDApLmdldENvbXBvbmVudChMYXlhLkFuaW1hdG9yKSBhcyBMYXlhLkFuaW1hdG9yO1xyXG5cdFx0bGV0IHBhdGhNb3ZlID0gcGxheWVyLmFkZENvbXBvbmVudChQYXRoTW92ZSkgYXMgUGF0aE1vdmU7XHJcblx0XHRwYXRoTW92ZS5tb3ZlQ29tcGxldGUgPSBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsICgpID0+IHtcclxuXHRcdFx0cGxheWVyQW5pbS5jcm9zc0ZhZGUoXCJJZGxlXCIsIDAuMSwgMCwgMCk7XHJcblx0XHR9KTtcclxuXHRcdGxldCB3YXlQb2ludHMgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zY2VuZS5nZXRDaGlsZEJ5TmFtZShcIlBsYXllcldheVBvaW50XCIpLl9jaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRjb25zdCBwb2ludCA9IHRoaXMuc2NlbmUuZ2V0Q2hpbGRCeU5hbWUoXCJQbGF5ZXJXYXlQb2ludFwiKS5fY2hpbGRyZW5baV0gYXMgTGF5YS5TcHJpdGUzRDtcclxuXHRcdFx0d2F5UG9pbnRzLnB1c2gocG9pbnQudHJhbnNmb3JtLnBvc2l0aW9uKTtcclxuXHRcdH1cclxuXHRcdExheWEudGltZXIub25jZSgzMDAwLCB0aGlzLCAoKSA9PiB7XHJcblx0XHRcdHBsYXllckFuaW0uY3Jvc3NGYWRlKFwiV2Fsa1wiLCAwLjEsIDAsIDApO1xyXG5cdFx0XHRwYXRoTW92ZS5TZXRNb3ZlUGF0aCh3YXlQb2ludHMsdHJ1ZSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG59XHJcbi8v5r+A5rS75ZCv5Yqo57G7XHJcbm5ldyBNYWluKCk7XHJcbiIsImV4cG9ydCBjbGFzcyBNYXRoSGVscGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG5cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogRGVnMlJhZCA9IDAuMDE3NDUzMjlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBEZWcyUmFkOiBudW1iZXIgPSAwLjAxNzQ1MzI5O1xyXG4gICAgLyoqXHJcbiAgICAgKiBSYWQyRGVnID0gNTcuMjk1NzhcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBSYWQyRGVnOiBudW1iZXIgPSA1Ny4yOTU3ODtcclxuICAgIC8qKlxyXG4gICAgICog6I635Y+W5Lik5ZCR6YeP6KeS5bqmXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgVmVjdG9yM0FuZ2xlKHYxOiBMYXlhLlZlY3RvcjMsIHYyOiBMYXlhLlZlY3RvcjMpOiBudW1iZXIge1xyXG4gICAgICAgIExheWEuVmVjdG9yMy5ub3JtYWxpemUodjIsIHYyKTtcclxuICAgICAgICB2YXIgZG90ID0gTGF5YS5WZWN0b3IzLmRvdCh2MSwgdjIpO1xyXG4gICAgICAgIHZhciBhbmdsZSA9IE1hdGguYWNvcyhkb3QpICogNTcuMjk1Nzg7XHJcbiAgICAgICAgcmV0dXJuIGFuZ2xlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog55CD6KGo6Z2i6ZqP5py6XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgb25Vbml0U3BoZXJlKHJhZGl1czogbnVtYmVyKTogTGF5YS5WZWN0b3IzIHtcclxuICAgICAgICB2YXIgcDE6IG51bWJlciA9IHRoaXMucmFuZG9tRmxvYXQoLXJhZGl1cywgcmFkaXVzKTtcclxuICAgICAgICB2YXIgcDI6IG51bWJlciA9IHRoaXMucmFuZG9tRmxvYXQoMCwgcmFkaXVzKTtcclxuICAgICAgICB2YXIgcDM6IG51bWJlciA9IHRoaXMucmFuZG9tRmxvYXQoLXJhZGl1cywgcmFkaXVzKTtcclxuICAgICAgICB2YXIgdjM6IExheWEuVmVjdG9yMyA9IG5ldyBMYXlhLlZlY3RvcjMocDEsIHAyLCBwMyk7XHJcbiAgICAgICAgLy9MYXlhLlZlY3RvcjMubm9ybWFsaXplKHYzLHYzKTtcclxuICAgICAgICBMYXlhLlZlY3RvcjMuc2NhbGUodjMsIHJhZGl1cywgdjMpO1xyXG4gICAgICAgIHJldHVybiB2MztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbUZsb2F0KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xyXG4gICAgICAgIHJldHVybiBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikgKyBtaW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDpmo/mnLrojIPlm7Tojrflj5bmlbTmlbDmlbDlgLwgbWluPD0gdmFsdWUgPD1tYXggXHJcbiAgICAgKiAqL1xyXG4gICAgcHVibGljIHN0YXRpYyByYW5kb20obWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4gKyAxKSkgKyBtaW47XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDbGFtcEFuZ2xlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY2xhbXBBbmdsZShhbmdsZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmIChhbmdsZSA8IG1pbikge1xyXG4gICAgICAgICAgICBhbmdsZSA9IG1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYW5nbGUgPiBtYXgpIHtcclxuICAgICAgICAgICAgYW5nbGUgPSBtYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhbmdsZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsYW1wXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgY2xhbXAodmFsdWU6IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodmFsdWUgPCBtaW4pIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBtaW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID4gbWF4KSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gbWF4O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBuZXdHdWlkKCkge1xyXG4gICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgIHZhciByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgbnVtYmVyMkJpZ051bWJlcihuOiBudW1iZXIsIG1heExlbjogbnVtYmVyID0gNCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IG91dE51bTogc3RyaW5nO1xyXG4gICAgICAgIGxldCBrID0gMTAwMDtcclxuICAgICAgICBsZXQgYmFzZTogbnVtYmVyID0gaztcclxuICAgICAgICBsZXQgcG93ID0gMDtcclxuXHJcbiAgICAgICAgZm9yIChwb3cgPSAwOyA7IHBvdysrKSB7XHJcbiAgICAgICAgICAgIGlmIChuIDwgYmFzZSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmFzZSAqPSBrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdW5pdCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHBvdyA8IDUpIHtcclxuICAgICAgICAgICAgdW5pdCA9IHBvdyA9PSAwID8gXCJcIiA6IChwb3cgPT0gMSA/IFwia1wiIDogKHBvdyA9PSAyID8gXCJtXCIgOiAocG93ID09IDMgPyBcImJcIiA6IFwidFwiKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGxfYSA9IDk3O1xyXG4gICAgICAgICAgICBsZXQgbF9BID0gNjU7XHJcbiAgICAgICAgICAgIGxldCBkaXYgPSBNYXRoLmZsb29yKChwb3cgLSA1KSAvIDI2KTtcclxuICAgICAgICAgICAgbGV0IG1vZCA9IChwb3cgLSA1KSAlIDI2O1xyXG4gICAgICAgICAgICB1bml0ID0gZGl2ID09IDAgPyBTdHJpbmcuZnJvbUNoYXJDb2RlKGxfYSArIG1vZCwgbF9hICsgbW9kKSA6IChkaXYgPT0gMSA/IFN0cmluZy5mcm9tQ2hhckNvZGUobF9BICsgbW9kLCBsX2EgKyBtb2QpIDogU3RyaW5nLmZyb21DaGFyQ29kZShsX0EgKyBtb2QsIGxfQSArIG1vZCkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvdXROdW0gPSBTdHJpbmcobiAvIChiYXNlICogMC4wMDEpKTtcclxuICAgICAgICByZXR1cm4gXCIuXCIgPT0gKG91dE51bSA9IG91dE51bS5zdWJzdHIoMCwgbWF4TGVuKSkuY2hhckF0KG91dE51bS5sZW5ndGggLSAxKSA/IG91dE51bS5yZXBsYWNlKFwiLlwiLCB1bml0KSA6IG91dE51bSArIHVuaXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRTeXN0ZW1UaW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIGN1ckRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHZhciB5ZWFyOiBudW1iZXIgPSBjdXJEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgdmFyIG1vbnRoOiBudW1iZXIgPSBjdXJEYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICAgIHZhciBkYXRlOiBudW1iZXIgPSBjdXJEYXRlLmdldERhdGUoKTtcclxuICAgICAgICB2YXIgZGF5OiBudW1iZXIgPSBjdXJEYXRlLmdldERheSgpO1xyXG4gICAgICAgIHZhciBob3VyOiBudW1iZXIgPSBjdXJEYXRlLmdldEhvdXJzKCk7XHJcbiAgICAgICAgdmFyIG1pbnV0ZTogbnVtYmVyID0gY3VyRGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgICAgdmFyIHNlY29uZDogbnVtYmVyID0gY3VyRGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgICAgdmFyIHN5c3RlbVRpbWUgPSB5ZWFyICsgXCLlubRcIiArIG1vbnRoICsgXCLmnIhcIiArIGRhdGUgKyBcIuaXpVwiICsgaG91ciArIFwi5pe2XCIgKyBtaW51dGUgKyBcIuWIhlwiICsgc2Vjb25kICsgXCLnp5JcIjtcclxuICAgICAgICByZXR1cm4gc3lzdGVtVGltZTtcclxuICAgIH1cclxuXHJcbiAgICAvKuWvueavlOeJiOacrCovXHJcbiAgICBwdWJsaWMgc3RhdGljIENvbXBhcmVWZXJzaW9uKHYxOiBzdHJpbmcsIHYyOiBzdHJpbmcpOiBudW1iZXIge1xyXG4gICAgICAgIHZhciBhcnIxID0gdjEuc3BsaXQoJy4nKTtcclxuICAgICAgICB2YXIgYXJyMiA9IHYyLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWF4KGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XHJcbiAgICAgICAgd2hpbGUgKGFycjEubGVuZ3RoIDwgbGVuKSB7XHJcbiAgICAgICAgICAgIGFycjEucHVzaCgnMCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aGlsZSAoYXJyMi5sZW5ndGggPCBsZW4pIHtcclxuICAgICAgICAgICAgYXJyMi5wdXNoKCcwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIG51bTEgPSBwYXJzZUludChhcnIxW2ldKTtcclxuICAgICAgICAgICAgdmFyIG51bTIgPSBwYXJzZUludChhcnIyW2ldKTtcclxuICAgICAgICAgICAgaWYgKG51bTEgPiBudW0yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChudW0xIDwgbnVtMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIENvdW50RG93bih0aW1lOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGxldCBtaW51dGUgPSBNYXRoLmZsb29yKHRpbWUgLyA2MCk7XHJcbiAgICAgICAgbGV0IHNlY29uZCA9IHRpbWUgJSA2MDtcclxuXHJcbiAgICAgICAgcmV0dXJuIChtaW51dGUgPCAxMCA/IFwiMFwiICsgbWludXRlIDogbWludXRlKSArIFwiOlwiICsgKHNlY29uZCA8IDEwID8gXCIwXCIgKyBzZWNvbmQgOiBzZWNvbmQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgY291bnREYXkoZDE6IHN0cmluZywgZDI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IHMxID0gbmV3IERhdGUoZDEpO1xyXG4gICAgICAgIGxldCBzMiA9IG5ldyBEYXRlKGQyKTtcclxuICAgICAgICB2YXIgZGF5cyA9IHMxLmdldFRpbWUoKSAtIHMyLmdldFRpbWUoKTtcclxuICAgICAgICB2YXIgdGltZSA9IGRheXMgLyAoMTAwMCAqIDYwICogNjAgKiAyNCk7XHJcbiAgICAgICAgcmV0dXJuIHRpbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBnZXRUaW1lKCk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IGN1ckRhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGxldCB5ZWFyOiBudW1iZXIgPSBjdXJEYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgbGV0IG1vbnRoOiBudW1iZXIgPSBjdXJEYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICAgIGxldCBkYXRlOiBudW1iZXIgPSBjdXJEYXRlLmdldERhdGUoKTtcclxuICAgICAgICBpZiAobW9udGggPCAxMCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHN5c3RlbVRpbWUgPSB5ZWFyICsgXCIvXCIgKyAobW9udGggPCAxMCA/IFwiMFwiICsgbW9udGggOiBtb250aCkgKyBcIi9cIiArIChkYXRlIDwgMTAgPyBcIjBcIiArIGRhdGUgOiBkYXRlKTtcclxuICAgICAgICByZXR1cm4gc3lzdGVtVGltZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIHByZWZpeEludGVnZXIobnVtLCBsZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4gKEFycmF5KGxlbmd0aCkuam9pbignMCcpICsgbnVtKS5zbGljZSgtbGVuZ3RoKTtcclxuICAgIH1cclxufSIsIi8qXHJcbiogT3JiaXRDYW1lcmEgMzYw6KeC5a+f54mp5L2T55u45py6XHJcbiogdW5pdHnpnIDopoHlj5blt6flpITnkIZcclxuKi9cclxuXHJcbmltcG9ydCBNb3VzZU1hbmFnZXIgPSBsYXlhLmV2ZW50cy5Nb3VzZU1hbmFnZXI7XHJcbmltcG9ydCBRdWF0ZXJuaW9uID0gbGF5YS5kMy5tYXRoLlF1YXRlcm5pb247XHJcbmltcG9ydCBFdmVudCA9IExheWEuRXZlbnQ7XHJcbmltcG9ydCB7IE1hdGhIZWxwZXIgfSBmcm9tIFwiLi9NYXRoSGVscGVyXCI7XHJcbmV4cG9ydCBjbGFzcyBPcmJpdENhbWVyYSBleHRlbmRzIExheWEuU2NyaXB0M0Qge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhY3RvcjogbnVtYmVyID0gMC4xO1xyXG4gICAgcHVibGljIGNhblBhbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIFRhcmdldDogTGF5YS5TcHJpdGUzRDtcclxuICAgIHB1YmxpYyBSb3RhdGVTcGVlZDogbnVtYmVyID0gMC41O1xyXG4gICAgcHVibGljIFBhblNwZWVkOm51bWJlciA9IDM7XHJcbiAgICBwdWJsaWMgU21vb3RoVGltZTogbnVtYmVyID0gMTtcclxuICAgIHB1YmxpYyBZTWluTGltaXQ6IG51bWJlciA9IC0xODA7XHJcbiAgICBwdWJsaWMgWU1heExpbWl0OiBudW1iZXIgPSAxODA7XHJcbiAgICBwdWJsaWMgRGlzdGFuY2U6IG51bWJlciA9IDM1O1xyXG4gICAgcHVibGljIERpc3RhbmNlTWluOiBudW1iZXIgPSAxNTtcclxuICAgIHB1YmxpYyBEaXN0YW5jZU1heDogbnVtYmVyID0gMzU7XHJcbiAgICBwdWJsaWMgUGF1c2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc1R3ZWVuaW5nID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgUmFkaXVzOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHByaXZhdGUgbW9kbGU6IExheWEuVHJhbnNmb3JtM0Q7XHJcbiAgICBwcml2YXRlIG1vZGxlUGFyZW50OiBMYXlhLlRyYW5zZm9ybTNEO1xyXG5cclxuICAgIHByaXZhdGUgQW5nbGVIOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBBbmdsZVY6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBQYW5YOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBQYW5ZOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIHByaXZhdGUgZG93blg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGRvd25ZOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBpc0Rvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgbW91c2VYOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBtb3VzZVk6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGlzTW92ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgdG1wT3V0Um90YXRpb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigwLCAwLCAwLCAwKTtcclxuICAgIHByaXZhdGUgbGFzdERpc3RhbmNlOiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSB0YXJnZXRPZmZzZXRNb3ZlWTogbnVtYmVyID0gMDtcclxuXHJcbiAgICBvbkF3YWtlKCkge1xyXG4gICAgICAgIHRoaXMubW9kbGUgPSAodGhpcy5vd25lciBhcyBMYXlhLlNwcml0ZTNEKS50cmFuc2Zvcm07XHJcbiAgICAgICAgdGhpcy5tb2RsZVBhcmVudCA9IHRoaXMubW9kbGUuX3BhcmVudDtcclxuICAgICAgICB2YXIgYW5nbGVzID0gdGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uRXVsZXI7XHJcbiAgICAgICAgdGhpcy5BbmdsZUggPSBhbmdsZXMueTtcclxuICAgICAgICB0aGlzLkFuZ2xlViA9IGFuZ2xlcy54O1xyXG4gICAgICAgIHRoaXMuaW5pdEV2ZW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBMYXlhLnN0YWdlLm9mZihMYXlhLkV2ZW50Lk1PVVNFX0RPV04sIHRoaXMsIHRoaXMub25Nb3VzZURvd25IYW5kbGVyKTtcclxuICAgICAgICBMYXlhLnN0YWdlLm9mZihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLm9uTW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub2ZmKExheWEuRXZlbnQuTU9VU0VfV0hFRUwsIHRoaXMsIHRoaXMub25Nb3VzZXJXaGVlbEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRSb3RhdGlvbigpOiBMYXlhLlF1YXRlcm5pb24ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFJvdGF0aW9uKGg6IG51bWJlciwgdjogbnVtYmVyLCB1c2VUd2VlbjogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgbGV0IHQgPSBuZXcgTGF5YS5RdWF0ZXJuaW9uKHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbi54LCB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24ueSwgdGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uLnosIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbi53KTtcclxuICAgICAgICB0aGlzLkFuZ2xlSCA9IGg7XHJcbiAgICAgICAgdGhpcy5BbmdsZVYgPSB2O1xyXG4gICAgICAgIFF1YXRlcm5pb24uY3JlYXRlRnJvbVlhd1BpdGNoUm9sbCh0aGlzLkFuZ2xlSCAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgdGhpcy5BbmdsZVYgKiAwLjAwNSAqIHRoaXMuUm90YXRlU3BlZWQsIDAsIHRoaXMudG1wT3V0Um90YXRpb24pO1xyXG4gICAgICAgIGlmICh1c2VUd2Vlbikge1xyXG4gICAgICAgICAgICB0aGlzLmlzVHdlZW5pbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBmYWlyeWd1aS50d2Vlbi5HVHdlZW4udG80KHQueCwgdC55LCB0LnosIHQudywgdGhpcy50bXBPdXRSb3RhdGlvbi54LCB0aGlzLnRtcE91dFJvdGF0aW9uLnksIHRoaXMudG1wT3V0Um90YXRpb24ueiwgdGhpcy50bXBPdXRSb3RhdGlvbi53LCAxKVxyXG4gICAgICAgICAgICAgICAgLm9uVXBkYXRlKHRoaXMub25Ud2VlblJvdGF0aW9uVXBkYXRlLCB0aGlzKVxyXG4gICAgICAgICAgICAgICAgLm9uQ29tcGxldGUodGhpcy5vblR3ZWVuUm90YXRpb25Db21wZWx0ZSwgdGhpcylcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHByaXZhdGUgdHdlZW5Sb3RhdGlvbiA9IG5ldyBMYXlhLlF1YXRlcm5pb24oMCwgMCwgMCwgMCk7XHJcbiAgICBwcml2YXRlIG9uVHdlZW5Sb3RhdGlvblVwZGF0ZSh0d2VlbjogZmFpcnlndWkudHdlZW4uR1R3ZWVuZXIpIHtcclxuICAgICAgICB0aGlzLnRtcE91dFJvdGF0aW9uID0gbmV3IExheWEuUXVhdGVybmlvbih0d2Vlbi52YWx1ZS54LCB0d2Vlbi52YWx1ZS55LCB0d2Vlbi52YWx1ZS56LCB0d2Vlbi52YWx1ZS53KTtcclxuICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25Ud2VlblJvdGF0aW9uQ29tcGVsdGUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1R3ZWVuaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5QYXVzZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwOiBMYXlhLlZlY3RvcjMgPSBuZXcgTGF5YS5WZWN0b3IzKCk7XHJcbiAgICBvblVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGV0IGFuID0gMy4xNCAvIDI7XHJcbiAgICAgICAgLy8gbGV0IG1vdmVIID0gdGhpcy5tb3VzZVggKiBNYXRoLmNvcyhhbikgKyB0aGlzLm1vdXNlWSAqIE1hdGguc2luKGFuKTtcclxuICAgICAgICAvLyBsZXQgbW92ZVYgPSB0aGlzLm1vdXNlWCAqIE1hdGguc2luKGFuKSArIHRoaXMubW91c2VZICogTWF0aC5jb3MoYW4pXHJcbiAgICAgICAgLy8gdGhpcy5BbmdsZUggKz0gbW92ZUg7XHJcbiAgICAgICAgLy8gdGhpcy5BbmdsZVYgKz0gbW92ZVY7XHJcblxyXG4gICAgICAgIHRoaXMubW9kbGVQYXJlbnQuZ2V0VXAodGhpcy51cCk7XHJcbiAgICAgICAgaWYgKHRoaXMudXAueSA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5BbmdsZUggLT0gdGhpcy5tb3VzZVg7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5BbmdsZUggKz0gdGhpcy5tb3VzZVg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlmICh0aGlzLm1vZGxlUGFyZW50LnJpZ2h0LnggPiAwKSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuQW5nbGVWIC09IHRoaXMubW91c2VZIDtcclxuICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgIC8vICAgICB0aGlzLkFuZ2xlViArPSB0aGlzLm1vdXNlWSA7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHRoaXMuQW5nbGVWIC09IHRoaXMubW91c2VZO1xyXG4gICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG9uTGF0ZVVwZGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgaWYgKHRoaXMuVGFyZ2V0ICE9IG51bGwpIHtcclxuICAgICAgICAgICAgLy90aGlzLlRhcmdldC50cmFuc2Zvcm0ubG9jYWxQb3NpdGlvbiA9IG5ldyBMYXlhLlZlY3RvcjMoMCwgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSwgMCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhblBhbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmVSb3RhdGUoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FtZXJhUGFuKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FtZXJhWm9vbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdXNlWCA9IDA7XHJcbiAgICAgICAgdGhpcy5tb3VzZVkgPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FtZXJhUGFuKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25YID0gdGhpcy5QYW5YO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25ZID0gdGhpcy5QYW5ZO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbWVyZVJvdGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgLy90aGlzLkFuZ2xlViA9IE1hdGhIZWxwZXIuQ2xhbXAodGhpcy5BbmdsZVYsIHRoaXMuWU1pbkxpbWl0LCB0aGlzLllNYXhMaW1pdCk7XHJcbiAgICAgICAgICAgIFF1YXRlcm5pb24uY3JlYXRlRnJvbVlhd1BpdGNoUm9sbCh0aGlzLkFuZ2xlSCAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgdGhpcy5BbmdsZVYgKiAwLjAwNSAqIHRoaXMuUm90YXRlU3BlZWQsIDAsIHRoaXMudG1wT3V0Um90YXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24gPSB0aGlzLnRtcE91dFJvdGF0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW1lcmFab29tKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb24ueiAhPSB0aGlzLkRpc3RhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvbiA9IG5ldyBMYXlhLlZlY3RvcjModGhpcy5QYW5YLCB0aGlzLnRhcmdldE9mZnNldE1vdmVZICsgdGhpcy5QYW5ZLCB0aGlzLkRpc3RhbmNlICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEV2ZW50cygpIHtcclxuICAgICAgICBMYXlhLnN0YWdlLm9uKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5vbk1vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9VUCwgdGhpcywgdGhpcy5vbk1vdXNlVXBIYW5kbGVyKTtcclxuICAgICAgICBMYXlhLnN0YWdlLm9uKExheWEuRXZlbnQuTU9VU0VfV0hFRUwsIHRoaXMsIHRoaXMub25Nb3VzZXJXaGVlbEhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBvbk1vdXNlcldoZWVsSGFuZGxlcihlOiBFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgZGlzdGFuY2U6IG51bWJlciA9IHRoaXMubGFzdERpc3RhbmNlICsgZS5kZWx0YTtcclxuICAgICAgICB0aGlzLkRpc3RhbmNlIC09IChkaXN0YW5jZSAtIHRoaXMubGFzdERpc3RhbmNlKSAqIHRoaXMuZmFjdG9yO1xyXG4gICAgICAgIHRoaXMuRGlzdGFuY2UgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMuRGlzdGFuY2UsIHRoaXMuRGlzdGFuY2VNaW4sIHRoaXMuRGlzdGFuY2VNYXgpO1xyXG4gICAgICAgIHRoaXMubGFzdERpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSA9IC0odGhpcy5EaXN0YW5jZSAtIDgpIC8gdGhpcy5EaXN0YW5jZU1pbiAqIHRoaXMuUmFkaXVzO1xyXG4gICAgICAgIHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVkgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVksIDAsIHRoaXMuUmFkaXVzKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlRG93bkhhbmRsZXIoZTogRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZS50b3VjaGVzKSB7XHJcbiAgICAgICAgICAgIHZhciB0b3VjaGVzOiBBcnJheTxhbnk+ID0gZS50b3VjaGVzO1xyXG4gICAgICAgICAgICBpZiAodG91Y2hlcyAmJiB0b3VjaGVzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3REaXN0YW5jZSA9IHRoaXMuZ2V0RGlzdGFuY2UodG91Y2hlcyk7XHJcbiAgICAgICAgICAgICAgICBMYXlhLnN0YWdlLm9uKEV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMub25Nb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBlLnN0YWdlWTtcclxuICAgICAgICAgICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRvd25YID0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWDtcclxuICAgICAgICAgICAgdGhpcy5kb3duWSA9IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVk7XHJcbiAgICAgICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzRG93biA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5pc01vdmVkID0gZmFsc2U7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VVcEhhbmRsZXIoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmlzTW92ZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1vdXNlWCA9IDA7XHJcbiAgICAgICAgdGhpcy5tb3VzZVkgPSAwO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub2ZmKExheWEuRXZlbnQuTU9VU0VfTU9WRSwgdGhpcywgdGhpcy5vbk1vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VNb3ZlSGFuZGxlcihlOiBFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlLnRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoZXM6IEFycmF5PGFueT4gPSBlLnRvdWNoZXM7XHJcbiAgICAgICAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHZhciBkaXN0YW5jZTogbnVtYmVyID0gdGhpcy5nZXREaXN0YW5jZShlLnRvdWNoZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFjdG9yOiBudW1iZXIgPSAwLjAxO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5EaXN0YW5jZSAtPSAoZGlzdGFuY2UgLSB0aGlzLmxhc3REaXN0YW5jZSkgKiBmYWN0b3I7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkRpc3RhbmNlID0gTWF0aEhlbHBlci5jbGFtcCh0aGlzLkRpc3RhbmNlLCB0aGlzLkRpc3RhbmNlTWluLCB0aGlzLkRpc3RhbmNlTWF4KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdERpc3RhbmNlID0gZGlzdGFuY2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE9mZnNldE1vdmVZID0gLSh0aGlzLkRpc3RhbmNlIC0gOCkgLyB0aGlzLkRpc3RhbmNlTWluICogdGhpcy5SYWRpdXM7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldE9mZnNldE1vdmVZID0gTWF0aEhlbHBlci5jbGFtcCh0aGlzLnRhcmdldE9mZnNldE1vdmVZLCAwLCB0aGlzLlJhZGl1cyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNhblBhbiA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VYID0gZS5zdGFnZVggLSB0aGlzLmRvd25YO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWSA9IGUuc3RhZ2VZIC0gdGhpcy5kb3duWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZG93blggIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVggfHwgdGhpcy5kb3duWSAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25YID0gZS5zdGFnZVg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBlLnN0YWdlWTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVggPSBlLnN0YWdlWCAtIHRoaXMuZG93blg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VZID0gZS5zdGFnZVkgLSB0aGlzLmRvd25ZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb3duWCAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCB8fCB0aGlzLmRvd25ZICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGUuc3RhZ2VZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBhblggPSAtdGhpcy5tb3VzZVggKiAwLjAwNSAqIHRoaXMuUGFuU3BlZWQgKyB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25YIDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5QYW5ZID0gdGhpcy5tb3VzZVkgKiAwLjAwNSAqIHRoaXMuUGFuU3BlZWQgKyB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25ZIDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZih0aGlzLmNhblBhbiA9PSBmYWxzZSl7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWCA9IGUuc3RhZ2VYIC0gdGhpcy5kb3duWDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWSA9IGUuc3RhZ2VZIC0gdGhpcy5kb3duWTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb3duWCAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCB8fCB0aGlzLmRvd25ZICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25ZID0gZS5zdGFnZVk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVggPSBlLnN0YWdlWCAtIHRoaXMuZG93blg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVkgPSBlLnN0YWdlWSAtIHRoaXMuZG93blk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZG93blggIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVggfHwgdGhpcy5kb3duWSAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25YID0gZS5zdGFnZVg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGUuc3RhZ2VZO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUGFuWCA9IC10aGlzLm1vdXNlWCAqIDAuMDA1ICogdGhpcy5QYW5TcGVlZCArIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvblggO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUGFuWSA9IHRoaXMubW91c2VZICogMC4wMDUgKiB0aGlzLlBhblNwZWVkICsgdGhpcy5tb2RsZS5sb2NhbFBvc2l0aW9uWSA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKirorqHnrpfkuKTkuKrop6bmkbjngrnkuYvpl7TnmoTot53nprsqL1xyXG4gICAgcHJpdmF0ZSBnZXREaXN0YW5jZShwb2ludHM6IEFycmF5PGFueT4pOiBudW1iZXIge1xyXG4gICAgICAgIHZhciBkaXN0YW5jZTogbnVtYmVyID0gMDtcclxuICAgICAgICBpZiAocG9pbnRzICYmIHBvaW50cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICB2YXIgZHg6IG51bWJlciA9IHBvaW50c1swXS5zdGFnZVggLSBwb2ludHNbMV0uc3RhZ2VYO1xyXG4gICAgICAgICAgICB2YXIgZHk6IG51bWJlciA9IHBvaW50c1swXS5zdGFnZVkgLSBwb2ludHNbMV0uc3RhZ2VZO1xyXG4gICAgICAgICAgICBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkaXN0YW5jZTtcclxuICAgIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhdGhNb3ZlIGV4dGVuZHMgTGF5YS5TY3JpcHQzRCB7XHJcbiAgICBwdWJsaWMgbW9kZWw6IExheWEuU3ByaXRlM0Q7XHJcbiAgICBwcml2YXRlIHdheVBvaW50OiBBcnJheTxMYXlhLlZlY3RvcjM+O1xyXG4gICAgcHJpdmF0ZSBjdXJyZW50UG9pbnRJbmRleDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgZm9yd2FyZDogTGF5YS5WZWN0b3IzID0gbmV3IExheWEuVmVjdG9yMygwLCAwLCAwKTtcclxuICAgIHB1YmxpYyBtb3ZlU3BlZWQ6IG51bWJlciA9IDAuMDE1O1xyXG4gICAgcHVibGljIHN0b3A6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgcHVibGljIG1vdmVDb21wbGV0ZTogTGF5YS5IYW5kbGVyO1xyXG4gICAgcHVibGljIGxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMub3duZXIgYXMgTGF5YS5TcHJpdGUzRDtcclxuICAgICAgICB0aGlzLmZvcndhcmQueiA9IC10aGlzLm1vdmVTcGVlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgU2V0TW92ZVBhdGgod2F5UG9pbnQ6IEFycmF5PExheWEuVmVjdG9yMz4sIGxvb3A6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmxvb3AgPSBsb29wO1xyXG4gICAgICAgIHRoaXMud2F5UG9pbnQgPSB3YXlQb2ludDtcclxuICAgICAgICB0aGlzLm1vZGVsLnRyYW5zZm9ybS5sb2NhbFBvc2l0aW9uWCA9IHRoaXMud2F5UG9pbnRbdGhpcy5jdXJyZW50UG9pbnRJbmRleF0ueDtcclxuICAgICAgICB0aGlzLm1vZGVsLnRyYW5zZm9ybS5sb2NhbFBvc2l0aW9uWiA9IHRoaXMud2F5UG9pbnRbdGhpcy5jdXJyZW50UG9pbnRJbmRleF0uejtcclxuICAgICAgICB0aGlzLnN0b3AgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBvblVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdG9wKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tb3ZlRm9yd2FyZCgpO1xyXG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNmb3JtLnRyYW5zbGF0ZSh0aGlzLmZvcndhcmQsIHRydWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQb2ludEluZGV4ICsgMSA8IHRoaXMud2F5UG9pbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwudHJhbnNmb3JtLmxvb2tBdCh0aGlzLndheVBvaW50W3RoaXMuY3VycmVudFBvaW50SW5kZXggKyAxXSwgTGF5YS5WZWN0b3IzLl9VcCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlRm9yd2FyZCgpIHtcclxuICAgICAgICB0aGlzLm5leHRQb2ludCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbmV4dFBvaW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRQb2ludEluZGV4ICsgMSA8IHRoaXMud2F5UG9pbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGlmIChMYXlhLlZlY3RvcjMuZGlzdGFuY2UodGhpcy53YXlQb2ludFt0aGlzLmN1cnJlbnRQb2ludEluZGV4ICsgMV0sIHRoaXMubW9kZWwudHJhbnNmb3JtLnBvc2l0aW9uKSA8IDAuMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLliLDovr7mn5DngrlcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludEluZGV4ID0gdGhpcy5jdXJyZW50UG9pbnRJbmRleCArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubG9vcCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi6LWw5a6MXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubW92ZUNvbXBsZXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlQ29tcGxldGUucnVuKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQb2ludEluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbn0iXX0=
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment