(function() { var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined'; var __module = nodeEnv ? module : {exports:{}}; var __filename = 'preview-scripts/assets/Scripts/common/gmcmd.js'; var __require = nodeEnv ? function (request) { return cc.require(request); } : function (request) { return __quick_compile_project__.require(request, __filename); }; function __define (exports, require, module) { if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict"; cc._RF.push(module, '5c013vN5KFCGKEPXIcgtbFA', 'gmcmd'); // Scripts/common/gmcmd.js "use strict"; function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /*-----------------------------------------------------+ * GM命令处理类相关处理 * @author whjing2012@163.com +-----------------------------------------------------*/ var LoaderManager = require("loadermanager"); var PathTool = require("pathtool"); var StringUtil = require("string_util"); var GmCmd = { getInstance: function getInstance() { return this; }, // 自定义gm命令 cli_cmds: [{ name: "关闭GM", func: function func() { this.show(); } }, { name: "net_ping", func: function func() { if (this.ping_timer_id) { gcore.Timer.del(this.ping_timer_id); this.ping_timer_id = undefined; self.label.string = ""; } else { this.ping_timer_id = gcore.Timer.set(function () { gcore.SmartSocket.send(1198, { time: this.get_ping_time() }); }.bind(this), 1000, -1); } } }, { name: "断网", func: function func() { gcore.SmartSocket.close(); } }, { name: "FPS", func: function func() { cc.debug.setDisplayStats(cc.game.config.showFPS = !cc.game.config.showFPS); } }, { name: "SOCKET", func: function func() { window.SOCKET_LOG = window.SOCKET_LOG == false; } }, { name: "UI调试", func: function func() { this.openDebugUI(); } }, { name: "系统信息", func: function func() { cc.sys.dump(); } }, { name: "在线福利", func: function func() { require("onlinegift_controller").getInstance().openOnlineGiftView(true); } }], // 处理输入信息 handleInput: function handleInput(msg) { if (msg == '') { return; } else if (msg.charAt(0) == "@") { // eval("Log.info("+msg.substr(1)+");"); return; } else if (msg.charAt(0) == ".") { var keys = msg.substr(1).split("."); var o = window; for (var i = 0, n = keys.length; i < n; i++) { o = o[keys[i]]; } Log.info(o); return; } this.saveMsg(msg); gcore.SmartSocket.send(10399, { msg: msg }); }, get_ping_time: function get_ping_time() { return Date.now() % 10000000; }, // 显示gm命令 show: function show() { if (OUT_NET == false && gcore.SysEnv.get("password") == "sszgh5gy") { SHOW_GM = true; } if (SHOW_GM != true) { return; } if (this.root) { this.root.active = this.root.active == false; } else { LoaderManager.getInstance().loadRes(PathTool.getPrefabPath("gm", "gm_panel"), function (res_object) { this.root = res_object; this.root.gm = true; var gm_btn = this.root.getChildByName("gm_btn"); this.input = this.root.getChildByName("editbox").getComponent(cc.EditBox); this.input.maxLength = 300; this.label = this.root.getChildByName("msg").getComponent(cc.RichText); this.root.setPosition(-SCREEN_WIDTH * 0.5, -SCREEN_HEIGHT * 0.5); ViewManager.getInstance().addToSceneNode(this.root, SCENE_TAG.loading); gm_btn.on(cc.Node.EventType.TOUCH_END, function (event) { if (this.move) { this.move = false; return; } if (this.debug_ui && this.debug_ui.active) { this.debug_ui.active = false; this.setDebugUIObjBorder(this.debug_ui_obj1, false); } this.showLayer(); }.bind(this)); gm_btn.on(cc.Node.EventType.TOUCH_MOVE, function (event) { var pos = event.getTouches()[0].getDelta(); this.root.x = this.root.x + pos.x; this.root.y = this.root.y + pos.y; if (pos.x !== 0 && pos.y !== 0) { this.move = true; } }, this); this.input.node.on('editing-did-ended', function () { this.handleInput(this.input.string); }, this); this.cmds = gcore.SysEnv.getObject("gm_cmds").cmds || []; if (this.cmds.length > 0) { this.input.string = this.cmds[this.cmds.length - 1]; } gcore.SmartSocket.bindCmd(10391, this.on10391.bind(this)); gcore.SmartSocket.bindCmd(10399, this.on10399.bind(this)); gcore.SmartSocket.bindCmd(1198, this.on1198.bind(this)); cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this); cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.onKeyUp, this); this.button = this.root.getChildByName("Button"); }.bind(this)); } }, // 显示gm面板 showLayer: function showLayer() { if (this.layer) { this.layer.active = this.layer.active == false; return; } else { this.layer = this.root.getChildByName("layer"); this.layer.active = true; var btn_list = [{ name: "基础功能", list: this.cli_cmds }, { name: "最近使用" }]; if (Config && Config.gm_data) { for (var k in Config.gm_data.data_list) { var v = Config.gm_data.data_list[k]; if (v.is_show == 1) { if (v.list.length == 0) { btn_list.push({ name: v.tips, msg: v.info }); } else { btn_list.push({ name: v.tips, list: v.list }); } } } } this.showGmList(true, btn_list); } }, // 显示下级gm面板 showGmList: function showGmList(btn, btn_list) { if (this.sub_layer && this.sub_layer.active && btn != true && this.sub_layer != btn.layer) { this.sub_layer.active = false; } if (btn == true) { for (var i = 0; i < btn_list.length; i++) { var v = btn_list[i]; this.createGmButton(i, this.layer, v); } } else if (btn.layer) { if (btn.layer.lately) { btn.layer.destroy(); btn.layer = null; this.sub_layer = null; } else { btn.layer.active = btn.layer.active == false; this.sub_layer = btn.layer; } } else { btn.layer = new cc.Node(); this.sub_layer = btn.layer; this.layer.addChild(btn.layer); btn.layer.setAnchorPoint(0, 1); btn.layer.setPosition(0, btn.y - 25); if (!btn_list) { btn.layer.lately = true; btn_list = []; for (var i = 0; i < this.cmds.length; i++) { btn_list.push({ name: this.cmds[i], msg: this.cmds[i] }); } } for (var i = 0; i < btn_list.length; i++) { var v = btn_list[i]; this.createGmButton(i, btn.layer, v, 'common_1018'); } } }, // 创建一个gm按钮 createGmButton: function createGmButton(i, layer, v, res) { if (typeof v == "number") { v = Config.gm_data.data_list[v]; if (v.list.length == 0) { v = { name: v.tips, msg: v.info }; } else { v = { name: v.tips, list: v.list }; } } var btn = this.createButton(v.name, v.func || function (event) { if (v.msg) { gcore.SmartSocket.send(10399, { msg: v.msg }); } else { this.showGmList(event.target, v.list); } }, res); btn.setPosition(i % 4 * 135 + 70, -(parseInt(i / 4) * 65 + 40)); layer.addChild(btn); }, // 键盘按下事件 onKeyDown: function onKeyDown(event) { this.keyCode = event.keyCode; var func = function (time) { if (!this.keyCode || !this.root.active) return; switch (this.keyCode) { case cc.macro.KEY.up: if (this.cmds.length > 1) { this.cmds.unshift(this.cmds.pop()); this.saveMsg(this.cmds.pop()); time = time || 1500; } break; case cc.macro.KEY.down: if (this.cmds.length > 0) { this.saveMsg(this.cmds[0]); time = time || 600; } break; case cc.macro.KEY.enter: this.handleInput(this.input.string); time = null; break; case cc.macro.KEY.a: this.moveDebugUIObjPos(-1, 0); time = time || 100; break; case cc.macro.KEY.d: this.moveDebugUIObjPos(1, 0); time = time || 100; break; case cc.macro.KEY.w: this.moveDebugUIObjPos(0, 1); time = time || 100; break; case cc.macro.KEY.s: this.moveDebugUIObjPos(0, -1); time = time || 100; break; default: time = null; break; } if (time) { gcore.Timer.set(func, time, 1, "gm_cmd_key_timer"); } }.bind(this); func(2000); }, // 键盘释放事件 onKeyUp: function onKeyUp(event) { if (this.keyCode == event.keyCode) { this.keyCode = null; } }, // 协议返回处理 on10391: function on10391(data) { cc.log("DDDDDDDDDDDDDDDDDDD"); cc.log(data); var ret = eval(data.data); if (data.type == 1) { if (_typeof(ret) == 'object') { ret = JSON.stringify(ret); } else { ret = ret + ''; } gcore.SmartSocket.send(10391, { msg: ret }); } }, // gm命令结果 on10399: function on10399(data) { if (data.msg.length < 500) { message(data.msg); } Log.info(data.msg.split("\n")); }, on1198: function on1198(data) { if (this.ping_timer_id) { this.label.string = "time:" + (this.get_ping_time() - data.time) + ",msg_len:" + gcore.SmartSocket.msg_list.length + ""; } }, // 保存信息 saveMsg: function saveMsg(msg) { this.input.string = msg; for (var i = this.cmds.length - 1; i >= 0; i--) { if (this.cmds[i] == msg) { this.cmds.splice(i, 1); } } this.cmds.push(msg); if (this.cmds.length > 20) { this.cmds.shift(); } gcore.SysEnv.setObject("gm_cmds", { cmds: this.cmds }); }, // 创建一个gm按钮 createButton: function createButton(text, func, res) { // var gm_btn = new cc.Node(); // gm_btn.setPosition(0, 0); // var gm_buttom = gm_btn.addComponent(cc.Button); // gm_buttom.target = gm_btn; // gm_buttom.transition = cc.Button.Transition.SCALE; // gm_buttom.duration = 0.1; // gm_buttom.zoomScale = 1.1; // var gm_sprite = gm_btn.addComponent(cc.Sprite); // var frame = COMMON_ATLAS.getSpriteFrame(res || 'common_1017'); // gm_sprite.spriteFrame = frame; // gm_sprite.type = cc.Sprite.Type.SLICED; // var gm_label = this.createLabel(text, new cc.Color(0, 0, 0xff)); // gm_btn.addChild(gm_label); // gm_btn.on(cc.Node.EventType.TOUCH_END, func, this); var gm_btn = cc.instantiate(this.button); gm_btn.active = true; if (res) { // loadermanager var common_res_path = PathTool.getCommonIcomPath(res); LoaderManager.getInstance().loadRes(common_res_path, function (sf_obj) { gm_btn.getComponent(cc.Sprite).spriteFrame = sf_obj; }.bind(this)); } var label = gm_btn.getChildByName("Label").getComponent(cc.Label); label.string = text; gm_btn.on(cc.Node.EventType.TOUCH_END, func, this); return gm_btn; }, // 创建一个Label createLabel: function createLabel(text, color, fontSize) { var node = new cc.Node(); var label = node.addComponent(cc.Label); node.obj = label; label.string = text || ''; label.fontSize = fontSize || 24; node.color = color || new cc.Color(255, 0, 0); return node; }, // DebugUi openDebugUI: function openDebugUI() { this.layer.active = false; if (this.debug_ui) { this.debug_ui.active = this.debug_ui.active == false; this.setDebugUIObjBorder(this.debug_ui_obj1, false); } else { this.debug_ui = this.root.getChildByName("debug_ui"); this.debug_ui.active = true; var o = {}; o.touch = this.debug_ui.getChildByName("touch_node"); o.name = this.debug_ui.getChildByName("name").getChildByName("msg").getComponent(cc.Label); o.type = this.debug_ui.getChildByName("type").getChildByName("msg").getComponent(cc.Label); o.node_w = this.debug_ui.getChildByName("node_w").getChildByName("editbox").getComponent(cc.EditBox); o.node_h = this.debug_ui.getChildByName("node_h").getChildByName("editbox").getComponent(cc.EditBox); o.node_sx = this.debug_ui.getChildByName("node_sx").getChildByName("editbox").getComponent(cc.EditBox); o.node_sy = this.debug_ui.getChildByName("node_sy").getChildByName("editbox").getComponent(cc.EditBox); o.node_ax = this.debug_ui.getChildByName("node_ax").getChildByName("editbox").getComponent(cc.EditBox); o.node_ay = this.debug_ui.getChildByName("node_ay").getChildByName("editbox").getComponent(cc.EditBox); o.node_wx = this.debug_ui.getChildByName("node_wx").getChildByName("editbox").getComponent(cc.EditBox); o.node_wy = this.debug_ui.getChildByName("node_wy").getChildByName("editbox").getComponent(cc.EditBox); o.node_x = this.debug_ui.getChildByName("node_x").getChildByName("editbox").getComponent(cc.EditBox); o.node_y = this.debug_ui.getChildByName("node_y").getChildByName("editbox").getComponent(cc.EditBox); o.node_c_r = this.debug_ui.getChildByName("node_c").getChildByName("editbox_r").getComponent(cc.EditBox); o.node_c_g = this.debug_ui.getChildByName("node_c").getChildByName("editbox_g").getComponent(cc.EditBox); o.node_c_b = this.debug_ui.getChildByName("node_c").getChildByName("editbox_b").getComponent(cc.EditBox); o.node_c_a = this.debug_ui.getChildByName("node_c").getChildByName("editbox_a").getComponent(cc.EditBox); o.show = this.debug_ui.getChildByName("show").getComponent(cc.Toggle); o.child_btn = this.debug_ui.getChildByName("child_btn"); o.parent_btn = this.debug_ui.getChildByName("parent_btn"); o.scroll_content = this.debug_ui.getChildByName("scrollview").getComponent(cc.ScrollView).content; o.scroll_item = o.scroll_content.getChildByName("item"); this.debug_ui_o = o; this.setDebugUIEvt(o); } if (this.debug_ui.active) { this.setDebugUIObj(this.input); } }, setDebugUIEvt: function setDebugUIEvt(o) { // ViewManager.getInstance().getSceneNode(SCENE_TAG.loading).on(cc.Node.EventType.TOUCH_END, function(event){ o.touch.on(cc.Node.EventType.TOUCH_END, function (event) { this.selectDebugUIObj(event.getTouches()[0].getLocation()); }, this); o.show.node.on(cc.Node.EventType.TOUCH_END, function (event) { this.debug_ui_obj1.active = !this.debug_ui_obj1.active; }, this); o.parent_btn.on(cc.Node.EventType.TOUCH_END, function (event) { this.setDebugUIObj(this.debug_ui_obj.node || this.debug_ui_obj.parent); }, this); o.node_w.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.width = Number(o.node_w.string); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_h.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.height = Number(o.node_h.string); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_sx.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.scaleX = Number(o.node_sx.string); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_sy.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.scaleY = Number(o.node_sy.string); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_ax.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.setAnchorPoint(Number(o.node_ax.string), Number(o.node_ay.string)); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_ay.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.setAnchorPoint(Number(o.node_ax.string), Number(o.node_ay.string)); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_x.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.x = Number(o.node_x.string); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_y.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.y = Number(o.node_y.string); this.setDebugUIObjBorder(this.debug_ui_obj1, true); }, this); o.node_c_a.node.on('editing-did-ended', function (event) { this.debug_ui_obj1.opacity = Number(o.node_c_a.string); }, this); o.node_c_r.node.on('editing-did-ended', function (event) { this.setDebugUIObjColor(o); }, this); o.node_c_g.node.on('editing-did-ended', function (event) { this.setDebugUIObjColor(o); }, this); o.node_c_b.node.on('editing-did-ended', function (event) { this.setDebugUIObjColor(o); }, this); }, moveDebugUIObjPos: function moveDebugUIObjPos(x, y) { if (!this.debug_ui || !this.debug_ui.active || !this.debug_ui_obj1) return; this.debug_ui_obj1.setPosition(this.debug_ui_obj1.x + x, this.debug_ui_obj1.y + y); this.setDebugUIObj(this.debug_ui_obj1); }, setDebugUIObjColor: function setDebugUIObjColor(o) { if (this.debug_ui_obj.fontColor) { this.debug_ui_obj.fontColor = new cc.Color(Number(o.node_c_r.string), Number(o.node_c_g.string), Number(o.node_c_b.string)); } else if (this.debug_ui_obj1.color) { this.debug_ui_obj.color = new cc.Color(Number(o.node_c_r.string), Number(o.node_c_g.string), Number(o.node_c_b.string)); } }, setDebugUIObj: function setDebugUIObj(obj) { if (!obj) return; // Log.info("====>>>", obj.w_zIndex); this.setDebugUIObjBorder(this.debug_ui_obj1, false); if (this.debug_ui_obj != obj) { this.updateChildNodes(obj); } this.debug_ui_obj = obj; // Log.info(obj, obj.toString(), obj.__classname__, obj.getClassName); var o = this.debug_ui_o; var obj1 = obj.node || obj; this.debug_ui_obj1 = obj1; var c = obj.fontColor || obj1.color || {}; // Log.info(obj1.anchorX, obj1.anchorY, obj1); o.show.isChecked = obj1.active; o.name.string = obj1._name || obj.name || ""; o.type.string = cc.js.getClassName(obj) || ""; o.node_w.string = obj1.width || 0; o.node_h.string = obj1.height || 0; o.node_sx.string = obj1.scaleX || 0; o.node_sy.string = obj1.scaleY || 0; o.node_ax.string = obj1.anchorX; o.node_ay.string = obj1.anchorY; var pos = this.debug_ui_obj1.convertToWorldSpace(cc.v2(0, 0)); o.node_wx.string = pos.x || 0; o.node_wy.string = pos.y || 0; o.node_x.string = obj1.x || 0; o.node_y.string = obj1.y || 0; o.node_c_r.string = c.getR && c.getR() || 0; o.node_c_g.string = c.getG && c.getG() || 0; o.node_c_b.string = c.getB && c.getB() || 0; o.node_c_a.string = obj1.opacity || 0; this.setDebugUIObjBorder(obj1, true); }, updateChildNodes: function updateChildNodes(obj) { var items = this.debug_ui_items || []; this.debug_ui_items = items; for (var i = 0, n = items.length; i < n; i++) { items[i].active = false; } var y = 0; var id = 0; //Log.info(obj._components, obj.children); var nodes = obj._components || []; for (var _i = 0, _n = nodes.length; _i < _n; _i++) { if (nodes[_i].border) continue; y = this.createDebugUIItem("c", id++, nodes[_i], y); } nodes = obj.children || []; for (var _i2 = 0, _n2 = nodes.length; _i2 < _n2; _i2++) { if (nodes[_i2].border) continue; y = this.createDebugUIItem("n", id++, nodes[_i2], y); } this.debug_ui_o.scroll_content.height = -y; }, createDebugUIItem: function createDebugUIItem(type, i, obj, y) { var item = this.debug_ui_items[i]; if (!item) { item = cc.instantiate(this.debug_ui_o.scroll_item); item.on(cc.Node.EventType.TOUCH_END, function (event) { this.setDebugUIObj(item.o); }, this); this.debug_ui_o.scroll_content.addChild(item); } this.debug_ui_items[i] = item; item.active = true; item.o = obj; var obj1 = obj.node || obj; item.getComponent(cc.Label).string = "[" + type + "]" + (cc.js.getClassName(obj) || "") + "(" + (obj1._name || obj.name || "name") + ")"; item.y = y; //Log.info(item.getComponent(cc.Label).string, i, y); return y - 30; }, setDebugUIObjBorder: function setDebugUIObjBorder(obj, flag) { if (!obj) return; if (flag == false) { if (obj && obj.draw_node) { obj.draw_node.active = false; } return; } if (!obj.draw_node) { obj.draw_node = new cc.Node(); obj.draw_node.border = true; obj.parent.addChild(obj.draw_node); obj.draw_layer = obj.draw_node.addComponent(cc.Graphics); // obj.draw_layer.fillColor = new cc.Color(0, 255, 0); obj.draw_layer.strokeColor = new cc.Color(0, 255, 0); obj.draw_layer.lineWidth = 2; // Log.info(obj.anchorX, obj.anchorY, obj.x, obj.y, obj.width, obj.height, obj.draw_node.anchorX, obj.draw_node.anchorY, obj.parent.anchorX, obj.parent.anchorY); } obj.draw_node.active = true; obj.draw_node.setAnchorPoint(obj.anchorX, obj.anchorY); obj.draw_node.setPosition(obj.x, obj.y); obj.draw_layer.clear(); obj.draw_layer.rect(-obj.width * obj.anchorX, -obj.height * obj.anchorY, obj.width, obj.height); obj.draw_layer.stroke(); //obj.draw_layer.fill(); }, selectDebugUIObj: function selectDebugUIObj(pos) { if (this.debug_ui && this.debug_ui.active) { var newobj = this.matchDebugUIObj(cc.director.getScene(), 1, pos, null, 0); this.setDebugUIObj(newobj); } }, matchDebugUIObj: function matchDebugUIObj(node, n, pos, obj, zindex) { if (n > 100) return obj; // 只处理到一定深度 var nodes = node.children; for (var i = 0, len = nodes.length; i < len; i++) { if (nodes[i].active && !nodes[i].gm) { if (n > 1 && this.hitObj(nodes[i], pos)) { nodes[i].w_zIndex = zindex + i; obj = this.compObj(nodes[i], obj); } obj = this.matchDebugUIObj(nodes[i], n + 1, pos, obj, zindex + i * 100000); } } return obj; }, hitObj: function hitObj(node, pos) { var rect = node.getBoundingBoxToWorld(); return rect.contains(pos); }, compObj: function compObj(obj, obj1) { if (obj.width < 1 || obj.height < 1 || obj.width >= SCREEN_WIDTH || obj.height >= SCREEN_HEIGHT) { return obj1; } else if (!obj1) { return obj; // }else if(obj.w_zIndex > obj1.w_zIndex){ // return obj; } else if (obj.width * obj.height < obj1.width * obj1.height) { return obj; } return obj1; } }; module.exports = GmCmd; cc._RF.pop(); } if (nodeEnv) { __define(__module.exports, __require, __module); } else { __quick_compile_project__.registerModuleFunc(__filename, function () { __define(__module.exports, __require, __module); }); } })(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcY29tbW9uXFxnbWNtZC5qcyJdLCJuYW1lcyI6WyJMb2FkZXJNYW5hZ2VyIiwicmVxdWlyZSIsIlBhdGhUb29sIiwiU3RyaW5nVXRpbCIsIkdtQ21kIiwiZ2V0SW5zdGFuY2UiLCJjbGlfY21kcyIsIm5hbWUiLCJmdW5jIiwic2hvdyIsInBpbmdfdGltZXJfaWQiLCJnY29yZSIsIlRpbWVyIiwiZGVsIiwidW5kZWZpbmVkIiwic2VsZiIsImxhYmVsIiwic3RyaW5nIiwic2V0IiwiU21hcnRTb2NrZXQiLCJzZW5kIiwidGltZSIsImdldF9waW5nX3RpbWUiLCJiaW5kIiwiY2xvc2UiLCJjYyIsImRlYnVnIiwic2V0RGlzcGxheVN0YXRzIiwiZ2FtZSIsImNvbmZpZyIsInNob3dGUFMiLCJ3aW5kb3ciLCJTT0NLRVRfTE9HIiwib3BlbkRlYnVnVUkiLCJzeXMiLCJkdW1wIiwib3Blbk9ubGluZUdpZnRWaWV3IiwiaGFuZGxlSW5wdXQiLCJtc2ciLCJjaGFyQXQiLCJrZXlzIiwic3Vic3RyIiwic3BsaXQiLCJvIiwiaSIsIm4iLCJsZW5ndGgiLCJMb2ciLCJpbmZvIiwic2F2ZU1zZyIsIkRhdGUiLCJub3ciLCJPVVRfTkVUIiwiU3lzRW52IiwiZ2V0IiwiU0hPV19HTSIsInJvb3QiLCJhY3RpdmUiLCJsb2FkUmVzIiwiZ2V0UHJlZmFiUGF0aCIsInJlc19vYmplY3QiLCJnbSIsImdtX2J0biIsImdldENoaWxkQnlOYW1lIiwiaW5wdXQiLCJnZXRDb21wb25lbnQiLCJFZGl0Qm94IiwibWF4TGVuZ3RoIiwiUmljaFRleHQiLCJzZXRQb3NpdGlvbiIsIlNDUkVFTl9XSURUSCIsIlNDUkVFTl9IRUlHSFQiLCJWaWV3TWFuYWdlciIsImFkZFRvU2NlbmVOb2RlIiwiU0NFTkVfVEFHIiwibG9hZGluZyIsIm9uIiwiTm9kZSIsIkV2ZW50VHlwZSIsIlRPVUNIX0VORCIsImV2ZW50IiwibW92ZSIsImRlYnVnX3VpIiwic2V0RGVidWdVSU9iakJvcmRlciIsImRlYnVnX3VpX29iajEiLCJzaG93TGF5ZXIiLCJUT1VDSF9NT1ZFIiwicG9zIiwiZ2V0VG91Y2hlcyIsImdldERlbHRhIiwieCIsInkiLCJub2RlIiwiY21kcyIsImdldE9iamVjdCIsImJpbmRDbWQiLCJvbjEwMzkxIiwib24xMDM5OSIsIm9uMTE5OCIsInN5c3RlbUV2ZW50IiwiU3lzdGVtRXZlbnQiLCJLRVlfRE9XTiIsIm9uS2V5RG93biIsIktFWV9VUCIsIm9uS2V5VXAiLCJidXR0b24iLCJsYXllciIsImJ0bl9saXN0IiwibGlzdCIsIkNvbmZpZyIsImdtX2RhdGEiLCJrIiwiZGF0YV9saXN0IiwidiIsImlzX3Nob3ciLCJwdXNoIiwidGlwcyIsInNob3dHbUxpc3QiLCJidG4iLCJzdWJfbGF5ZXIiLCJjcmVhdGVHbUJ1dHRvbiIsImxhdGVseSIsImRlc3Ryb3kiLCJhZGRDaGlsZCIsInNldEFuY2hvclBvaW50IiwicmVzIiwiY3JlYXRlQnV0dG9uIiwidGFyZ2V0IiwicGFyc2VJbnQiLCJrZXlDb2RlIiwibWFjcm8iLCJLRVkiLCJ1cCIsInVuc2hpZnQiLCJwb3AiLCJkb3duIiwiZW50ZXIiLCJhIiwibW92ZURlYnVnVUlPYmpQb3MiLCJkIiwidyIsInMiLCJkYXRhIiwibG9nIiwicmV0IiwiZXZhbCIsInR5cGUiLCJKU09OIiwic3RyaW5naWZ5IiwibWVzc2FnZSIsIm1zZ19saXN0Iiwic3BsaWNlIiwic2hpZnQiLCJzZXRPYmplY3QiLCJ0ZXh0IiwiaW5zdGFudGlhdGUiLCJjb21tb25fcmVzX3BhdGgiLCJnZXRDb21tb25JY29tUGF0aCIsInNmX29iaiIsIlNwcml0ZSIsInNwcml0ZUZyYW1lIiwiTGFiZWwiLCJjcmVhdGVMYWJlbCIsImNvbG9yIiwiZm9udFNpemUiLCJhZGRDb21wb25lbnQiLCJvYmoiLCJDb2xvciIsInRvdWNoIiwibm9kZV93Iiwibm9kZV9oIiwibm9kZV9zeCIsIm5vZGVfc3kiLCJub2RlX2F4Iiwibm9kZV9heSIsIm5vZGVfd3giLCJub2RlX3d5Iiwibm9kZV94Iiwibm9kZV95Iiwibm9kZV9jX3IiLCJub2RlX2NfZyIsIm5vZGVfY19iIiwibm9kZV9jX2EiLCJUb2dnbGUiLCJjaGlsZF9idG4iLCJwYXJlbnRfYnRuIiwic2Nyb2xsX2NvbnRlbnQiLCJTY3JvbGxWaWV3IiwiY29udGVudCIsInNjcm9sbF9pdGVtIiwiZGVidWdfdWlfbyIsInNldERlYnVnVUlFdnQiLCJzZXREZWJ1Z1VJT2JqIiwic2VsZWN0RGVidWdVSU9iaiIsImdldExvY2F0aW9uIiwiZGVidWdfdWlfb2JqIiwicGFyZW50Iiwid2lkdGgiLCJOdW1iZXIiLCJoZWlnaHQiLCJzY2FsZVgiLCJzY2FsZVkiLCJvcGFjaXR5Iiwic2V0RGVidWdVSU9iakNvbG9yIiwiZm9udENvbG9yIiwidXBkYXRlQ2hpbGROb2RlcyIsIm9iajEiLCJjIiwiaXNDaGVja2VkIiwiX25hbWUiLCJqcyIsImdldENsYXNzTmFtZSIsImFuY2hvclgiLCJhbmNob3JZIiwiY29udmVydFRvV29ybGRTcGFjZSIsInYyIiwiZ2V0UiIsImdldEciLCJnZXRCIiwiaXRlbXMiLCJkZWJ1Z191aV9pdGVtcyIsImlkIiwibm9kZXMiLCJfY29tcG9uZW50cyIsImJvcmRlciIsImNyZWF0ZURlYnVnVUlJdGVtIiwiY2hpbGRyZW4iLCJpdGVtIiwiZmxhZyIsImRyYXdfbm9kZSIsImRyYXdfbGF5ZXIiLCJHcmFwaGljcyIsInN0cm9rZUNvbG9yIiwibGluZVdpZHRoIiwiY2xlYXIiLCJyZWN0Iiwic3Ryb2tlIiwibmV3b2JqIiwibWF0Y2hEZWJ1Z1VJT2JqIiwiZGlyZWN0b3IiLCJnZXRTY2VuZSIsInppbmRleCIsImxlbiIsImhpdE9iaiIsIndfekluZGV4IiwiY29tcE9iaiIsImdldEJvdW5kaW5nQm94VG9Xb3JsZCIsImNvbnRhaW5zIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBSUMsSUFBSUEsYUFBYSxHQUFHQyxPQUFPLENBQUMsZUFBRCxDQUEz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OztBQUNELFdBQU8wSCxHQUFQO0FBQ0gsR0E3a0JPO0FBK2tCUjZFLEVBQUFBLE1BQU0sRUFBRyxnQkFBU3ZKLElBQVQsRUFBZUwsR0FBZixFQUFtQjtBQUN4QixRQUFJb0osSUFBSSxHQUFHL0ksSUFBSSxDQUFDMEoscUJBQUwsRUFBWDtBQUNBLFdBQU9YLElBQUksQ0FBQ1ksUUFBTCxDQUFjaEssR0FBZCxDQUFQO0FBQ0gsR0FsbEJPO0FBb2xCUjhKLEVBQUFBLE9BQU8sRUFBRyxpQkFBUy9FLEdBQVQsRUFBY3dDLElBQWQsRUFBbUI7QUFDekIsUUFBR3hDLEdBQUcsQ0FBQytCLEtBQUosR0FBWSxDQUFaLElBQWlCL0IsR0FBRyxDQUFDaUMsTUFBSixHQUFhLENBQTlCLElBQW1DakMsR0FBRyxDQUFDK0IsS0FBSixJQUFhL0gsWUFBaEQsSUFBZ0VnRyxHQUFHLENBQUNpQyxNQUFKLElBQWNoSSxhQUFqRixFQUErRjtBQUMzRixhQUFPdUksSUFBUDtBQUNILEtBRkQsTUFFTSxJQUFHLENBQUNBLElBQUosRUFBUztBQUNYLGFBQU94QyxHQUFQLENBRFcsQ0FFZjtBQUNBO0FBQ0MsS0FKSyxNQUlBLElBQUdBLEdBQUcsQ0FBQytCLEtBQUosR0FBWS9CLEdBQUcsQ0FBQ2lDLE1BQWhCLEdBQXlCTyxJQUFJLENBQUNULEtBQUwsR0FBYVMsSUFBSSxDQUFDUCxNQUE5QyxFQUFxRDtBQUN2RCxhQUFPakMsR0FBUDtBQUNIOztBQUNELFdBQU93QyxJQUFQO0FBQ0g7QUEvbEJPLENBQVo7QUFrbUJBMEMsTUFBTSxDQUFDQyxPQUFQLEdBQWlCclAsS0FBakIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gKiBHTeWRveS7pOWkhOeQhuexu+ebuOWFs+WkhOeQhlxuICogQGF1dGhvciB3aGppbmcyMDEyQDE2My5jb21cbiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuIHZhciBMb2FkZXJNYW5hZ2VyID0gcmVxdWlyZShcImxvYWRlcm1hbmFnZXJcIik7XG4gdmFyIFBhdGhUb29sID0gcmVxdWlyZShcInBhdGh0b29sXCIpO1xuIHZhciBTdHJpbmdVdGlsID0gcmVxdWlyZShcInN0cmluZ191dGlsXCIpO1xuXG52YXIgR21DbWQgPSB7XG4gICAgZ2V0SW5zdGFuY2UgOiBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLy8g6Ieq5a6a5LmJZ23lkb3ku6QgXG4gICAgY2xpX2NtZHMgOiBbXG4gICAgICAgIHtuYW1lOlwi5YWz6ZetR01cIiwgZnVuYzpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH19XG4gICAgICAgICx7bmFtZTpcIm5ldF9waW5nXCIsIGZ1bmM6ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGlmKHRoaXMucGluZ190aW1lcl9pZCl7XG4gICAgICAgICAgICAgICAgZ2NvcmUuVGltZXIuZGVsKHRoaXMucGluZ190aW1lcl9pZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5waW5nX3RpbWVyX2lkID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHNlbGYubGFiZWwuc3RyaW5nID0gXCJcIjtcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIHRoaXMucGluZ190aW1lcl9pZCA9IGdjb3JlLlRpbWVyLnNldCgoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgZ2NvcmUuU21hcnRTb2NrZXQuc2VuZCgxMTk4LCB7dGltZSA6IHRoaXMuZ2V0X3BpbmdfdGltZSgpfSk7XG4gICAgICAgICAgICAgICAgfSkuYmluZCh0aGlzKSwgMTAwMCwgLTEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICAse25hbWU6XCLmlq3nvZFcIiwgZnVuYzpmdW5jdGlvbigpe1xuICAgICAgICAgICAgZ2NvcmUuU21hcnRTb2NrZXQuY2xvc2UoKTtcbiAgICAgICAgfX1cbiAgICAgICAgLHtuYW1lOlwiRlBTXCIsIGZ1bmM6ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIGNjLmRlYnVnLnNldERpc3BsYXlTdGF0cyhjYy5nYW1lLmNvbmZpZy5zaG93RlBTID0gIWNjLmdhbWUuY29uZmlnLnNob3dGUFMpO1xuICAgICAgICB9fVxuICAgICAgICAse25hbWU6XCJTT0NLRVRcIiwgZnVuYzpmdW5jdGlvbigpe1xuICAgICAgICAgICAgd2luZG93LlNPQ0tFVF9MT0cgPSB3aW5kb3cuU09DS0VUX0xPRyA9PSBmYWxzZTtcbiAgICAgICAgfX1cbiAgICAgICAgLHtuYW1lOlwiVUnosIPor5VcIiwgZnVuYzpmdW5jdGlvbigpe1xuICAgICAgICAgICAgdGhpcy5vcGVuRGVidWdVSSgpO1xuICAgICAgICB9fVxuICAgICAgICAse25hbWU6XCLns7vnu5/kv6Hmga9cIiwgZnVuYzpmdW5jdGlvbigpe1xuICAgICAgICAgICAgY2Muc3lzLmR1bXAoKTtcbiAgICAgICAgfX1cbiAgICAgICAgLHtuYW1lOlwi5Zyo57q/56aP5YipXCIsIGZ1bmM6ZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHJlcXVpcmUoXCJvbmxpbmVnaWZ0X2NvbnRyb2xsZXJcIikuZ2V0SW5zdGFuY2UoKS5vcGVuT25saW5lR2lmdFZpZXcodHJ1ZSk7XG4gICAgICAgIH19XG4gICAgXSxcblxuICAgIC8vIOWkhOeQhui+k+WFpeS/oeaBr1xuICAgIGhhbmRsZUlucHV0IDogZnVuY3Rpb24obXNnKXtcbiAgICAgICAgaWYobXNnID09ICcnKXtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfWVsc2UgaWYobXNnLmNoYXJBdCgwKSA9PSBcIkBcIil7XG4gICAgICAgICAgICAvLyBldmFsKFwiTG9nLmluZm8oXCIrbXNnLnN1YnN0cigxKStcIik7XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9ZWxzZSBpZihtc2cuY2hhckF0KDApID09IFwiLlwiKXtcbiAgICAgICAgICAgIHZhciBrZXlzID0gbXNnLnN1YnN0cigxKS5zcGxpdChcIi5cIik7XG4gICAgICAgICAgICB2YXIgbyA9IHdpbmRvdztcbiAgICAgICAgICAgIGZvcihsZXQgaT0wLG49a2V5cy5sZW5ndGg7IGk8bjsgaSsrKXtcbiAgICAgICAgICAgICAgICBvID0gb1trZXlzW2ldXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIExvZy5pbmZvKG8pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2F2ZU1zZyhtc2cpO1xuICAgICAgICBnY29yZS5TbWFydFNvY2tldC5zZW5kKDEwMzk5LCB7bXNnOm1zZ30pO1xuICAgIH0sXG5cbiAgICBnZXRfcGluZ190aW1lIDogZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIERhdGUubm93KCkgJSAxMDAwMDAwMDtcbiAgICB9LFxuXG4gICAgLy8g5pi+56S6Z23lkb3ku6RcbiAgICBzaG93IDogZnVuY3Rpb24oKXtcbiAgICAgICAgaWYoT1VUX05FVCA9PSBmYWxzZSAmJiBnY29yZS5TeXNFbnYuZ2V0KFwicGFzc3dvcmRcIikgPT0gXCJzc3pnaDVneVwiKXtcbiAgICAgICAgICAgIFNIT1dfR00gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmKFNIT1dfR00gIT0gdHJ1ZSl7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5yb290KXtcbiAgICAgICAgICAgIHRoaXMucm9vdC5hY3RpdmUgPSAodGhpcy5yb290LmFjdGl2ZSA9PSBmYWxzZSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgTG9hZGVyTWFuYWdlci5nZXRJbnN0YW5jZSgpLmxvYWRSZXMoUGF0aFRvb2wuZ2V0UHJlZmFiUGF0aChcImdtXCIsIFwiZ21fcGFuZWxcIiksIChmdW5jdGlvbihyZXNfb2JqZWN0KXtcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3QgPSByZXNfb2JqZWN0O1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdC5nbSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICB2YXIgZ21fYnRuID0gdGhpcy5yb290LmdldENoaWxkQnlOYW1lKFwiZ21fYnRuXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLnJvb3QuZ2V0Q2hpbGRCeU5hbWUoXCJlZGl0Ym94XCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm1heExlbmd0aCA9IDMwMDtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsID0gdGhpcy5yb290LmdldENoaWxkQnlOYW1lKFwibXNnXCIpLmdldENvbXBvbmVudChjYy5SaWNoVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290LnNldFBvc2l0aW9uKC1TQ1JFRU5fV0lEVEgqMC41LCAtU0NSRUVOX0hFSUdIVCowLjUpXG4gICAgICAgICAgICAgICAgVmlld01hbmFnZXIuZ2V0SW5zdGFuY2UoKS5hZGRUb1NjZW5lTm9kZSh0aGlzLnJvb3QsIFNDRU5FX1RBRy5sb2FkaW5nKTtcbiAgICAgICAgICAgICAgICBnbV9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCAoZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLm1vdmUpe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnX3VpICYmIHRoaXMuZGVidWdfdWkuYWN0aXZlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGVidWdfdWkuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpCb3JkZXIodGhpcy5kZWJ1Z191aV9vYmoxLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93TGF5ZXIoKTtcbiAgICAgICAgICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICBnbV9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfTU9WRSwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zID0gZXZlbnQuZ2V0VG91Y2hlcygpWzBdLmdldERlbHRhKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdC54ID0gdGhpcy5yb290LnggKyBwb3MueDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290LnkgPSB0aGlzLnJvb3QueSArIHBvcy55O1xuICAgICAgICAgICAgICAgICAgICBpZiAocG9zLnggIT09IDAgJiYgcG9zLnkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm5vZGUub24oJ2VkaXRpbmctZGlkLWVuZGVkJywgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVJbnB1dCh0aGlzLmlucHV0LnN0cmluZyk7XG4gICAgICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbWRzID0gZ2NvcmUuU3lzRW52LmdldE9iamVjdChcImdtX2NtZHNcIikuY21kcyB8fCBbXTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmNtZHMubGVuZ3RoID4gMCl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQuc3RyaW5nID0gdGhpcy5jbWRzW3RoaXMuY21kcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ2NvcmUuU21hcnRTb2NrZXQuYmluZENtZCgxMDM5MSwgdGhpcy5vbjEwMzkxLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIGdjb3JlLlNtYXJ0U29ja2V0LmJpbmRDbWQoMTAzOTksIHRoaXMub24xMDM5OS5iaW5kKHRoaXMpKTtcbiAgICAgICAgICAgICAgICBnY29yZS5TbWFydFNvY2tldC5iaW5kQ21kKDExOTgsIHRoaXMub24xMTk4LmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgIGNjLnN5c3RlbUV2ZW50Lm9uKGNjLlN5c3RlbUV2ZW50LkV2ZW50VHlwZS5LRVlfRE9XTiwgdGhpcy5vbktleURvd24sIHRoaXMpOyBcbiAgICAgICAgICAgICAgICBjYy5zeXN0ZW1FdmVudC5vbihjYy5TeXN0ZW1FdmVudC5FdmVudFR5cGUuS0VZX1VQLCB0aGlzLm9uS2V5VXAsIHRoaXMpOyBcblxuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uID0gdGhpcy5yb290LmdldENoaWxkQnlOYW1lKFwiQnV0dG9uXCIpXG4gICAgICAgICAgICB9KS5iaW5kKHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmmL7npLpnbemdouadv1xuICAgIHNob3dMYXllciA6IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmKHRoaXMubGF5ZXIpe1xuICAgICAgICAgICAgdGhpcy5sYXllci5hY3RpdmUgPSB0aGlzLmxheWVyLmFjdGl2ZSA9PSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmxheWVyID0gdGhpcy5yb290LmdldENoaWxkQnlOYW1lKFwibGF5ZXJcIik7XG4gICAgICAgICAgICB0aGlzLmxheWVyLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB2YXIgYnRuX2xpc3QgPSBbe25hbWU6XCLln7rnoYDlip/og71cIiwgbGlzdDp0aGlzLmNsaV9jbWRzfSwge25hbWU6XCLmnIDov5Hkvb/nlKhcIn1dO1xuICAgICAgICAgICAgaWYoQ29uZmlnICYmIENvbmZpZy5nbV9kYXRhKXtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGsgaW4gQ29uZmlnLmdtX2RhdGEuZGF0YV9saXN0KXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHYgPSBDb25maWcuZ21fZGF0YS5kYXRhX2xpc3Rba107XG4gICAgICAgICAgICAgICAgICAgIGlmKHYuaXNfc2hvdyA9PSAxKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHYubGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuX2xpc3QucHVzaCh7bmFtZTp2LnRpcHMsIG1zZzp2LmluZm99KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bl9saXN0LnB1c2goe25hbWU6di50aXBzLCBsaXN0OnYubGlzdH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zaG93R21MaXN0KHRydWUsIGJ0bl9saXN0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDmmL7npLrkuIvnuqdnbemdouadv1xuICAgIHNob3dHbUxpc3QgOiBmdW5jdGlvbihidG4sIGJ0bl9saXN0KXtcbiAgICAgICAgaWYodGhpcy5zdWJfbGF5ZXIgJiYgdGhpcy5zdWJfbGF5ZXIuYWN0aXZlICYmIGJ0biAhPSB0cnVlICYmIHRoaXMuc3ViX2xheWVyICE9IGJ0bi5sYXllcil7XG4gICAgICAgICAgICB0aGlzLnN1Yl9sYXllci5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZihidG4gPT0gdHJ1ZSl7XG4gICAgICAgICAgICBmb3IodmFyIGk9MDsgaTxidG5fbGlzdC5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgdmFyIHYgPSBidG5fbGlzdFtpXTtcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUdtQnV0dG9uKGksIHRoaXMubGF5ZXIsIHYpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNlIGlmKGJ0bi5sYXllcil7XG4gICAgICAgICAgICBpZihidG4ubGF5ZXIubGF0ZWx5KXtcbiAgICAgICAgICAgICAgICBidG4ubGF5ZXIuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIGJ0bi5sYXllciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJfbGF5ZXIgPSBudWxsO1xuICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgYnRuLmxheWVyLmFjdGl2ZSA9IGJ0bi5sYXllci5hY3RpdmUgPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJfbGF5ZXIgPSBidG4ubGF5ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgYnRuLmxheWVyID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgICAgIHRoaXMuc3ViX2xheWVyID0gYnRuLmxheWVyO1xuICAgICAgICAgICAgdGhpcy5sYXllci5hZGRDaGlsZChidG4ubGF5ZXIpO1xuICAgICAgICAgICAgYnRuLmxheWVyLnNldEFuY2hvclBvaW50KDAsIDEpO1xuICAgICAgICAgICAgYnRuLmxheWVyLnNldFBvc2l0aW9uKDAsIGJ0bi55LTI1KTtcbiAgICAgICAgICAgIGlmKCFidG5fbGlzdCl7XG4gICAgICAgICAgICAgICAgYnRuLmxheWVyLmxhdGVseSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnRuX2xpc3QgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IodmFyIGk9MDsgaTx0aGlzLmNtZHMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICBidG5fbGlzdC5wdXNoKHtuYW1lOnRoaXMuY21kc1tpXSwgbXNnOnRoaXMuY21kc1tpXX0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPGJ0bl9saXN0Lmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IGJ0bl9saXN0W2ldO1xuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlR21CdXR0b24oaSwgYnRuLmxheWVyLCB2LCAnY29tbW9uXzEwMTgnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDliJvlu7rkuIDkuKpnbeaMiemSrlxuICAgIGNyZWF0ZUdtQnV0dG9uIDogZnVuY3Rpb24oaSwgbGF5ZXIsIHYsIHJlcyl7XG4gICAgICAgIGlmKHR5cGVvZiB2ID09IFwibnVtYmVyXCIpe1xuICAgICAgICAgICAgdiA9IENvbmZpZy5nbV9kYXRhLmRhdGFfbGlzdFt2XTtcbiAgICAgICAgICAgIGlmKHYubGlzdC5sZW5ndGggPT0gMCl7XG4gICAgICAgICAgICAgICAgdiA9IHtuYW1lOnYudGlwcywgbXNnOnYuaW5mb307XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB2ID0ge25hbWU6di50aXBzLCBsaXN0OnYubGlzdH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJ0biA9IHRoaXMuY3JlYXRlQnV0dG9uKHYubmFtZSwgdi5mdW5jIHx8IGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIGlmKHYubXNnKXtcbiAgICAgICAgICAgICAgICBnY29yZS5TbWFydFNvY2tldC5zZW5kKDEwMzk5LCB7bXNnOnYubXNnfSk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dHbUxpc3QoZXZlbnQudGFyZ2V0LCB2Lmxpc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCByZXMpO1xuICAgICAgICBidG4uc2V0UG9zaXRpb24oaSAlIDQgKiAxMzUgKyA3MCwgLShwYXJzZUludChpIC8gNCkgKiA2NSArIDQwKSk7XG4gICAgICAgIGxheWVyLmFkZENoaWxkKGJ0bik7XG4gICAgfSxcblxuICAgIC8vIOmUruebmOaMieS4i+S6i+S7tlxuICAgIG9uS2V5RG93biA6IGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgdGhpcy5rZXlDb2RlID0gZXZlbnQua2V5Q29kZTtcbiAgICAgICAgdmFyIGZ1bmMgPSAoZnVuY3Rpb24odGltZSl7XG4gICAgICAgICAgICBpZighdGhpcy5rZXlDb2RlIHx8ICF0aGlzLnJvb3QuYWN0aXZlKSByZXR1cm47XG4gICAgICAgICAgICBzd2l0Y2godGhpcy5rZXlDb2RlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBjYy5tYWNyby5LRVkudXA6XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY21kcy5sZW5ndGggPiAxKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY21kcy51bnNoaWZ0KHRoaXMuY21kcy5wb3AoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNhdmVNc2codGhpcy5jbWRzLnBvcCgpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgPSB0aW1lIHx8IDE1MDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBjYy5tYWNyby5LRVkuZG93bjpcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jbWRzLmxlbmd0aCA+IDApe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlTXNnKHRoaXMuY21kc1swXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lID0gdGltZSB8fCA2MDA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBjYy5tYWNyby5LRVkuZW50ZXI6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlSW5wdXQodGhpcy5pbnB1dC5zdHJpbmcpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBjYy5tYWNyby5LRVkuYSA6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW92ZURlYnVnVUlPYmpQb3MoLTEsIDApO1xuICAgICAgICAgICAgICAgICAgICB0aW1lID0gdGltZSB8fCAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgY2MubWFjcm8uS0VZLmQgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVEZWJ1Z1VJT2JqUG9zKDEsIDApO1xuICAgICAgICAgICAgICAgICAgICB0aW1lID0gdGltZSB8fCAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgY2MubWFjcm8uS0VZLncgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVEZWJ1Z1VJT2JqUG9zKDAsIDEpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lID0gdGltZSB8fCAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgY2MubWFjcm8uS0VZLnMgOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vdmVEZWJ1Z1VJT2JqUG9zKDAsIC0xKTtcbiAgICAgICAgICAgICAgICAgICAgdGltZSA9IHRpbWUgfHwgMTAwO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aW1lID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih0aW1lKXtcbiAgICAgICAgICAgICAgICBnY29yZS5UaW1lci5zZXQoZnVuYywgdGltZSwgMSwgXCJnbV9jbWRfa2V5X3RpbWVyXCIpO1xuICAgICAgICAgICAgfSBcbiAgICAgICAgfSkuYmluZCh0aGlzKTtcbiAgICAgICAgZnVuYygyMDAwKTtcbiAgICB9LFxuXG4gICAgLy8g6ZSu55uY6YeK5pS+5LqL5Lu2XG4gICAgb25LZXlVcCA6IGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgaWYodGhpcy5rZXlDb2RlID09IGV2ZW50LmtleUNvZGUpe1xuICAgICAgICAgICAgdGhpcy5rZXlDb2RlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDljY/orq7ov5Tlm57lpITnkIZcbiAgICBvbjEwMzkxIDogZnVuY3Rpb24oZGF0YSl7XG5cbiAgICAgICAgY2MubG9nKFwiRERERERERERERERERERERERERFwiKTtcbiAgICAgICAgY2MubG9nKGRhdGEpO1xuXG4gICAgICAgIHZhciByZXQgPSBldmFsKGRhdGEuZGF0YSk7XG4gICAgICAgIGlmKGRhdGEudHlwZSA9PSAxKXtcbiAgICAgICAgICAgIGlmKHR5cGVvZiByZXQgPT0gJ29iamVjdCcpe1xuICAgICAgICAgICAgICAgIHJldCA9IEpTT04uc3RyaW5naWZ5KHJldCk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICByZXQgPSByZXQgKyAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdjb3JlLlNtYXJ0U29ja2V0LnNlbmQoMTAzOTEsIHttc2c6cmV0fSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gZ23lkb3ku6Tnu5PmnpwgXG4gICAgb24xMDM5OSA6IGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBpZihkYXRhLm1zZy5sZW5ndGggPCA1MDApe1xuICAgICAgICAgICAgbWVzc2FnZShkYXRhLm1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgTG9nLmluZm8oZGF0YS5tc2cuc3BsaXQoXCJcXG5cIikpO1xuICAgIH0sXG5cbiAgICBvbjExOTggOiBmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgaWYodGhpcy5waW5nX3RpbWVyX2lkKXtcbiAgICAgICAgICAgIHRoaXMubGFiZWwuc3RyaW5nID0gXCJ0aW1lOjxjb2xvcj0jMDBmZjAwPlwiICsgKHRoaXMuZ2V0X3BpbmdfdGltZSgpIC0gZGF0YS50aW1lKSArIFwiPC9jb2xvcj4sbXNnX2xlbjo8Y29sb3I9IzAwZmYwMD5cIiArIGdjb3JlLlNtYXJ0U29ja2V0Lm1zZ19saXN0Lmxlbmd0aCArIFwiPC9jb2xvcj5cIjtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyDkv53lrZjkv6Hmga9cbiAgICBzYXZlTXNnIDogZnVuY3Rpb24obXNnKXtcbiAgICAgICAgdGhpcy5pbnB1dC5zdHJpbmcgPSBtc2c7XG4gICAgICAgIGZvcih2YXIgaSA9IHRoaXMuY21kcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG4gICAgICAgICAgICBpZih0aGlzLmNtZHNbaV0gPT0gbXNnKXtcbiAgICAgICAgICAgICAgICB0aGlzLmNtZHMuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY21kcy5wdXNoKG1zZyk7XG4gICAgICAgIGlmKHRoaXMuY21kcy5sZW5ndGggPiAyMCl7XG4gICAgICAgICAgICB0aGlzLmNtZHMuc2hpZnQoKTtcbiAgICAgICAgfVxuICAgICAgICBnY29yZS5TeXNFbnYuc2V0T2JqZWN0KFwiZ21fY21kc1wiLCB7Y21kczp0aGlzLmNtZHN9KTtcbiAgICB9LFxuXG4gICAgLy8g5Yib5bu65LiA5LiqZ23mjInpkq5cbiAgICBjcmVhdGVCdXR0b24gOiBmdW5jdGlvbih0ZXh0LCBmdW5jLCByZXMpe1xuICAgICAgICAvLyB2YXIgZ21fYnRuID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgLy8gZ21fYnRuLnNldFBvc2l0aW9uKDAsIDApO1xuICAgICAgICAvLyB2YXIgZ21fYnV0dG9tID0gZ21fYnRuLmFkZENvbXBvbmVudChjYy5CdXR0b24pO1xuICAgICAgICAvLyBnbV9idXR0b20udGFyZ2V0ID0gZ21fYnRuO1xuICAgICAgICAvLyBnbV9idXR0b20udHJhbnNpdGlvbiA9IGNjLkJ1dHRvbi5UcmFuc2l0aW9uLlNDQUxFO1xuICAgICAgICAvLyBnbV9idXR0b20uZHVyYXRpb24gPSAwLjE7XG4gICAgICAgIC8vIGdtX2J1dHRvbS56b29tU2NhbGUgPSAxLjE7XG4gICAgICAgIC8vIHZhciBnbV9zcHJpdGUgPSBnbV9idG4uYWRkQ29tcG9uZW50KGNjLlNwcml0ZSk7XG4gICAgICAgIC8vIHZhciBmcmFtZSA9IENPTU1PTl9BVExBUy5nZXRTcHJpdGVGcmFtZShyZXMgfHwgJ2NvbW1vbl8xMDE3Jyk7XG4gICAgICAgIC8vIGdtX3Nwcml0ZS5zcHJpdGVGcmFtZSA9IGZyYW1lO1xuICAgICAgICAvLyBnbV9zcHJpdGUudHlwZSA9IGNjLlNwcml0ZS5UeXBlLlNMSUNFRDtcbiAgICAgICAgLy8gdmFyIGdtX2xhYmVsID0gdGhpcy5jcmVhdGVMYWJlbCh0ZXh0LCBuZXcgY2MuQ29sb3IoMCwgMCwgMHhmZikpO1xuICAgICAgICAvLyBnbV9idG4uYWRkQ2hpbGQoZ21fbGFiZWwpO1xuICAgICAgICAvLyBnbV9idG4ub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jLCB0aGlzKTtcblxuICAgICAgICB2YXIgZ21fYnRuID0gY2MuaW5zdGFudGlhdGUodGhpcy5idXR0b24pXG4gICAgICAgIGdtX2J0bi5hY3RpdmUgPSB0cnVlXG4gICAgICAgIGlmKHJlcyl7XG4gICAgICAgICAgICAvLyBsb2FkZXJtYW5hZ2VyXG4gICAgICAgICAgICB2YXIgY29tbW9uX3Jlc19wYXRoID0gUGF0aFRvb2wuZ2V0Q29tbW9uSWNvbVBhdGgocmVzKTtcbiAgICAgICAgICAgIExvYWRlck1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5sb2FkUmVzKGNvbW1vbl9yZXNfcGF0aCwgZnVuY3Rpb24oc2Zfb2JqKXtcbiAgICAgICAgICAgICAgICBnbV9idG4uZ2V0Q29tcG9uZW50KGNjLlNwcml0ZSkuc3ByaXRlRnJhbWUgPSBzZl9vYmo7XG4gICAgICAgICAgICB9LmJpbmQodGhpcykpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGxhYmVsID0gZ21fYnRuLmdldENoaWxkQnlOYW1lKFwiTGFiZWxcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKVxuICAgICAgICBsYWJlbC5zdHJpbmcgPSB0ZXh0XG4gICAgICAgIGdtX2J0bi5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmMsIHRoaXMpO1xuICAgICAgICByZXR1cm4gZ21fYnRuO1xuICAgIH0sXG5cbiAgICAvLyDliJvlu7rkuIDkuKpMYWJlbFxuICAgIGNyZWF0ZUxhYmVsIDogZnVuY3Rpb24odGV4dCwgY29sb3IsIGZvbnRTaXplKXtcbiAgICAgICAgdmFyIG5vZGUgPSBuZXcgY2MuTm9kZSgpO1xuICAgICAgICB2YXIgbGFiZWwgPSBub2RlLmFkZENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgIG5vZGUub2JqID0gbGFiZWw7XG4gICAgICAgIGxhYmVsLnN0cmluZyA9IHRleHQgfHwgJyc7XG4gICAgICAgIGxhYmVsLmZvbnRTaXplID0gZm9udFNpemUgfHwgMjQ7XG4gICAgICAgIG5vZGUuY29sb3IgPSBjb2xvciB8fCBuZXcgY2MuQ29sb3IoMjU1LCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcblxuICAgIC8vIERlYnVnVWlcbiAgICBvcGVuRGVidWdVSSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgIHRoaXMubGF5ZXIuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmKHRoaXMuZGVidWdfdWkpe1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z191aS5hY3RpdmUgPSB0aGlzLmRlYnVnX3VpLmFjdGl2ZSA9PSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVidWdVSU9iakJvcmRlcih0aGlzLmRlYnVnX3VpX29iajEsIGZhbHNlKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpID0gdGhpcy5yb290LmdldENoaWxkQnlOYW1lKFwiZGVidWdfdWlcIik7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICB2YXIgbyA9IHt9O1xuICAgICAgICAgICAgby50b3VjaCA9IHRoaXMuZGVidWdfdWkuZ2V0Q2hpbGRCeU5hbWUoXCJ0b3VjaF9ub2RlXCIpO1xuICAgICAgICAgICAgby5uYW1lID0gdGhpcy5kZWJ1Z191aS5nZXRDaGlsZEJ5TmFtZShcIm5hbWVcIikuZ2V0Q2hpbGRCeU5hbWUoXCJtc2dcIikuZ2V0Q29tcG9uZW50KGNjLkxhYmVsKTtcbiAgICAgICAgICAgIG8udHlwZSA9IHRoaXMuZGVidWdfdWkuZ2V0Q2hpbGRCeU5hbWUoXCJ0eXBlXCIpLmdldENoaWxkQnlOYW1lKFwibXNnXCIpLmdldENvbXBvbmVudChjYy5MYWJlbCk7XG4gICAgICAgICAgICBvLm5vZGVfdyA9IHRoaXMuZGVidWdfdWkuZ2V0Q2hpbGRCeU5hbWUoXCJub2RlX3dcIikuZ2V0Q2hpbGRCeU5hbWUoXCJlZGl0Ym94XCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8ubm9kZV9oID0gdGhpcy5kZWJ1Z191aS5nZXRDaGlsZEJ5TmFtZShcIm5vZGVfaFwiKS5nZXRDaGlsZEJ5TmFtZShcImVkaXRib3hcIikuZ2V0Q29tcG9uZW50KGNjLkVkaXRCb3gpO1xuICAgICAgICAgICAgby5ub2RlX3N4ID0gdGhpcy5kZWJ1Z191aS5nZXRDaGlsZEJ5TmFtZShcIm5vZGVfc3hcIikuZ2V0Q2hpbGRCeU5hbWUoXCJlZGl0Ym94XCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8ubm9kZV9zeSA9IHRoaXMuZGVidWdfdWkuZ2V0Q2hpbGRCeU5hbWUoXCJub2RlX3N5XCIpLmdldENoaWxkQnlOYW1lKFwiZWRpdGJveFwiKS5nZXRDb21wb25lbnQoY2MuRWRpdEJveCk7XG4gICAgICAgICAgICBvLm5vZGVfYXggPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwibm9kZV9heFwiKS5nZXRDaGlsZEJ5TmFtZShcImVkaXRib3hcIikuZ2V0Q29tcG9uZW50KGNjLkVkaXRCb3gpO1xuICAgICAgICAgICAgby5ub2RlX2F5ID0gdGhpcy5kZWJ1Z191aS5nZXRDaGlsZEJ5TmFtZShcIm5vZGVfYXlcIikuZ2V0Q2hpbGRCeU5hbWUoXCJlZGl0Ym94XCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8ubm9kZV93eCA9IHRoaXMuZGVidWdfdWkuZ2V0Q2hpbGRCeU5hbWUoXCJub2RlX3d4XCIpLmdldENoaWxkQnlOYW1lKFwiZWRpdGJveFwiKS5nZXRDb21wb25lbnQoY2MuRWRpdEJveCk7XG4gICAgICAgICAgICBvLm5vZGVfd3kgPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwibm9kZV93eVwiKS5nZXRDaGlsZEJ5TmFtZShcImVkaXRib3hcIikuZ2V0Q29tcG9uZW50KGNjLkVkaXRCb3gpO1xuICAgICAgICAgICAgby5ub2RlX3ggPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwibm9kZV94XCIpLmdldENoaWxkQnlOYW1lKFwiZWRpdGJveFwiKS5nZXRDb21wb25lbnQoY2MuRWRpdEJveCk7XG4gICAgICAgICAgICBvLm5vZGVfeSA9IHRoaXMuZGVidWdfdWkuZ2V0Q2hpbGRCeU5hbWUoXCJub2RlX3lcIikuZ2V0Q2hpbGRCeU5hbWUoXCJlZGl0Ym94XCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8ubm9kZV9jX3IgPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwibm9kZV9jXCIpLmdldENoaWxkQnlOYW1lKFwiZWRpdGJveF9yXCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8ubm9kZV9jX2cgPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwibm9kZV9jXCIpLmdldENoaWxkQnlOYW1lKFwiZWRpdGJveF9nXCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8ubm9kZV9jX2IgPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwibm9kZV9jXCIpLmdldENoaWxkQnlOYW1lKFwiZWRpdGJveF9iXCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8ubm9kZV9jX2EgPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwibm9kZV9jXCIpLmdldENoaWxkQnlOYW1lKFwiZWRpdGJveF9hXCIpLmdldENvbXBvbmVudChjYy5FZGl0Qm94KTtcbiAgICAgICAgICAgIG8uc2hvdyA9IHRoaXMuZGVidWdfdWkuZ2V0Q2hpbGRCeU5hbWUoXCJzaG93XCIpLmdldENvbXBvbmVudChjYy5Ub2dnbGUpO1xuICAgICAgICAgICAgby5jaGlsZF9idG4gPSB0aGlzLmRlYnVnX3VpLmdldENoaWxkQnlOYW1lKFwiY2hpbGRfYnRuXCIpO1xuICAgICAgICAgICAgby5wYXJlbnRfYnRuID0gdGhpcy5kZWJ1Z191aS5nZXRDaGlsZEJ5TmFtZShcInBhcmVudF9idG5cIik7XG4gICAgICAgICAgICBvLnNjcm9sbF9jb250ZW50ID0gdGhpcy5kZWJ1Z191aS5nZXRDaGlsZEJ5TmFtZShcInNjcm9sbHZpZXdcIikuZ2V0Q29tcG9uZW50KGNjLlNjcm9sbFZpZXcpLmNvbnRlbnQ7XG4gICAgICAgICAgICBvLnNjcm9sbF9pdGVtID0gby5zY3JvbGxfY29udGVudC5nZXRDaGlsZEJ5TmFtZShcIml0ZW1cIik7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpX28gPSBvO1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z1VJRXZ0KG8pO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuZGVidWdfdWkuYWN0aXZlKXtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVidWdVSU9iaih0aGlzLmlucHV0KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREZWJ1Z1VJRXZ0IDogZnVuY3Rpb24obyl7XG4gICAgICAgIC8vIFZpZXdNYW5hZ2VyLmdldEluc3RhbmNlKCkuZ2V0U2NlbmVOb2RlKFNDRU5FX1RBRy5sb2FkaW5nKS5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgby50b3VjaC5vbihjYy5Ob2RlLkV2ZW50VHlwZS5UT1VDSF9FTkQsIGZ1bmN0aW9uIChldmVudCl7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdERlYnVnVUlPYmooZXZlbnQuZ2V0VG91Y2hlcygpWzBdLmdldExvY2F0aW9uKCkpO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgby5zaG93Lm5vZGUub24oY2MuTm9kZS5FdmVudFR5cGUuVE9VQ0hfRU5ELCBmdW5jdGlvbiAoZXZlbnQpe1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z191aV9vYmoxLmFjdGl2ZSA9ICF0aGlzLmRlYnVnX3VpX29iajEuYWN0aXZlO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgby5wYXJlbnRfYnRuLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z1VJT2JqKHRoaXMuZGVidWdfdWlfb2JqLm5vZGUgfHwgdGhpcy5kZWJ1Z191aV9vYmoucGFyZW50KTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIG8ubm9kZV93Lm5vZGUub24oJ2VkaXRpbmctZGlkLWVuZGVkJywgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z191aV9vYmoxLndpZHRoID0gTnVtYmVyKG8ubm9kZV93LnN0cmluZyk7XG4gICAgICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpCb3JkZXIodGhpcy5kZWJ1Z191aV9vYmoxLCB0cnVlKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIG8ubm9kZV9oLm5vZGUub24oJ2VkaXRpbmctZGlkLWVuZGVkJywgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z191aV9vYmoxLmhlaWdodCA9IE51bWJlcihvLm5vZGVfaC5zdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z1VJT2JqQm9yZGVyKHRoaXMuZGVidWdfdWlfb2JqMSwgdHJ1ZSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICBvLm5vZGVfc3gubm9kZS5vbignZWRpdGluZy1kaWQtZW5kZWQnLCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpX29iajEuc2NhbGVYID0gTnVtYmVyKG8ubm9kZV9zeC5zdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z1VJT2JqQm9yZGVyKHRoaXMuZGVidWdfdWlfb2JqMSwgdHJ1ZSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICBvLm5vZGVfc3kubm9kZS5vbignZWRpdGluZy1kaWQtZW5kZWQnLCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpX29iajEuc2NhbGVZID0gTnVtYmVyKG8ubm9kZV9zeS5zdHJpbmcpO1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z1VJT2JqQm9yZGVyKHRoaXMuZGVidWdfdWlfb2JqMSwgdHJ1ZSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICBvLm5vZGVfYXgubm9kZS5vbignZWRpdGluZy1kaWQtZW5kZWQnLCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpX29iajEuc2V0QW5jaG9yUG9pbnQoTnVtYmVyKG8ubm9kZV9heC5zdHJpbmcpLCBOdW1iZXIoby5ub2RlX2F5LnN0cmluZykpO1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z1VJT2JqQm9yZGVyKHRoaXMuZGVidWdfdWlfb2JqMSwgdHJ1ZSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICBvLm5vZGVfYXkubm9kZS5vbignZWRpdGluZy1kaWQtZW5kZWQnLCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpX29iajEuc2V0QW5jaG9yUG9pbnQoTnVtYmVyKG8ubm9kZV9heC5zdHJpbmcpLCBOdW1iZXIoby5ub2RlX2F5LnN0cmluZykpO1xuICAgICAgICAgICAgdGhpcy5zZXREZWJ1Z1VJT2JqQm9yZGVyKHRoaXMuZGVidWdfdWlfb2JqMSwgdHJ1ZSk7XG4gICAgICAgIH0sIHRoaXMpO1xuICAgICAgICBvLm5vZGVfeC5ub2RlLm9uKCdlZGl0aW5nLWRpZC1lbmRlZCcsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIHRoaXMuZGVidWdfdWlfb2JqMS54ID0gTnVtYmVyKG8ubm9kZV94LnN0cmluZyk7XG4gICAgICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpCb3JkZXIodGhpcy5kZWJ1Z191aV9vYmoxLCB0cnVlKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIG8ubm9kZV95Lm5vZGUub24oJ2VkaXRpbmctZGlkLWVuZGVkJywgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgdGhpcy5kZWJ1Z191aV9vYmoxLnkgPSBOdW1iZXIoby5ub2RlX3kuc3RyaW5nKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVidWdVSU9iakJvcmRlcih0aGlzLmRlYnVnX3VpX29iajEsIHRydWUpO1xuICAgICAgICB9LCB0aGlzKTtcbiAgICAgICAgby5ub2RlX2NfYS5ub2RlLm9uKCdlZGl0aW5nLWRpZC1lbmRlZCcsIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgIHRoaXMuZGVidWdfdWlfb2JqMS5vcGFjaXR5ID0gTnVtYmVyKG8ubm9kZV9jX2Euc3RyaW5nKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIG8ubm9kZV9jX3Iubm9kZS5vbignZWRpdGluZy1kaWQtZW5kZWQnLCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpDb2xvcihvKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIG8ubm9kZV9jX2cubm9kZS5vbignZWRpdGluZy1kaWQtZW5kZWQnLCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpDb2xvcihvKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgIG8ubm9kZV9jX2Iubm9kZS5vbignZWRpdGluZy1kaWQtZW5kZWQnLCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpDb2xvcihvKTtcbiAgICAgICAgfSwgdGhpcyk7XG4gICAgfSxcblxuICAgIG1vdmVEZWJ1Z1VJT2JqUG9zIDogZnVuY3Rpb24oeCwgeSl7XG4gICAgICAgIGlmKCF0aGlzLmRlYnVnX3VpIHx8ICF0aGlzLmRlYnVnX3VpLmFjdGl2ZSB8fCAhdGhpcy5kZWJ1Z191aV9vYmoxKSByZXR1cm47XG4gICAgICAgIHRoaXMuZGVidWdfdWlfb2JqMS5zZXRQb3NpdGlvbih0aGlzLmRlYnVnX3VpX29iajEueCArIHgsIHRoaXMuZGVidWdfdWlfb2JqMS55ICsgeSk7XG4gICAgICAgIHRoaXMuc2V0RGVidWdVSU9iaih0aGlzLmRlYnVnX3VpX29iajEpO1xuICAgIH0sXG5cbiAgICBzZXREZWJ1Z1VJT2JqQ29sb3IgOiBmdW5jdGlvbihvKXtcbiAgICAgICAgaWYodGhpcy5kZWJ1Z191aV9vYmouZm9udENvbG9yKXtcbiAgICAgICAgICAgIHRoaXMuZGVidWdfdWlfb2JqLmZvbnRDb2xvciA9IG5ldyBjYy5Db2xvcihOdW1iZXIoby5ub2RlX2Nfci5zdHJpbmcpLCBOdW1iZXIoby5ub2RlX2NfZy5zdHJpbmcpLCBOdW1iZXIoby5ub2RlX2NfYi5zdHJpbmcpKTtcbiAgICAgICAgfWVsc2UgaWYodGhpcy5kZWJ1Z191aV9vYmoxLmNvbG9yKXtcbiAgICAgICAgICAgIHRoaXMuZGVidWdfdWlfb2JqLmNvbG9yID0gbmV3IGNjLkNvbG9yKE51bWJlcihvLm5vZGVfY19yLnN0cmluZyksIE51bWJlcihvLm5vZGVfY19nLnN0cmluZyksIE51bWJlcihvLm5vZGVfY19iLnN0cmluZykpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHNldERlYnVnVUlPYmogOiBmdW5jdGlvbihvYmope1xuICAgICAgICBpZighb2JqKSByZXR1cm47XG4gICAgICAgIC8vIExvZy5pbmZvKFwiPT09PT4+PlwiLCBvYmoud196SW5kZXgpO1xuICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpCb3JkZXIodGhpcy5kZWJ1Z191aV9vYmoxLCBmYWxzZSk7XG4gICAgICAgIGlmKHRoaXMuZGVidWdfdWlfb2JqICE9IG9iail7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNoaWxkTm9kZXMob2JqKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlYnVnX3VpX29iaiA9IG9iajtcbiAgICAgICAgLy8gTG9nLmluZm8ob2JqLCBvYmoudG9TdHJpbmcoKSwgb2JqLl9fY2xhc3NuYW1lX18sIG9iai5nZXRDbGFzc05hbWUpO1xuICAgICAgICB2YXIgbyA9IHRoaXMuZGVidWdfdWlfbztcbiAgICAgICAgdmFyIG9iajEgPSBvYmoubm9kZSB8fCBvYmo7XG4gICAgICAgIHRoaXMuZGVidWdfdWlfb2JqMSA9IG9iajE7XG4gICAgICAgIHZhciBjID0gb2JqLmZvbnRDb2xvciB8fCBvYmoxLmNvbG9yIHx8IHt9O1xuICAgICAgICAvLyBMb2cuaW5mbyhvYmoxLmFuY2hvclgsIG9iajEuYW5jaG9yWSwgb2JqMSk7XG4gICAgICAgIG8uc2hvdy5pc0NoZWNrZWQgPSBvYmoxLmFjdGl2ZTtcbiAgICAgICAgby5uYW1lLnN0cmluZyA9IG9iajEuX25hbWUgfHwgb2JqLm5hbWUgfHwgXCJcIjtcbiAgICAgICAgby50eXBlLnN0cmluZyA9IGNjLmpzLmdldENsYXNzTmFtZShvYmopIHx8IFwiXCI7XG4gICAgICAgIG8ubm9kZV93LnN0cmluZyA9IG9iajEud2lkdGggfHwgMDtcbiAgICAgICAgby5ub2RlX2guc3RyaW5nID0gb2JqMS5oZWlnaHQgfHwgMDtcbiAgICAgICAgby5ub2RlX3N4LnN0cmluZyA9IG9iajEuc2NhbGVYIHx8IDA7XG4gICAgICAgIG8ubm9kZV9zeS5zdHJpbmcgPSBvYmoxLnNjYWxlWSB8fCAwO1xuICAgICAgICBvLm5vZGVfYXguc3RyaW5nID0gb2JqMS5hbmNob3JYO1xuICAgICAgICBvLm5vZGVfYXkuc3RyaW5nID0gb2JqMS5hbmNob3JZO1xuICAgICAgICB2YXIgcG9zID0gdGhpcy5kZWJ1Z191aV9vYmoxLmNvbnZlcnRUb1dvcmxkU3BhY2UoY2MudjIoMCwwKSk7XG4gICAgICAgIG8ubm9kZV93eC5zdHJpbmcgPSBwb3MueCB8fCAwO1xuICAgICAgICBvLm5vZGVfd3kuc3RyaW5nID0gcG9zLnkgfHwgMDtcbiAgICAgICAgby5ub2RlX3guc3RyaW5nID0gb2JqMS54IHx8IDA7XG4gICAgICAgIG8ubm9kZV95LnN0cmluZyA9IG9iajEueSB8fCAwO1xuICAgICAgICBvLm5vZGVfY19yLnN0cmluZyA9IGMuZ2V0UiAmJiBjLmdldFIoKSB8fCAwO1xuICAgICAgICBvLm5vZGVfY19nLnN0cmluZyA9IGMuZ2V0RyAmJiBjLmdldEcoKSB8fCAwO1xuICAgICAgICBvLm5vZGVfY19iLnN0cmluZyA9IGMuZ2V0QiAmJiBjLmdldEIoKSB8fCAwO1xuICAgICAgICBvLm5vZGVfY19hLnN0cmluZyA9IG9iajEub3BhY2l0eSB8fCAwO1xuICAgICAgICB0aGlzLnNldERlYnVnVUlPYmpCb3JkZXIob2JqMSwgdHJ1ZSk7XG4gICAgfSxcblxuICAgIHVwZGF0ZUNoaWxkTm9kZXMgOiBmdW5jdGlvbihvYmope1xuICAgICAgICBsZXQgaXRlbXMgPSB0aGlzLmRlYnVnX3VpX2l0ZW1zIHx8IFtdO1xuICAgICAgICB0aGlzLmRlYnVnX3VpX2l0ZW1zID0gaXRlbXM7XG4gICAgICAgIGZvcihsZXQgaT0wLCBuPWl0ZW1zLmxlbmd0aDsgaTxuOyBpKyspe1xuICAgICAgICAgICAgaXRlbXNbaV0uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHkgPSAwO1xuICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICAvL0xvZy5pbmZvKG9iai5fY29tcG9uZW50cywgb2JqLmNoaWxkcmVuKTtcbiAgICAgICAgdmFyIG5vZGVzID0gb2JqLl9jb21wb25lbnRzIHx8IFtdO1xuICAgICAgICBmb3IobGV0IGk9MCwgbj1ub2Rlcy5sZW5ndGg7IGk8bjsgaSsrKXtcbiAgICAgICAgICAgIGlmKG5vZGVzW2ldLmJvcmRlcikgY29udGludWU7XG4gICAgICAgICAgICB5ID0gdGhpcy5jcmVhdGVEZWJ1Z1VJSXRlbShcImNcIiwgaWQrKywgbm9kZXNbaV0sIHkpO1xuICAgICAgICB9XG4gICAgICAgIG5vZGVzID0gb2JqLmNoaWxkcmVuIHx8IFtdO1xuICAgICAgICBmb3IobGV0IGk9MCwgbj1ub2Rlcy5sZW5ndGg7IGk8bjsgaSsrKXtcbiAgICAgICAgICAgIGlmKG5vZGVzW2ldLmJvcmRlcikgY29udGludWU7XG4gICAgICAgICAgICB5ID0gdGhpcy5jcmVhdGVEZWJ1Z1VJSXRlbShcIm5cIiwgaWQrKywgbm9kZXNbaV0sIHkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVidWdfdWlfby5zY3JvbGxfY29udGVudC5oZWlnaHQgPSAteVxuICAgIH0sXG5cbiAgICBjcmVhdGVEZWJ1Z1VJSXRlbSA6IGZ1bmN0aW9uKHR5cGUsIGksIG9iaiwgeSl7XG4gICAgICAgIGxldCBpdGVtID0gdGhpcy5kZWJ1Z191aV9pdGVtc1tpXTtcbiAgICAgICAgaWYoIWl0ZW0pe1xuICAgICAgICAgICAgaXRlbSA9IGNjLmluc3RhbnRpYXRlKHRoaXMuZGVidWdfdWlfby5zY3JvbGxfaXRlbSk7XG4gICAgICAgICAgICBpdGVtLm9uKGNjLk5vZGUuRXZlbnRUeXBlLlRPVUNIX0VORCwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGVidWdVSU9iaihpdGVtLm8pO1xuICAgICAgICAgICAgfSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRlYnVnX3VpX28uc2Nyb2xsX2NvbnRlbnQuYWRkQ2hpbGQoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWJ1Z191aV9pdGVtc1tpXSA9IGl0ZW07XG4gICAgICAgIGl0ZW0uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgaXRlbS5vID0gb2JqO1xuICAgICAgICB2YXIgb2JqMSA9IG9iai5ub2RlIHx8IG9iajtcbiAgICAgICAgaXRlbS5nZXRDb21wb25lbnQoY2MuTGFiZWwpLnN0cmluZyA9IFwiW1wiICsgdHlwZSArIFwiXVwiICsgKGNjLmpzLmdldENsYXNzTmFtZShvYmopIHx8IFwiXCIpICsgXCIoXCIgKyAob2JqMS5fbmFtZSB8fCBvYmoubmFtZSB8fCBcIm5hbWVcIikgKyBcIilcIjtcbiAgICAgICAgaXRlbS55ID0geTtcbiAgICAgICAgLy9Mb2cuaW5mbyhpdGVtLmdldENvbXBvbmVudChjYy5MYWJlbCkuc3RyaW5nLCBpLCB5KTtcbiAgICAgICAgcmV0dXJuIHkgLSAzMDtcbiAgICB9LFxuXG4gICAgc2V0RGVidWdVSU9iakJvcmRlciA6IGZ1bmN0aW9uKG9iaiwgZmxhZyl7XG4gICAgICAgIGlmKCFvYmopIHJldHVybjtcbiAgICAgICAgaWYoZmxhZyA9PSBmYWxzZSl7XG4gICAgICAgICAgICBpZihvYmogJiYgb2JqLmRyYXdfbm9kZSl7XG4gICAgICAgICAgICAgICAgb2JqLmRyYXdfbm9kZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZighb2JqLmRyYXdfbm9kZSl7XG4gICAgICAgICAgICBvYmouZHJhd19ub2RlID0gbmV3IGNjLk5vZGUoKTtcbiAgICAgICAgICAgIG9iai5kcmF3X25vZGUuYm9yZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgIG9iai5wYXJlbnQuYWRkQ2hpbGQob2JqLmRyYXdfbm9kZSk7XG4gICAgICAgICAgICBvYmouZHJhd19sYXllciA9IG9iai5kcmF3X25vZGUuYWRkQ29tcG9uZW50KGNjLkdyYXBoaWNzKTtcbiAgICAgICAgICAgIC8vIG9iai5kcmF3X2xheWVyLmZpbGxDb2xvciA9IG5ldyBjYy5Db2xvcigwLCAyNTUsIDApO1xuICAgICAgICAgICAgb2JqLmRyYXdfbGF5ZXIuc3Ryb2tlQ29sb3IgPSBuZXcgY2MuQ29sb3IoMCwgMjU1LCAwKTtcbiAgICAgICAgICAgIG9iai5kcmF3X2xheWVyLmxpbmVXaWR0aCA9IDI7XG4gICAgICAgICAgICAvLyBMb2cuaW5mbyhvYmouYW5jaG9yWCwgb2JqLmFuY2hvclksIG9iai54LCBvYmoueSwgb2JqLndpZHRoLCBvYmouaGVpZ2h0LCBvYmouZHJhd19ub2RlLmFuY2hvclgsIG9iai5kcmF3X25vZGUuYW5jaG9yWSwgb2JqLnBhcmVudC5hbmNob3JYLCBvYmoucGFyZW50LmFuY2hvclkpO1xuICAgICAgICB9XG4gICAgICAgIG9iai5kcmF3X25vZGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgb2JqLmRyYXdfbm9kZS5zZXRBbmNob3JQb2ludChvYmouYW5jaG9yWCwgb2JqLmFuY2hvclkpO1xuICAgICAgICBvYmouZHJhd19ub2RlLnNldFBvc2l0aW9uKG9iai54LCBvYmoueSk7XG4gICAgICAgIG9iai5kcmF3X2xheWVyLmNsZWFyKCk7XG4gICAgICAgIG9iai5kcmF3X2xheWVyLnJlY3QoLW9iai53aWR0aCAqIG9iai5hbmNob3JYLCAtb2JqLmhlaWdodCpvYmouYW5jaG9yWSwgb2JqLndpZHRoLCBvYmouaGVpZ2h0KTtcbiAgICAgICAgb2JqLmRyYXdfbGF5ZXIuc3Ryb2tlKCk7XG4gICAgICAgIC8vb2JqLmRyYXdfbGF5ZXIuZmlsbCgpO1xuICAgIH0sXG5cbiAgICBzZWxlY3REZWJ1Z1VJT2JqIDogZnVuY3Rpb24ocG9zKXtcbiAgICAgICAgaWYodGhpcy5kZWJ1Z191aSAmJiB0aGlzLmRlYnVnX3VpLmFjdGl2ZSl7XG4gICAgICAgICAgICB2YXIgbmV3b2JqID0gdGhpcy5tYXRjaERlYnVnVUlPYmooY2MuZGlyZWN0b3IuZ2V0U2NlbmUoKSwgMSwgcG9zLCBudWxsLCAwKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVidWdVSU9iaihuZXdvYmopO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIG1hdGNoRGVidWdVSU9iaiA6IGZ1bmN0aW9uKG5vZGUsIG4sIHBvcywgb2JqLCB6aW5kZXgpe1xuICAgICAgICBpZihuID4gMTAwKSByZXR1cm4gb2JqOyAvLyDlj6rlpITnkIbliLDkuIDlrprmt7HluqZcbiAgICAgICAgbGV0IG5vZGVzID0gbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgZm9yKGxldCBpPTAsIGxlbj1ub2Rlcy5sZW5ndGg7IGk8bGVuOyBpKyspe1xuICAgICAgICAgICAgaWYobm9kZXNbaV0uYWN0aXZlICYmICFub2Rlc1tpXS5nbSl7XG4gICAgICAgICAgICAgICAgaWYobj4xICYmIHRoaXMuaGl0T2JqKG5vZGVzW2ldLCBwb3MpKXtcbiAgICAgICAgICAgICAgICAgICAgbm9kZXNbaV0ud196SW5kZXggPSB6aW5kZXggKyBpO1xuICAgICAgICAgICAgICAgICAgICBvYmogPSB0aGlzLmNvbXBPYmoobm9kZXNbaV0sIG9iaik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9iaiA9IHRoaXMubWF0Y2hEZWJ1Z1VJT2JqKG5vZGVzW2ldLCBuICsgMSwgcG9zLCBvYmosIHppbmRleCArIGkgKiAxMDAwMDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcblxuICAgIGhpdE9iaiA6IGZ1bmN0aW9uKG5vZGUsIHBvcyl7XG4gICAgICAgIGxldCByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0JveFRvV29ybGQoKTtcbiAgICAgICAgcmV0dXJuIHJlY3QuY29udGFpbnMocG9zKTtcbiAgICB9LFxuXG4gICAgY29tcE9iaiA6IGZ1bmN0aW9uKG9iaiwgb2JqMSl7XG4gICAgICAgIGlmKG9iai53aWR0aCA8IDEgfHwgb2JqLmhlaWdodCA8IDEgfHwgb2JqLndpZHRoID49IFNDUkVFTl9XSURUSCB8fCBvYmouaGVpZ2h0ID49IFNDUkVFTl9IRUlHSFQpe1xuICAgICAgICAgICAgcmV0dXJuIG9iajE7XG4gICAgICAgIH1lbHNlIGlmKCFvYmoxKXtcbiAgICAgICAgICAgIHJldHVybiBvYmo7XG4gICAgICAgIC8vIH1lbHNlIGlmKG9iai53X3pJbmRleCA+IG9iajEud196SW5kZXgpe1xuICAgICAgICAvLyAgICAgcmV0dXJuIG9iajtcbiAgICAgICAgfWVsc2UgaWYob2JqLndpZHRoICogb2JqLmhlaWdodCA8IG9iajEud2lkdGggKiBvYmoxLmhlaWdodCl7XG4gICAgICAgICAgICByZXR1cm4gb2JqO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmoxO1xuICAgIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gR21DbWQ7Il19