Commit b15491eb authored by liurufeng's avatar liurufeng

资源更新

parent d69340c7
{}
\ 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);
console.log(playerAnim);
playerAnim.crossFade("Idle", 0.1, 0, 0);
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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QyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbEc7SUFHTCxDQUFDO0lBRU8sOEJBQVcsR0FBbkI7UUFDSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLDRCQUFTLEdBQWpCO1FBQ0ksSUFBSSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO1lBQ25ELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsR0FBRyxFQUFFO2dCQUN2RyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNwQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQzthQUN2RDtTQUNKO2FBQU07WUFFSCxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxFQUFFO2dCQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDakIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNuQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO2lCQUMzQjthQUNKO2lCQUFNO2dCQUNILElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUM7YUFDOUI7U0FHSjtJQUVMLENBQUM7SUFFTCxlQUFDO0FBQUQsQ0E5REEsQUE4REMsQ0E5RHFDLElBQUksQ0FBQyxRQUFRLEdBOERsRCIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZXh0ZW5kcyA9ICh0aGlzICYmIHRoaXMuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoYi5oYXNPd25Qcm9wZXJ0eShwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcclxuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxuICAgIH07XHJcbn0pKCk7XHJcbihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCIvKipUaGlzIGNsYXNzIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IExheWFBaXJJREUsIHBsZWFzZSBkbyBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucy4gKi9cclxuXHJcbi8qXHJcbiog5ri45oiP5Yid5aeL5YyW6YWN572uO1xyXG4qL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYW1lQ29uZmlne1xyXG4gICAgc3RhdGljIHdpZHRoOm51bWJlcj0xMzM0O1xyXG4gICAgc3RhdGljIGhlaWdodDpudW1iZXI9NzUwO1xyXG4gICAgc3RhdGljIHNjYWxlTW9kZTpzdHJpbmc9XCJmaXhlZGF1dG9cIjtcclxuICAgIHN0YXRpYyBzY3JlZW5Nb2RlOnN0cmluZz1cIm5vbmVcIjtcclxuICAgIHN0YXRpYyBhbGlnblY6c3RyaW5nPVwidG9wXCI7XHJcbiAgICBzdGF0aWMgYWxpZ25IOnN0cmluZz1cImxlZnRcIjtcclxuICAgIHN0YXRpYyBzdGFydFNjZW5lOmFueT1cIlwiO1xyXG4gICAgc3RhdGljIHNjZW5lUm9vdDpzdHJpbmc9XCJcIjtcclxuICAgIHN0YXRpYyBkZWJ1Zzpib29sZWFuPWZhbHNlO1xyXG4gICAgc3RhdGljIHN0YXQ6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBwaHlzaWNzRGVidWc6Ym9vbGVhbj1mYWxzZTtcclxuICAgIHN0YXRpYyBleHBvcnRTY2VuZVRvSnNvbjpib29sZWFuPXRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe31cclxuICAgIHN0YXRpYyBpbml0KCl7XHJcbiAgICAgICAgdmFyIHJlZzogRnVuY3Rpb24gPSBMYXlhLkNsYXNzVXRpbHMucmVnQ2xhc3M7XHJcblxyXG4gICAgfVxyXG59XHJcbkdhbWVDb25maWcuaW5pdCgpOyIsImltcG9ydCBHYW1lQ29uZmlnIGZyb20gXCIuL0dhbWVDb25maWdcIjtcclxuaW1wb3J0IHsgT3JiaXRDYW1lcmEgfSBmcm9tIFwiLi9PcmJpdENhbWVyYVwiO1xyXG5pbXBvcnQgeyBNYXRoSGVscGVyIH0gZnJvbSBcIi4vTWF0aEhlbHBlclwiO1xyXG5pbXBvcnQgUGF0aE1vdmUgZnJvbSBcIi4vUGF0aE1vdmVcIjtcclxuY2xhc3MgTWFpbiB7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHQvL+agueaNrklEReiuvue9ruWIneWni+WMluW8leaTjlx0XHRcclxuXHRcdGlmICh3aW5kb3dbXCJMYXlhM0RcIl0pIExheWEzRC5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0KTtcclxuXHRcdGVsc2UgTGF5YS5pbml0KEdhbWVDb25maWcud2lkdGgsIEdhbWVDb25maWcuaGVpZ2h0LCBMYXlhW1wiV2ViR0xcIl0pO1xyXG5cdFx0TGF5YVtcIlBoeXNpY3NcIl0gJiYgTGF5YVtcIlBoeXNpY3NcIl0uZW5hYmxlKCk7XHJcblx0XHRMYXlhW1wiRGVidWdQYW5lbFwiXSAmJiBMYXlhW1wiRGVidWdQYW5lbFwiXS5lbmFibGUoKTtcclxuXHRcdExheWEuc3RhZ2Uuc2NhbGVNb2RlID0gR2FtZUNvbmZpZy5zY2FsZU1vZGU7XHJcblx0XHRMYXlhLnN0YWdlLnNjcmVlbk1vZGUgPSBHYW1lQ29uZmlnLnNjcmVlbk1vZGU7XHJcblx0XHQvL+WFvOWuueW+ruS/oeS4jeaUr+aMgeWKoOi9vXNjZW5l5ZCO57yA5Zy65pmvXHJcblx0XHRMYXlhLlVSTC5leHBvcnRTY2VuZVRvSnNvbiA9IEdhbWVDb25maWcuZXhwb3J0U2NlbmVUb0pzb247XHJcblxyXG5cdFx0Ly/miZPlvIDosIPor5XpnaLmnb/vvIjpgJrov4dJREXorr7nva7osIPor5XmqKHlvI/vvIzmiJbogIV1cmzlnLDlnYDlop7liqBkZWJ1Zz10cnVl5Y+C5pWw77yM5Z2H5Y+v5omT5byA6LCD6K+V6Z2i5p2/77yJXHJcblx0XHRpZiAoR2FtZUNvbmZpZy5kZWJ1ZyB8fCBMYXlhLlV0aWxzLmdldFF1ZXJ5U3RyaW5nKFwiZGVidWdcIikgPT0gXCJ0cnVlXCIpIExheWEuZW5hYmxlRGVidWdQYW5lbCgpO1xyXG5cdFx0aWYgKEdhbWVDb25maWcucGh5c2ljc0RlYnVnICYmIExheWFbXCJQaHlzaWNzRGVidWdEcmF3XCJdKSBMYXlhW1wiUGh5c2ljc0RlYnVnRHJhd1wiXS5lbmFibGUoKTtcclxuXHRcdGlmIChHYW1lQ29uZmlnLnN0YXQpIExheWEuU3RhdC5zaG93KCk7XHJcblx0XHRMYXlhLmFsZXJ0R2xvYmFsRXJyb3IgPSB0cnVlO1xyXG5cclxuXHRcdC8v5r+A5rS76LWE5rqQ54mI5pys5o6n5Yi277yMdmVyc2lvbi5qc29u55SxSURF5Y+R5biD5Yqf6IO96Ieq5Yqo55Sf5oiQ77yM5aaC5p6c5rKh5pyJ5Lmf5LiN5b2x5ZON5ZCO57ut5rWB56iLXHJcblx0XHRMYXlhLlJlc291cmNlVmVyc2lvbi5lbmFibGUoXCJ2ZXJzaW9uLmpzb25cIiwgTGF5YS5IYW5kbGVyLmNyZWF0ZSh0aGlzLCB0aGlzLm9uVmVyc2lvbkxvYWRlZCksIExheWEuUmVzb3VyY2VWZXJzaW9uLkZJTEVOQU1FX1ZFUlNJT04pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzY2VuZVJlczogc3RyaW5nID0gXCJyZXMvM2Qvc2NlbmUvQ29udmVudGlvbmFsL3NjZW5lLmxzXCI7XHJcblx0cHJpdmF0ZSBzY2VuZTogTGF5YS5TY2VuZTNEO1xyXG5cdHByaXZhdGUgY2FtZXJhOiBMYXlhLkNhbWVyYTtcclxuXHRvblZlcnNpb25Mb2FkZWQoKTogdm9pZCB7XHJcblx0XHRMYXlhLlNjZW5lM0QubG9hZCh0aGlzLnNjZW5lUmVzLCBMYXlhLkhhbmRsZXIuY3JlYXRlKHRoaXMsIHRoaXMub25Mb2FkU2NlbmVDb21wbGV0ZSkpXHJcblx0fVxyXG5cclxuXHRwcml2YXRlIG9uTG9hZFNjZW5lQ29tcGxldGUoc2NlbmUpIHtcclxuXHRcdHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHRcdExheWEuc3RhZ2UuYWRkQ2hpbGQodGhpcy5zY2VuZSk7XHJcblx0XHRsZXQgY2FtZXJhVGFyZ2V0ID0gbmV3IExheWEuU3ByaXRlM0QoKTtcclxuXHRcdGNhbWVyYVRhcmdldC50cmFuc2Zvcm0ucG9zaXRpb24gPSBuZXcgTGF5YS5WZWN0b3IzKDUsIDAsIDApO1xyXG5cdFx0dGhpcy5zY2VuZS5hZGRDaGlsZChjYW1lcmFUYXJnZXQpO1xyXG5cdFx0dGhpcy5jYW1lcmEgPSB0aGlzLnNjZW5lLmdldENoaWxkQnlOYW1lKFwiQ2FtZXJhUGl2b3RcIikuZ2V0Q2hpbGRBdCgwKSBhcyBMYXlhLkNhbWVyYTtcclxuXHRcdGxldCBvcmJpdCA9IHRoaXMuY2FtZXJhLmFkZENvbXBvbmVudChPcmJpdENhbWVyYSkgYXMgT3JiaXRDYW1lcmE7XHJcblx0XHRvcmJpdC5UYXJnZXQgPSBjYW1lcmFUYXJnZXQ7XHJcblx0XHRvcmJpdC5jYW5QYW4gPSB0cnVlO1xyXG5cdFx0b3JiaXQuUmFkaXVzID0gMzU7XHJcblx0XHRvcmJpdC5zZXRSb3RhdGlvbigtMTUwLCAtMjEwKTtcclxuXHJcblx0XHRsZXQgcGxheWVyID0gdGhpcy5zY2VuZS5nZXRDaGlsZEJ5TmFtZShcIlBsYXllclwiKSBhcyBMYXlhLlNwcml0ZTNEO1xyXG5cdFx0bGV0IHBsYXllckFuaW0gPSBwbGF5ZXIuZ2V0Q2hpbGRBdCgwKS5nZXRDb21wb25lbnQoTGF5YS5BbmltYXRvcikgYXMgTGF5YS5BbmltYXRvcjtcclxuXHRcdGNvbnNvbGUubG9nKHBsYXllckFuaW0pO1xyXG5cdFx0cGxheWVyQW5pbS5jcm9zc0ZhZGUoXCJJZGxlXCIsIDAuMSwgMCwgMCk7XHJcblx0XHRsZXQgcGF0aE1vdmUgPSBwbGF5ZXIuYWRkQ29tcG9uZW50KFBhdGhNb3ZlKSBhcyBQYXRoTW92ZTtcclxuXHRcdHBhdGhNb3ZlLm1vdmVDb21wbGV0ZSA9IExheWEuSGFuZGxlci5jcmVhdGUodGhpcywgKCkgPT4ge1xyXG5cdFx0XHRwbGF5ZXJBbmltLmNyb3NzRmFkZShcIklkbGVcIiwgMC4xLCAwLCAwKTtcclxuXHRcdH0pO1xyXG5cdFx0bGV0IHdheVBvaW50cyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNjZW5lLmdldENoaWxkQnlOYW1lKFwiUGxheWVyV2F5UG9pbnRcIikuX2NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IHBvaW50ID0gdGhpcy5zY2VuZS5nZXRDaGlsZEJ5TmFtZShcIlBsYXllcldheVBvaW50XCIpLl9jaGlsZHJlbltpXSBhcyBMYXlhLlNwcml0ZTNEO1xyXG5cdFx0XHR3YXlQb2ludHMucHVzaChwb2ludC50cmFuc2Zvcm0ucG9zaXRpb24pO1xyXG5cdFx0fVxyXG5cdFx0TGF5YS50aW1lci5vbmNlKDMwMDAsIHRoaXMsICgpID0+IHtcclxuXHRcdFx0cGxheWVyQW5pbS5jcm9zc0ZhZGUoXCJXYWxrXCIsIDAuMSwgMCwgMCk7XHJcblx0XHRcdHBhdGhNb3ZlLlNldE1vdmVQYXRoKHdheVBvaW50cyx0cnVlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcbn1cclxuLy/mv4DmtLvlkK/liqjnsbtcclxubmV3IE1haW4oKTtcclxuIiwiZXhwb3J0IGNsYXNzIE1hdGhIZWxwZXIge1xyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcblxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWcyUmFkID0gMC4wMTc0NTMyOVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIERlZzJSYWQ6IG51bWJlciA9IDAuMDE3NDUzMjk7XHJcbiAgICAvKipcclxuICAgICAqIFJhZDJEZWcgPSA1Ny4yOTU3OFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIFJhZDJEZWc6IG51bWJlciA9IDU3LjI5NTc4O1xyXG4gICAgLyoqXHJcbiAgICAgKiDojrflj5bkuKTlkJHph4/op5LluqZcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBWZWN0b3IzQW5nbGUodjE6IExheWEuVmVjdG9yMywgdjI6IExheWEuVmVjdG9yMyk6IG51bWJlciB7XHJcbiAgICAgICAgTGF5YS5WZWN0b3IzLm5vcm1hbGl6ZSh2MiwgdjIpO1xyXG4gICAgICAgIHZhciBkb3QgPSBMYXlhLlZlY3RvcjMuZG90KHYxLCB2Mik7XHJcbiAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hY29zKGRvdCkgKiA1Ny4yOTU3ODtcclxuICAgICAgICByZXR1cm4gYW5nbGU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDnkIPooajpnaLpmo/mnLpcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBvblVuaXRTcGhlcmUocmFkaXVzOiBudW1iZXIpOiBMYXlhLlZlY3RvcjMge1xyXG4gICAgICAgIHZhciBwMTogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgtcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciBwMjogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgwLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciBwMzogbnVtYmVyID0gdGhpcy5yYW5kb21GbG9hdCgtcmFkaXVzLCByYWRpdXMpO1xyXG4gICAgICAgIHZhciB2MzogTGF5YS5WZWN0b3IzID0gbmV3IExheWEuVmVjdG9yMyhwMSwgcDIsIHAzKTtcclxuICAgICAgICAvL0xheWEuVmVjdG9yMy5ub3JtYWxpemUodjMsdjMpO1xyXG4gICAgICAgIExheWEuVmVjdG9yMy5zY2FsZSh2MywgcmFkaXVzLCB2Myk7XHJcbiAgICAgICAgcmV0dXJuIHYzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcmFuZG9tRmxvYXQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSArIG1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOmaj+acuuiMg+WbtOiOt+WPluaVtOaVsOaVsOWAvCBtaW48PSB2YWx1ZSA8PW1heCBcclxuICAgICAqICovXHJcbiAgICBwdWJsaWMgc3RhdGljIHJhbmRvbShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpKSArIG1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENsYW1wQW5nbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGFtcEFuZ2xlKGFuZ2xlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGFuZ2xlIDwgbWluKSB7XHJcbiAgICAgICAgICAgIGFuZ2xlID0gbWluO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChhbmdsZSA+IG1heCkge1xyXG4gICAgICAgICAgICBhbmdsZSA9IG1heDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFuZ2xlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2xhbXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIGlmICh2YWx1ZSA8IG1pbikge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IG1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodmFsdWUgPiBtYXgpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBtYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIG5ld0d1aWQoKSB7XHJcbiAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBudW1iZXIyQmlnTnVtYmVyKG46IG51bWJlciwgbWF4TGVuOiBudW1iZXIgPSA0KTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgb3V0TnVtOiBzdHJpbmc7XHJcbiAgICAgICAgbGV0IGsgPSAxMDAwO1xyXG4gICAgICAgIGxldCBiYXNlOiBudW1iZXIgPSBrO1xyXG4gICAgICAgIGxldCBwb3cgPSAwO1xyXG5cclxuICAgICAgICBmb3IgKHBvdyA9IDA7IDsgcG93KyspIHtcclxuICAgICAgICAgICAgaWYgKG4gPCBiYXNlKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBiYXNlICo9IGs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1bml0ID0gXCJcIjtcclxuICAgICAgICBpZiAocG93IDwgNSkge1xyXG4gICAgICAgICAgICB1bml0ID0gcG93ID09IDAgPyBcIlwiIDogKHBvdyA9PSAxID8gXCJrXCIgOiAocG93ID09IDIgPyBcIm1cIiA6IChwb3cgPT0gMyA/IFwiYlwiIDogXCJ0XCIpKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgbF9hID0gOTc7XHJcbiAgICAgICAgICAgIGxldCBsX0EgPSA2NTtcclxuICAgICAgICAgICAgbGV0IGRpdiA9IE1hdGguZmxvb3IoKHBvdyAtIDUpIC8gMjYpO1xyXG4gICAgICAgICAgICBsZXQgbW9kID0gKHBvdyAtIDUpICUgMjY7XHJcbiAgICAgICAgICAgIHVuaXQgPSBkaXYgPT0gMCA/IFN0cmluZy5mcm9tQ2hhckNvZGUobF9hICsgbW9kLCBsX2EgKyBtb2QpIDogKGRpdiA9PSAxID8gU3RyaW5nLmZyb21DaGFyQ29kZShsX0EgKyBtb2QsIGxfYSArIG1vZCkgOiBTdHJpbmcuZnJvbUNoYXJDb2RlKGxfQSArIG1vZCwgbF9BICsgbW9kKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dE51bSA9IFN0cmluZyhuIC8gKGJhc2UgKiAwLjAwMSkpO1xyXG4gICAgICAgIHJldHVybiBcIi5cIiA9PSAob3V0TnVtID0gb3V0TnVtLnN1YnN0cigwLCBtYXhMZW4pKS5jaGFyQXQob3V0TnVtLmxlbmd0aCAtIDEpID8gb3V0TnVtLnJlcGxhY2UoXCIuXCIsIHVuaXQpIDogb3V0TnVtICsgdW5pdDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFN5c3RlbVRpbWUoKTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgY3VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdmFyIHllYXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICB2YXIgbW9udGg6IG51bWJlciA9IGN1ckRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgdmFyIGRhdGU6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIHZhciBkYXk6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF5KCk7XHJcbiAgICAgICAgdmFyIGhvdXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0SG91cnMoKTtcclxuICAgICAgICB2YXIgbWludXRlOiBudW1iZXIgPSBjdXJEYXRlLmdldE1pbnV0ZXMoKTtcclxuICAgICAgICB2YXIgc2Vjb25kOiBudW1iZXIgPSBjdXJEYXRlLmdldFNlY29uZHMoKTtcclxuICAgICAgICB2YXIgc3lzdGVtVGltZSA9IHllYXIgKyBcIuW5tFwiICsgbW9udGggKyBcIuaciFwiICsgZGF0ZSArIFwi5pelXCIgKyBob3VyICsgXCLml7ZcIiArIG1pbnV0ZSArIFwi5YiGXCIgKyBzZWNvbmQgKyBcIuenklwiO1xyXG4gICAgICAgIHJldHVybiBzeXN0ZW1UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIC8q5a+55q+U54mI5pysKi9cclxuICAgIHB1YmxpYyBzdGF0aWMgQ29tcGFyZVZlcnNpb24odjE6IHN0cmluZywgdjI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgdmFyIGFycjEgPSB2MS5zcGxpdCgnLicpO1xyXG4gICAgICAgIHZhciBhcnIyID0gdjIuc3BsaXQoJy4nKTtcclxuICAgICAgICB2YXIgbGVuID0gTWF0aC5tYXgoYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcclxuICAgICAgICB3aGlsZSAoYXJyMS5sZW5ndGggPCBsZW4pIHtcclxuICAgICAgICAgICAgYXJyMS5wdXNoKCcwJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHdoaWxlIChhcnIyLmxlbmd0aCA8IGxlbikge1xyXG4gICAgICAgICAgICBhcnIyLnB1c2goJzAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICB2YXIgbnVtMSA9IHBhcnNlSW50KGFycjFbaV0pO1xyXG4gICAgICAgICAgICB2YXIgbnVtMiA9IHBhcnNlSW50KGFycjJbaV0pO1xyXG4gICAgICAgICAgICBpZiAobnVtMSA+IG51bTIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bTEgPCBudW0yKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcblxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgQ291bnREb3duKHRpbWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IG1pbnV0ZSA9IE1hdGguZmxvb3IodGltZSAvIDYwKTtcclxuICAgICAgICBsZXQgc2Vjb25kID0gdGltZSAlIDYwO1xyXG5cclxuICAgICAgICByZXR1cm4gKG1pbnV0ZSA8IDEwID8gXCIwXCIgKyBtaW51dGUgOiBtaW51dGUpICsgXCI6XCIgKyAoc2Vjb25kIDwgMTAgPyBcIjBcIiArIHNlY29uZCA6IHNlY29uZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN0YXRpYyBjb3VudERheShkMTogc3RyaW5nLCBkMjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgczEgPSBuZXcgRGF0ZShkMSk7XHJcbiAgICAgICAgbGV0IHMyID0gbmV3IERhdGUoZDIpO1xyXG4gICAgICAgIHZhciBkYXlzID0gczEuZ2V0VGltZSgpIC0gczIuZ2V0VGltZSgpO1xyXG4gICAgICAgIHZhciB0aW1lID0gZGF5cyAvICgxMDAwICogNjAgKiA2MCAqIDI0KTtcclxuICAgICAgICByZXR1cm4gdGltZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFRpbWUoKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgY3VyRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgbGV0IHllYXI6IG51bWJlciA9IGN1ckRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICBsZXQgbW9udGg6IG51bWJlciA9IGN1ckRhdGUuZ2V0TW9udGgoKSArIDE7XHJcbiAgICAgICAgbGV0IGRhdGU6IG51bWJlciA9IGN1ckRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIGlmIChtb250aCA8IDEwKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgc3lzdGVtVGltZSA9IHllYXIgKyBcIi9cIiArIChtb250aCA8IDEwID8gXCIwXCIgKyBtb250aCA6IG1vbnRoKSArIFwiL1wiICsgKGRhdGUgPCAxMCA/IFwiMFwiICsgZGF0ZSA6IGRhdGUpO1xyXG4gICAgICAgIHJldHVybiBzeXN0ZW1UaW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGF0aWMgcHJlZml4SW50ZWdlcihudW0sIGxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiAoQXJyYXkobGVuZ3RoKS5qb2luKCcwJykgKyBudW0pLnNsaWNlKC1sZW5ndGgpO1xyXG4gICAgfVxyXG59IiwiLypcclxuKiBPcmJpdENhbWVyYSAzNjDop4Llr5/niankvZPnm7jmnLpcclxuKiB1bml0eemcgOimgeWPluW3p+WkhOeQhlxyXG4qL1xyXG5cclxuaW1wb3J0IE1vdXNlTWFuYWdlciA9IGxheWEuZXZlbnRzLk1vdXNlTWFuYWdlcjtcclxuaW1wb3J0IFF1YXRlcm5pb24gPSBsYXlhLmQzLm1hdGguUXVhdGVybmlvbjtcclxuaW1wb3J0IEV2ZW50ID0gTGF5YS5FdmVudDtcclxuaW1wb3J0IHsgTWF0aEhlbHBlciB9IGZyb20gXCIuL01hdGhIZWxwZXJcIjtcclxuZXhwb3J0IGNsYXNzIE9yYml0Q2FtZXJhIGV4dGVuZHMgTGF5YS5TY3JpcHQzRCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmFjdG9yOiBudW1iZXIgPSAwLjE7XHJcbiAgICBwdWJsaWMgY2FuUGFuOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgVGFyZ2V0OiBMYXlhLlNwcml0ZTNEO1xyXG4gICAgcHVibGljIFJvdGF0ZVNwZWVkOiBudW1iZXIgPSAwLjU7XHJcbiAgICBwdWJsaWMgUGFuU3BlZWQ6bnVtYmVyID0gMztcclxuICAgIHB1YmxpYyBTbW9vdGhUaW1lOiBudW1iZXIgPSAxO1xyXG4gICAgcHVibGljIFlNaW5MaW1pdDogbnVtYmVyID0gLTE4MDtcclxuICAgIHB1YmxpYyBZTWF4TGltaXQ6IG51bWJlciA9IDE4MDtcclxuICAgIHB1YmxpYyBEaXN0YW5jZTogbnVtYmVyID0gMzU7XHJcbiAgICBwdWJsaWMgRGlzdGFuY2VNaW46IG51bWJlciA9IDE1O1xyXG4gICAgcHVibGljIERpc3RhbmNlTWF4OiBudW1iZXIgPSAzNTtcclxuICAgIHB1YmxpYyBQYXVzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIGlzVHdlZW5pbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBSYWRpdXM6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBtb2RsZTogTGF5YS5UcmFuc2Zvcm0zRDtcclxuICAgIHByaXZhdGUgbW9kbGVQYXJlbnQ6IExheWEuVHJhbnNmb3JtM0Q7XHJcblxyXG4gICAgcHJpdmF0ZSBBbmdsZUg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIEFuZ2xlVjogbnVtYmVyID0gMDtcclxuXHJcbiAgICBwcml2YXRlIFBhblg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIFBhblk6IG51bWJlciA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBkb3duWDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgZG93blk6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGlzRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBtb3VzZVg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIG1vdXNlWTogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgaXNNb3ZlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB0bXBPdXRSb3RhdGlvbjogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKDAsIDAsIDAsIDApO1xyXG4gICAgcHJpdmF0ZSBsYXN0RGlzdGFuY2U6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIHRhcmdldE9mZnNldE1vdmVZOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIG9uQXdha2UoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RsZSA9ICh0aGlzLm93bmVyIGFzIExheWEuU3ByaXRlM0QpLnRyYW5zZm9ybTtcclxuICAgICAgICB0aGlzLm1vZGxlUGFyZW50ID0gdGhpcy5tb2RsZS5fcGFyZW50O1xyXG4gICAgICAgIHZhciBhbmdsZXMgPSB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb25FdWxlcjtcclxuICAgICAgICB0aGlzLkFuZ2xlSCA9IGFuZ2xlcy55O1xyXG4gICAgICAgIHRoaXMuQW5nbGVWID0gYW5nbGVzLng7XHJcbiAgICAgICAgdGhpcy5pbml0RXZlbnRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIExheWEuc3RhZ2Uub2ZmKExheWEuRXZlbnQuTU9VU0VfRE9XTiwgdGhpcywgdGhpcy5vbk1vdXNlRG93bkhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub2ZmKExheWEuRXZlbnQuTU9VU0VfVVAsIHRoaXMsIHRoaXMub25Nb3VzZVVwSGFuZGxlcik7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5vZmYoTGF5YS5FdmVudC5NT1VTRV9XSEVFTCwgdGhpcywgdGhpcy5vbk1vdXNlcldoZWVsSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFJvdGF0aW9uKCk6IExheWEuUXVhdGVybmlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Um90YXRpb24oaDogbnVtYmVyLCB2OiBudW1iZXIsIHVzZVR3ZWVuOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBsZXQgdCA9IG5ldyBMYXlhLlF1YXRlcm5pb24odGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uLngsIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbi55LCB0aGlzLm1vZGxlUGFyZW50LmxvY2FsUm90YXRpb24ueiwgdGhpcy5tb2RsZVBhcmVudC5sb2NhbFJvdGF0aW9uLncpO1xyXG4gICAgICAgIHRoaXMuQW5nbGVIID0gaDtcclxuICAgICAgICB0aGlzLkFuZ2xlViA9IHY7XHJcbiAgICAgICAgUXVhdGVybmlvbi5jcmVhdGVGcm9tWWF3UGl0Y2hSb2xsKHRoaXMuQW5nbGVIICogMC4wMDUgKiB0aGlzLlJvdGF0ZVNwZWVkLCB0aGlzLkFuZ2xlViAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgMCwgdGhpcy50bXBPdXRSb3RhdGlvbik7XHJcbiAgICAgICAgaWYgKHVzZVR3ZWVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNUd2VlbmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIGZhaXJ5Z3VpLnR3ZWVuLkdUd2Vlbi50bzQodC54LCB0LnksIHQueiwgdC53LCB0aGlzLnRtcE91dFJvdGF0aW9uLngsIHRoaXMudG1wT3V0Um90YXRpb24ueSwgdGhpcy50bXBPdXRSb3RhdGlvbi56LCB0aGlzLnRtcE91dFJvdGF0aW9uLncsIDEpXHJcbiAgICAgICAgICAgICAgICAub25VcGRhdGUodGhpcy5vblR3ZWVuUm90YXRpb25VcGRhdGUsIHRoaXMpXHJcbiAgICAgICAgICAgICAgICAub25Db21wbGV0ZSh0aGlzLm9uVHdlZW5Sb3RhdGlvbkNvbXBlbHRlLCB0aGlzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbiA9IHRoaXMudG1wT3V0Um90YXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSB0d2VlblJvdGF0aW9uID0gbmV3IExheWEuUXVhdGVybmlvbigwLCAwLCAwLCAwKTtcclxuICAgIHByaXZhdGUgb25Ud2VlblJvdGF0aW9uVXBkYXRlKHR3ZWVuOiBmYWlyeWd1aS50d2Vlbi5HVHdlZW5lcikge1xyXG4gICAgICAgIHRoaXMudG1wT3V0Um90YXRpb24gPSBuZXcgTGF5YS5RdWF0ZXJuaW9uKHR3ZWVuLnZhbHVlLngsIHR3ZWVuLnZhbHVlLnksIHR3ZWVuLnZhbHVlLnosIHR3ZWVuLnZhbHVlLncpO1xyXG4gICAgICAgIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbiA9IHRoaXMudG1wT3V0Um90YXRpb247XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblR3ZWVuUm90YXRpb25Db21wZWx0ZSgpIHtcclxuICAgICAgICB0aGlzLmlzVHdlZW5pbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLlBhdXNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdXA6IExheWEuVmVjdG9yMyA9IG5ldyBMYXlhLlZlY3RvcjMoKTtcclxuICAgIG9uVXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsZXQgYW4gPSAzLjE0IC8gMjtcclxuICAgICAgICAvLyBsZXQgbW92ZUggPSB0aGlzLm1vdXNlWCAqIE1hdGguY29zKGFuKSArIHRoaXMubW91c2VZICogTWF0aC5zaW4oYW4pO1xyXG4gICAgICAgIC8vIGxldCBtb3ZlViA9IHRoaXMubW91c2VYICogTWF0aC5zaW4oYW4pICsgdGhpcy5tb3VzZVkgKiBNYXRoLmNvcyhhbilcclxuICAgICAgICAvLyB0aGlzLkFuZ2xlSCArPSBtb3ZlSDtcclxuICAgICAgICAvLyB0aGlzLkFuZ2xlViArPSBtb3ZlVjtcclxuXHJcbiAgICAgICAgdGhpcy5tb2RsZVBhcmVudC5nZXRVcCh0aGlzLnVwKTtcclxuICAgICAgICBpZiAodGhpcy51cC55ID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLkFuZ2xlSCAtPSB0aGlzLm1vdXNlWDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLkFuZ2xlSCArPSB0aGlzLm1vdXNlWDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gaWYgKHRoaXMubW9kbGVQYXJlbnQucmlnaHQueCA+IDApIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5BbmdsZVYgLT0gdGhpcy5tb3VzZVkgO1xyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuQW5nbGVWICs9IHRoaXMubW91c2VZIDtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy5BbmdsZVYgLT0gdGhpcy5tb3VzZVk7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgb25MYXRlVXBkYXRlKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykgeyByZXR1cm47IH1cclxuICAgICAgICBpZiAodGhpcy5UYXJnZXQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvL3RoaXMuVGFyZ2V0LnRyYW5zZm9ybS5sb2NhbFBvc2l0aW9uID0gbmV3IExheWEuVmVjdG9yMygwLCB0aGlzLnRhcmdldE9mZnNldE1vdmVZLCAwKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuUGFuID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhbWVyZVJvdGF0ZSgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW1lcmFQYW4oKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jYW1lcmFab29tKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubW91c2VYID0gMDtcclxuICAgICAgICB0aGlzLm1vdXNlWSA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjYW1lcmFQYW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNEb3duKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvblggPSB0aGlzLlBhblg7XHJcbiAgICAgICAgICAgIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvblkgPSB0aGlzLlBhblk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FtZXJlUm90YXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICAgICAgICAvL3RoaXMuQW5nbGVWID0gTWF0aEhlbHBlci5DbGFtcCh0aGlzLkFuZ2xlViwgdGhpcy5ZTWluTGltaXQsIHRoaXMuWU1heExpbWl0KTtcclxuICAgICAgICAgICAgUXVhdGVybmlvbi5jcmVhdGVGcm9tWWF3UGl0Y2hSb2xsKHRoaXMuQW5nbGVIICogMC4wMDUgKiB0aGlzLlJvdGF0ZVNwZWVkLCB0aGlzLkFuZ2xlViAqIDAuMDA1ICogdGhpcy5Sb3RhdGVTcGVlZCwgMCwgdGhpcy50bXBPdXRSb3RhdGlvbik7XHJcbiAgICAgICAgICAgIHRoaXMubW9kbGVQYXJlbnQubG9jYWxSb3RhdGlvbiA9IHRoaXMudG1wT3V0Um90YXRpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhbWVyYVpvb20oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kbGUubG9jYWxQb3NpdGlvbi56ICE9IHRoaXMuRGlzdGFuY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RsZS5sb2NhbFBvc2l0aW9uID0gbmV3IExheWEuVmVjdG9yMyh0aGlzLlBhblgsIHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVkgKyB0aGlzLlBhblksIHRoaXMuRGlzdGFuY2UgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RXZlbnRzKCkge1xyXG4gICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9ET1dOLCB0aGlzLCB0aGlzLm9uTW91c2VEb3duSGFuZGxlcik7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5vbihMYXlhLkV2ZW50Lk1PVVNFX1VQLCB0aGlzLCB0aGlzLm9uTW91c2VVcEhhbmRsZXIpO1xyXG4gICAgICAgIExheWEuc3RhZ2Uub24oTGF5YS5FdmVudC5NT1VTRV9XSEVFTCwgdGhpcywgdGhpcy5vbk1vdXNlcldoZWVsSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIG9uTW91c2VyV2hlZWxIYW5kbGVyKGU6IEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBkaXN0YW5jZTogbnVtYmVyID0gdGhpcy5sYXN0RGlzdGFuY2UgKyBlLmRlbHRhO1xyXG4gICAgICAgIHRoaXMuRGlzdGFuY2UgLT0gKGRpc3RhbmNlIC0gdGhpcy5sYXN0RGlzdGFuY2UpICogdGhpcy5mYWN0b3I7XHJcbiAgICAgICAgdGhpcy5EaXN0YW5jZSA9IE1hdGhIZWxwZXIuY2xhbXAodGhpcy5EaXN0YW5jZSwgdGhpcy5EaXN0YW5jZU1pbiwgdGhpcy5EaXN0YW5jZU1heCk7XHJcbiAgICAgICAgdGhpcy5sYXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICB0aGlzLnRhcmdldE9mZnNldE1vdmVZID0gLSh0aGlzLkRpc3RhbmNlIC0gOCkgLyB0aGlzLkRpc3RhbmNlTWluICogdGhpcy5SYWRpdXM7XHJcbiAgICAgICAgdGhpcy50YXJnZXRPZmZzZXRNb3ZlWSA9IE1hdGhIZWxwZXIuY2xhbXAodGhpcy50YXJnZXRPZmZzZXRNb3ZlWSwgMCwgdGhpcy5SYWRpdXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VEb3duSGFuZGxlcihlOiBFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLlBhdXNlIHx8IHRoaXMuaXNUd2VlbmluZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlLnRvdWNoZXMpIHtcclxuICAgICAgICAgICAgdmFyIHRvdWNoZXM6IEFycmF5PGFueT4gPSBlLnRvdWNoZXM7XHJcbiAgICAgICAgICAgIGlmICh0b3VjaGVzICYmIHRvdWNoZXMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdERpc3RhbmNlID0gdGhpcy5nZXREaXN0YW5jZSh0b3VjaGVzKTtcclxuICAgICAgICAgICAgICAgIExheWEuc3RhZ2Uub24oRXZlbnQuTU9VU0VfTU9WRSwgdGhpcywgdGhpcy5vbk1vdXNlTW92ZUhhbmRsZXIpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3duWCA9IGUuc3RhZ2VYO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGUuc3RhZ2VZO1xyXG4gICAgICAgICAgICAgICAgTGF5YS5zdGFnZS5vbihMYXlhLkV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMub25Nb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG93blggPSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYO1xyXG4gICAgICAgICAgICB0aGlzLmRvd25ZID0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWTtcclxuICAgICAgICAgICAgTGF5YS5zdGFnZS5vbihMYXlhLkV2ZW50Lk1PVVNFX01PVkUsIHRoaXMsIHRoaXMub25Nb3VzZU1vdmVIYW5kbGVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNEb3duID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzTW92ZWQgPSBmYWxzZTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgb25Nb3VzZVVwSGFuZGxlcigpIHtcclxuICAgICAgICBpZiAodGhpcy5QYXVzZSB8fCB0aGlzLmlzVHdlZW5pbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzRG93biA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuaXNNb3ZlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubW91c2VYID0gMDtcclxuICAgICAgICB0aGlzLm1vdXNlWSA9IDA7XHJcbiAgICAgICAgTGF5YS5zdGFnZS5vZmYoTGF5YS5FdmVudC5NT1VTRV9NT1ZFLCB0aGlzLCB0aGlzLm9uTW91c2VNb3ZlSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgb25Nb3VzZU1vdmVIYW5kbGVyKGU6IEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuUGF1c2UgfHwgdGhpcy5pc1R3ZWVuaW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGUudG91Y2hlcykge1xyXG4gICAgICAgICAgICB2YXIgdG91Y2hlczogQXJyYXk8YW55PiA9IGUudG91Y2hlcztcclxuICAgICAgICAgICAgaWYgKHRvdWNoZXMgJiYgdG91Y2hlcy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpc3RhbmNlOiBudW1iZXIgPSB0aGlzLmdldERpc3RhbmNlKGUudG91Y2hlcyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmYWN0b3I6IG51bWJlciA9IDAuMDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkRpc3RhbmNlIC09IChkaXN0YW5jZSAtIHRoaXMubGFzdERpc3RhbmNlKSAqIGZhY3RvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuRGlzdGFuY2UgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMuRGlzdGFuY2UsIHRoaXMuRGlzdGFuY2VNaW4sIHRoaXMuRGlzdGFuY2VNYXgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0RGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVkgPSAtKHRoaXMuRGlzdGFuY2UgLSA4KSAvIHRoaXMuRGlzdGFuY2VNaW4gKiB0aGlzLlJhZGl1cztcclxuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVkgPSBNYXRoSGVscGVyLmNsYW1wKHRoaXMudGFyZ2V0T2Zmc2V0TW92ZVksIDAsIHRoaXMuUmFkaXVzKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuY2FuUGFuID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVggPSBlLnN0YWdlWCAtIHRoaXMuZG93blg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VZID0gZS5zdGFnZVkgLSB0aGlzLmRvd25ZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb3duWCAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCB8fCB0aGlzLmRvd25ZICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWSA9IGUuc3RhZ2VZO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWCA9IGUuc3RhZ2VYIC0gdGhpcy5kb3duWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3VzZVkgPSBlLnN0YWdlWSAtIHRoaXMuZG93blk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvd25YICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYIHx8IHRoaXMuZG93blkgIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWCA9IGUuc3RhZ2VYO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25ZID0gZS5zdGFnZVk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUGFuWCA9IC10aGlzLm1vdXNlWCAqIDAuMDA1ICogdGhpcy5QYW5TcGVlZCArIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvblggO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlBhblkgPSB0aGlzLm1vdXNlWSAqIDAuMDA1ICogdGhpcy5QYW5TcGVlZCArIHRoaXMubW9kbGUubG9jYWxQb3NpdGlvblkgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGlmKHRoaXMuY2FuUGFuID09IGZhbHNlKXtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VYID0gZS5zdGFnZVggLSB0aGlzLmRvd25YO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW91c2VZID0gZS5zdGFnZVkgLSB0aGlzLmRvd25ZO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRvd25YICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VYIHx8IHRoaXMuZG93blkgIT09IE1vdXNlTWFuYWdlci5pbnN0YW5jZS5tb3VzZVkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01vdmVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3duWCA9IGUuc3RhZ2VYO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blkgPSBlLnN0YWdlWTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWCA9IGUuc3RhZ2VYIC0gdGhpcy5kb3duWDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdXNlWSA9IGUuc3RhZ2VZIC0gdGhpcy5kb3duWTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kb3duWCAhPT0gTW91c2VNYW5hZ2VyLmluc3RhbmNlLm1vdXNlWCB8fCB0aGlzLmRvd25ZICE9PSBNb3VzZU1hbmFnZXIuaW5zdGFuY2UubW91c2VZKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG93blggPSBlLnN0YWdlWDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvd25ZID0gZS5zdGFnZVk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5QYW5YID0gLXRoaXMubW91c2VYICogMC4wMDUgKiB0aGlzLlBhblNwZWVkICsgdGhpcy5tb2RsZS5sb2NhbFBvc2l0aW9uWCA7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5QYW5ZID0gdGhpcy5tb3VzZVkgKiAwLjAwNSAqIHRoaXMuUGFuU3BlZWQgKyB0aGlzLm1vZGxlLmxvY2FsUG9zaXRpb25ZIDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKuiuoeeul+S4pOS4quinpuaRuOeCueS5i+mXtOeahOi3neemuyovXHJcbiAgICBwcml2YXRlIGdldERpc3RhbmNlKHBvaW50czogQXJyYXk8YW55Pik6IG51bWJlciB7XHJcbiAgICAgICAgdmFyIGRpc3RhbmNlOiBudW1iZXIgPSAwO1xyXG4gICAgICAgIGlmIChwb2ludHMgJiYgcG9pbnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIHZhciBkeDogbnVtYmVyID0gcG9pbnRzWzBdLnN0YWdlWCAtIHBvaW50c1sxXS5zdGFnZVg7XHJcbiAgICAgICAgICAgIHZhciBkeTogbnVtYmVyID0gcG9pbnRzWzBdLnN0YWdlWSAtIHBvaW50c1sxXS5zdGFnZVk7XHJcbiAgICAgICAgICAgIGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRpc3RhbmNlO1xyXG4gICAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGF0aE1vdmUgZXh0ZW5kcyBMYXlhLlNjcmlwdDNEIHtcclxuICAgIHB1YmxpYyBtb2RlbDogTGF5YS5TcHJpdGUzRDtcclxuICAgIHByaXZhdGUgd2F5UG9pbnQ6IEFycmF5PExheWEuVmVjdG9yMz47XHJcbiAgICBwcml2YXRlIGN1cnJlbnRQb2ludEluZGV4OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBmb3J3YXJkOiBMYXlhLlZlY3RvcjMgPSBuZXcgTGF5YS5WZWN0b3IzKDAsIDAsIDApO1xyXG4gICAgcHVibGljIG1vdmVTcGVlZDogbnVtYmVyID0gMC4wMTU7XHJcbiAgICBwdWJsaWMgc3RvcDogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgbW92ZUNvbXBsZXRlOiBMYXlhLkhhbmRsZXI7XHJcbiAgICBwdWJsaWMgbG9vcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgb25Bd2FrZSgpIHtcclxuICAgICAgICB0aGlzLm1vZGVsID0gdGhpcy5vd25lciBhcyBMYXlhLlNwcml0ZTNEO1xyXG4gICAgICAgIHRoaXMuZm9yd2FyZC56ID0gLXRoaXMubW92ZVNwZWVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBTZXRNb3ZlUGF0aCh3YXlQb2ludDogQXJyYXk8TGF5YS5WZWN0b3IzPiwgbG9vcDogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMubG9vcCA9IGxvb3A7XHJcbiAgICAgICAgdGhpcy53YXlQb2ludCA9IHdheVBvaW50O1xyXG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNmb3JtLmxvY2FsUG9zaXRpb25YID0gdGhpcy53YXlQb2ludFt0aGlzLmN1cnJlbnRQb2ludEluZGV4XS54O1xyXG4gICAgICAgIHRoaXMubW9kZWwudHJhbnNmb3JtLmxvY2FsUG9zaXRpb25aID0gdGhpcy53YXlQb2ludFt0aGlzLmN1cnJlbnRQb2ludEluZGV4XS56O1xyXG4gICAgICAgIHRoaXMuc3RvcCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVXBkYXRlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0b3ApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vdmVGb3J3YXJkKCk7XHJcbiAgICAgICAgdGhpcy5tb2RlbC50cmFuc2Zvcm0udHJhbnNsYXRlKHRoaXMuZm9yd2FyZCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBvaW50SW5kZXggKyAxIDwgdGhpcy53YXlQb2ludC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC50cmFuc2Zvcm0ubG9va0F0KHRoaXMud2F5UG9pbnRbdGhpcy5jdXJyZW50UG9pbnRJbmRleCArIDFdLCBMYXlhLlZlY3RvcjMuX1VwLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vdmVGb3J3YXJkKCkge1xyXG4gICAgICAgIHRoaXMubmV4dFBvaW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBuZXh0UG9pbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFBvaW50SW5kZXggKyAxIDwgdGhpcy53YXlQb2ludC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgaWYgKExheWEuVmVjdG9yMy5kaXN0YW5jZSh0aGlzLndheVBvaW50W3RoaXMuY3VycmVudFBvaW50SW5kZXggKyAxXSwgdGhpcy5tb2RlbC50cmFuc2Zvcm0ucG9zaXRpb24pIDwgMC4xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuWIsOi+vuafkOeCuVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50SW5kZXggPSB0aGlzLmN1cnJlbnRQb2ludEluZGV4ICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5sb29wID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLotbDlroxcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3ZlQ29tcGxldGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVDb21wbGV0ZS5ydW4oKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFBvaW50SW5kZXggPSAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxufSJdfQ==
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